블록체인
블록체인

애플리케이션의 오브젝트 배포 형태

목차

Pod

apiVersion: v1 //Pod를 배포할때는 적합한 API Version을 명시해야 함 kind: Pod metadeata: lables: run: po-nginx // pod의 라벨 name: po-nginx // pod 이름 spec: containers: // 컨테이너 이미지 - image: nignx name: nignx [root@m-k8s ~]# k apply -f pod.yaml [root@m-k8s ~]# k get po NAME READY STATUS RESTARTS AGE po-nginx 1/1 Running 0 41s
YAML
복사

Deployment

apiVersion: apps/v1 kind: Depoyment metadeata: lables: run: deploy-nginx name: deploy-nginx spec: replicas: 3 //replicas는 3개로 설정함 selector: //selector는 template을 가져다가 사용함 matchLables: app: po-nginx // template의 app과 이름이 동일해야 함 template: metadata: labels: app: po-nginx // selector의 app과 이름이 동일해야 함 spec: containers: - image: nignx name: nignx [root@m-k8s ~]# k apply -f deployment.yaml deployment.apps/deploy-nginx created [root@m-k8s ~]# k get po NAME READY STATUS RESTARTS AGE deploy-nginx-66d86cc68-fd672 1/1 Running 0 76s deploy-nginx-66d86cc68-jc75m 1/1 Running 0 76s deploy-nginx-66d86cc68-zd9dt 1/1 Running 0 76s
YAML
복사

ReplicaSet

kind: ReplicaSet 부분을 제외하고는 deployment.yaml과 내용이 동일함
롤링 업데이트를 위해 replicaset을 사용
Deployment가 ReplicaSet을 만들고, ReplicaSet이 ReplicaSet의 복제본을 만들어서 두 개를 같이 유지하면서 업데이트 가능
apiVersion: apps/v1 kind: ReplicaSet metadeata: lables: run: rs-nginx name: rs-nginx spec: replicas: 3 //replicas는 3개로 설정함 selector: //selector는 template을 가져다가 사용함 matchLables: app: po-nginx // template의 app과 이름이 동일해야 함 template: metadata: labels: app: po-nginx // selector의 app과 이름이 동일해야 함 spec: containers: - image: nignx name: nignx # replicaset 배포 [root@m-k8s ~]# k apply -f replicaset.yaml replicaset.apps/rs-nginx created [root@m-k8s ~]# k get po NAME READY STATUS RESTARTS AGE rs-nginx-wj6vk 0/1 ContainerCreating 0 3s rs-nginx-z69mp 0/1 ContainerCreating 0 3s rs-nginx-zwmb7 0/1 ContainerCreating 0 3s [root@m-k8s ~]# k get replicasets.apps NAME DESIRED CURRENT READY AGE rs-nginx 3 3 3 30s # deployment 배포 [root@m-k8s ~]# k apply -f deployment.yaml deployment.apps/deploy-nginx created [root@m-k8s ~]# k get po NAME READY STATUS RESTARTS AGE deploy-nginx-66d86cc68-hjcxn 0/1 ContainerCreating 0 4s deploy-nginx-66d86cc68-tksnh 0/1 ContainerCreating 0 4s deploy-nginx-66d86cc68-wm7zg 0/1 ContainerCreating 0 4s rs-nginx-wj6vk 1/1 Running 0 2m13s rs-nginx-z69mp 1/1 Running 0 2m13s rs-nginx-zwmb7 1/1 Running 0 2m13s # replicaset을 확인해보면 앞에서 배포한 replicaset, deployment가 둘 다 확인됨 [root@m-k8s ~]# k get replicasets.apps NAME DESIRED CURRENT READY AGE deploy-nginx-66d86cc68 3 3 3 15s rs-nginx 3 3 3 2m23s # 그러나 deployment를 확인해보면 deployment밖에 확인되지 않음(deployment가 replicaset의 상위개념이기 때문) [root@m-k8s ~]# k get deployments.apps NAME READY UP-TO-DATE AVAILABLE AGE deploy-nginx 3/3 3 3 33s
YAML
복사

Job

apiVersion: batch/v1 kind: Job metadeata: name: job-curl-nginx spec: template: spec: containers: - image: sysnet4admin/net-tools name: net-tools command: ["curlchk", "nginx"] restartPolicy: Never // 다시 시작하지 않도록 설정(기본은 언제나 동작하도록 설정되어 있음) # nginx pod, svc 생성 [root@m-k8s ~]# k apply -f _Lecture_k8s_learning.kit/ch3/3.6/0-nginx-svc.yaml pod/nginx created service/nginx created # job pod 생성 [root@m-k8s ~]# k apply -f _Lecture_k8s_learning.kit/ch3/3.6/1-1-job-curl-succ.yaml job.batch/job-curl-succ created # ContainerCreating -> Completed 상태로 변경 [root@m-k8s ~]# k get po -w NAME READY STATUS RESTARTS AGE deploy-nginx-66d86cc68-hjcxn 1/1 Running 0 19h deploy-nginx-66d86cc68-tksnh 1/1 Running 0 19h deploy-nginx-66d86cc68-wm7zg 1/1 Running 0 19h job-curl-succ-vxxzx 0/1 ContainerCreating 0 5s nginx 1/1 Running 0 93s rs-nginx-wj6vk 1/1 Running 0 19h rs-nginx-z69mp 1/1 Running 0 19h rs-nginx-zwmb7 1/1 Running 0 19h job-curl-succ-vxxzx 0/1 Completed 0 10s job-curl-succ-vxxzx 0/1 Completed 0 10s # 로그 확인 [root@m-k8s ~]# k logs job-curl-succ-vxxzx Sun Nov 13 21:17:36 KST 2022 Okay [nginx] is working properly # 에러가 발생하는 pod 생성 [root@m-k8s ~]# k apply -f _Lecture_k8s_learning.kit/ch3/3.6/1-2-job-curl-fail.yaml job.batch/job-curl-fail created # ContainerCreating -> Completed 상태로 변경 [root@m-k8s ~]# k get po -w NAME READY STATUS RESTARTS AGE deploy-nginx-66d86cc68-hjcxn 1/1 Running 0 19h deploy-nginx-66d86cc68-tksnh 1/1 Running 0 19h deploy-nginx-66d86cc68-wm7zg 1/1 Running 0 19h job-curl-fail-tpsfq 0/1 ContainerCreating 0 3s job-curl-succ-vxxzx 0/1 Completed 0 2m15s nginx 1/1 Running 0 3m43s rs-nginx-wj6vk 1/1 Running 0 19h rs-nginx-z69mp 1/1 Running 0 19h rs-nginx-zwmb7 1/1 Running 0 19h job-curl-fail-tpsfq 0/1 Completed 0 4s job-curl-fail-tpsfq 0/1 Completed 0 4s # 로그 확인 [root@m-k8s ~]# k logs job-curl-fail-tpsfq Sun Nov 13 21:19:43 KST 2022 NOOO [hoon] is not working on # restartPolicy: Never를 명시하지 않은 pod 생성 시 에러 # Job은 "OnFailure"나 "Never"를 적어줘야 함 # 한번 실행하고 나면 더이상 실행을 안하도록 로그를 보존하도록 하는 목적으로 설계되어 있기 때문 [root@m-k8s ~]# k apply -f _Lecture_k8s_learning.kit/ch3/3.6/1-3-job-make-fail.yaml The Job "job-make-fail" is invalid: spec.template.spec.restartPolicy: Required value: valid values: "OnFailure", "Never"
YAML
복사

Job의 병렬 실행

Completions

잡이 Completed되면 다음 잡이 순차적으로 실행
apiVersion: batch/v1 kind: Job metadeata: name: job-curl-nginx spec: completions: 3 template: spec: containers: - image: sysnet4admin/net-tools name: net-tools command: ["curlchk", "nginx"] restartPolicy: Never
YAML
복사

Parallelism

Job이 한번에 병렬로 실행
apiVersion: batch/v1 kind: Job metadeata: name: job-curl-nginx spec: Parallelism: 3 template: spec: containers: - image: sysnet4admin/net-tools name: net-tools command: ["curlchk", "nginx"] restartPolicy: Never
YAML
복사

Job 자동 종료

activeDeadlineSeconds

Job이 ContainerCreating되고 x초 후 종료(Terminating)
apiVersion: batch/v1 kind: Job metadeata: name: job-activedeadlineseconds spec: backoffLimit: 3 activeDeadlineSeconds: 30 template: spec: containers: - image: sysnet4admin/net-tools name: net-tools command: ["/bin/sh", "-c"] args: - sleep 60; curlchk nginx; restartPolicy: Never
YAML
복사

ttlSecondsAfterFinished

Job이 Completed된 후 x초 후 종료(Terminating)
apiVersion: batch/v1 kind: Job metadeata: name: job-activedeadlineseconds spec: backoffLimit: 3 ttlSecondsAfterFinished: 30 template: spec: containers: - image: sysnet4admin/net-tools name: net-tools command: ["/bin/sh", "-c"] args: - sleep 60; curlchk nginx; restartPolicy: Never
YAML
복사

Cronjob

job을 주기적으로 실행할 수 있도록 해주는 오브젝트
apiVersion: batch/v1 kind: CronJob metadeata: name: cj-1m-hist3-curl spec: schedule: "*/1 * * * *" successfulJobsHistoryLimit: 10 //10회까지 동작한 CronJob을 보존(default : 3) jobTemplate: spec template: spec: containers: - name: net-tools image: sysnet4admin/net-tools command: ["curlchk", "nginx"] restartPolicy: Never
YAML
복사

DaemonSet

워커노드마다 한 개씩 배포되는 Pod
워커노드가 3개라면 Pod는 총 3개가 배포된다.
워커노드가 1개 추가되면 Pod도 1개 추가된다.
Deployment와 비교해보면 replicas가 없는 것을 확인할 수 있다.
apiVersion: apps/v1 kind: DaemonSet metadeata: lables: app: ds-nginx name: ds-nginx spec: selector: matchLables: app: po-nginx template: metadata: labels: app: po-nginx spec: containers: - image: nignx name: nignx [root@m-k8s ~]# k apply -f _Lecture_k8s_learning.kit/ch3/3.8/daemonset.yaml daemonset.apps/ds-nginx created [root@m-k8s ~]# k get po -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ds-nginx-2dsb2 1/1 Running 0 9s 172.16.132.17 w3-k8s <none> <none> ds-nginx-nlfhq 1/1 Running 0 9s 172.16.221.142 w1-k8s <none> <none> ds-nginx-qpm82 1/1 Running 0 9s 172.16.103.148 w2-k8s <none> <none>
YAML
복사

StatefulSet

상태 값을 저장해서 순서를 지키며 배포가 되는 특수한 Pod
StatefulSet에는 serviceName을 꼭 넣도록 되어있다.
scale in하거나 out 시 pod 이름 순서대로 명령이 이루어짐
apiVersion: apps/v1 kind: StatefulSet metadeata: name: sts-chk-hn spec: replicas: 3 serviceName: sts-svc-domain //이름이 해시값이 되에 붙지 않고 고정되어 있음 selector: matchLables: app: sts template: metadata: labels: app: sts spec: containers: - image: chk-hn name: system4admin/chk-hn [root@m-k8s ~]# k apply -f _Lecture_k8s_learning.kit/ch3/3.9/statefulset.yaml statefulset.apps/sts-chk-hn created [root@m-k8s ~]# k get po NAME READY STATUS RESTARTS AGE sts-chk-hn-0 1/1 Running 0 48s sts-chk-hn-1 1/1 Running 0 28s sts-chk-hn-2 0/1 ContainerCreating 0 6s
YAML
복사