하위 태스크 1
Pod YAML 작성
기본 Pod 리소스를 정의하는 YAML 파일 작성
Control Plane 노드에 SSH로 접속한다.
vagrant ssh cp-k8s-1.30.0pod.yaml을 작성한다.
pod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: po-nginx
labels:
run: po-nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80하위 태스크 2
Pod 생성 및 확인
kubectl apply로 Pod 생성하고 상태 확인
작성한 pod.yaml을 클러스터에 적용해 Pod를 생성한다.
$ kubectl apply -f pod.yaml
# 결과:
# pod/po-nginx createdPod 상태를 확인한다.
$ kubectl get pods
# 결과:
# NAME READY STATUS RESTARTS AGE
# po-nginx 0/1 Pending 0 104s하위 태스크 3
Deployment YAML 작성
ReplicaSet과 Pod 템플릿을 포함한 Deployment 작성
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: deploy-nginx
name: deploy-nginx
spec:
replicas: 3
selector:
matchLabels:
app: po-nginx
template:
metadata:
labels:
app: po-nginx
spec:
containers:
- name: nginx
image: nginx하위 태스크 4
Deployment 생성
Deployment를 생성하고 관련 리소스 확인
Deployment를 생성한다.
$ kubectl apply -f deployment.yaml
# 결과:
# deployment.apps/deploy-nginx created생성된 리소스를 확인한다.
$ kubectl get deploy,rs,pods
# 결과:
# NAME READY UP-TO-DATE AVAILABLE AGE
# deployment.apps/deploy-nginx 0/3 3 0 11m
#
# NAME DESIRED CURRENT READY AGE
# replicaset.apps/deploy-nginx-7d4bb44bd6 3 3 0 11m
#
# NAME READY STATUS RESTARTS AGE
# pod/deploy-nginx-7d4bb44bd6-9rczx 0/1 Pending 0 11m
# pod/deploy-nginx-7d4bb44bd6-wwtvt 0/1 Pending 0 11m
# pod/deploy-nginx-7d4bb44bd6-zgn7q 0/1 Pending 0 11m
# pod/po-nginx 0/1 Pending 0 22m하위 태스크 5
스케일링 실습
kubectl scale 명령어로 파드 개수 조정
현재 Pod의 개수를 확인한다.
$ kubectl get pods
# 결과:
# NAME READY STATUS RESTARTS AGE
# deploy-nginx-7d4bb44bd6-9rczx 0/1 Pending 0 16m
# deploy-nginx-7d4bb44bd6-wwtvt 0/1 Pending 0 16m
# deploy-nginx-7d4bb44bd6-zgn7q 0/1 Pending 0 16m
# po-nginx 0/1 Pending 0 28mPod의 개수를 5개로 늘린다.
kubectl scale deployment deploy-nginx --replicas=5
# 결과:
# deployment.apps/deploy-nginx scaled다시 Pod의 개수를 조회한다. deploy-nginx-* 관련 Pod가 5개로 늘었다.
$ kubectl get pods
# 결과:
# NAME READY STATUS RESTARTS AGE
# deploy-nginx-7d4bb44bd6-9rczx 0/1 Pending 0 18m
# deploy-nginx-7d4bb44bd6-vslbh 0/1 Pending 0 37s
# deploy-nginx-7d4bb44bd6-wrsr7 0/1 Pending 0 37s
# deploy-nginx-7d4bb44bd6-wwtvt 0/1 Pending 0 18m
# deploy-nginx-7d4bb44bd6-zgn7q 0/1 Pending 0 18m
# po-nginx 0/1 Pending 0 30m하위 태스크 6
롤링 업데이트
kubectl set image로 이미지 업데이트
nginx 이미지를 1.28 버전으로 업데이트한다.
$ kubectl set image deployment/deploy-nginx nginx=nginx:1.28
# 결과:
# deployment.apps/deploy-nginx image updated사용 중인 이미지가 변경되었음을 확인한다.
$ kubectl get deploy deploy-nginx -o yaml | grep "image:"
# 결과:
# - image: nginx:1.28하위 태스크 7
롤백 실습
kubectl rollout undo로 이전 버전으로 되돌리기
배포 이력을 확인한다.
$ kubectl rollout history deployment/deploy-nginx
# 결과:
# deployment.apps/deploy-nginx
# REVISION CHANGE-CAUSE
# 1 <none>
# 2 <none>이전 버전으로 롤백한다.
$ kubectl rollout undo deployment/deploy-nginx
# 결과:
# deployment.apps/deploy-nginx rolled back이전 버전으로 롤백되어 nginx 버전 라벨이 사라졌음을 확인한다.
$ kubectl get deploy deploy-nginx -o yaml | grep "image:"
# 결과:
# - image: nginx하위 태스크 8
Job 생성
일회성 작업을 위한 Job 리소스 생성
job.yaml:
apiVersion: batch/v1
kind: Job
metadata:
name: job-curl-succ
spec:
template:
spec:
containers:
- name: net-tools
image: sysnet4admin/net-tools
command: ["curlchk", "nginx"]
restartPolicy: NeverJob을 생성한다.
$ kubectl apply -f job.yaml
# 결과:
# job.batch/job-curl-succ created생성된 Job의 상태를 확인한다.
$ kubectl get jobs
# 결과:
# NAME STATUS COMPLETIONS DURATION AGE
# job-curl-succ Running 0/1 49s 49s하위 태스크 9
CronJob 생성
주기적 작업을 위한 CronJob 리소스 생성
cronjob.yaml:
apiVersion: batch/v1
kind: CronJob
metadata:
name: cj-1m-hist10-curl
spec:
schedule: "*/1 * * * *"
successfulJobsHistoryLimit: 10
jobTemplate: # Template for job
spec: # same as before
template:
spec:
containers:
- name: net-tools
image: sysnet4admin/net-tools
command: ["curlchk", "nginx"]
restartPolicy: NeverCronJob을 생성한다.
$ kubectl apply -f cronjob.yaml
# 결과:
# cronjob.batch/cj-1m-hist10-curl createdCronJob 목록을 확인한다.
$ kubectl get cronjobs
# 결과:
# NAME SCHEDULE TIMEZONE SUSPEND ACTIVE LAST SCHEDULE AGE
# cj-1m-hist10-curl */1 * * * * <none> False 0 <none> 31s하위 태스크 10
DaemonSet 생성
모든 노드에 실행되는 DaemonSet 생성
daemonset.yaml:
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: ds-nginx
name: ds-nginx
spec:
selector:
matchLabels:
app: po-nginx
template:
metadata:
labels:
app: po-nginx
spec:
containers:
- name: nginx
image: nginx DaemonSet을 생성한다.
$ kubectl apply -f daemonset.yaml
# 결과:
# daemonset.apps/ds-nginx created하위 태스크 11
StatefulSet 생성
상태를 가진 애플리케이션을 위한 StatefulSet 생성
statefulset.yaml:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: sts-chk-hn
spec:
replicas: 3
serviceName: sts-svc-domain #statefulset need it
selector:
matchLabels:
app: sts
template:
metadata:
labels:
app: sts
spec:
containers:
- name: chk-hn
image: sysnet4admin/chk-hnStatefulSet 리소스를 생성한다.
$ kubectl apply -f statefulset.yaml
# 결과:
# statefulset.apps/sts-chk-hn created