목차
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
복사