apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-1
spec:
selector:
matchLabels:
name: daemonset-cndk
template:
metadata:
labels:
name: daemonset-cndk
spec:
containers:
- name: daemonset-pod
image: nginx
# (옵션) 마스터 - 터미널1
watch -d 'kubectl get pods,ds -o wide'
# 생성
curl -s -O https://raw.githubusercontent.com/gasida/DKOS/main/4/daemonset-1.yaml
kubectl apply -f daemonset-1.yaml
# 데몬셋 확인
kubectl get ds -o wide
root@k8s-m:~# kubectl get ds -o wide
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR
daemonset-1 3 3 3 3 3 <none> 5m15s daemonset-pod nginx name=daemonset-cndk
kubectl get pod --show-labels
root@k8s-m:~# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
daemonset-1-f9xrt 1/1 Running 0 76s controller-revision-hash=88d8d4645,name=daemonset-cndk,pod-template-generation=2
daemonset-1-lkgfz 1/1 Running 0 77s controller-revision-hash=88d8d4645,name=daemonset-cndk,pod-template-generation=2
daemonset-1-pkn27 1/1 Running 0 74s controller-revision-hash=88d8d4645,name=daemonset-cndk,pod-template-generation=2
kubectl describe ds daemonset-1
# 역시나 강제로 파드 삭제 테스트!
kubectl delete pod --all
# 삭제
kubectl delete ds daemonset-1
- job.yaml : 파이(π)의 2000 자리까지 계산해서 출력한다. (수행 시 5~10초 정도 소요)
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
# (옵션) 마스터 - 터미널1
watch -d 'kubectl get pods,jobs -o wide'
# 생성 및 확인
kubectl apply -f https://kubernetes.io/examples/controllers/job.yaml && kubectl get pods -w
root@k8s-m:~# kubectl apply -f https://kubernetes.io/examples/controllers/job.yaml && kubectl get pods -w
job.batch/pi created
NAME READY STATUS RESTARTS AGE
pi-ms267 0/1 ContainerCreating 0 0s
pi-ms267 0/1 ContainerCreating 0 1s
pi-ms267 1/1 Running 0 5s
pi-ms267 0/1 Completed 0 9s
pi-ms267 0/1 Completed 0 9s
# 수행 후 결과 로그 확인
kubectl logs -l job-name=pi
root@k8s-m:~# kubectl logs -l job-name=pi
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482...
# Job 확인
kubectl get jobs.batch pi -o wide
kubectl describe jobs.batch pi
# 파드 확인
root@k8s-m:~# kubectl get pod pi-ms267
NAME READY STATUS RESTARTS AGE
pi-ms267 0/1 Completed 0 3m16s
# 파드의 상태가 Succeeded임
root@k8s-m:~# kubectl describe pod pi-ms267
Name: pi-ms267
Namespace: default
Priority: 0
Node: k8s-w3/192.168.100.103
Start Time: Thu, 24 Jun 2021 07:15:39 +0000
Labels: controller-uid=1bc4c062-ad2e-49d9-ad19-1a16ec1bc693
job-name=pi
Annotations: cni.projectcalico.org/podIP:
cni.projectcalico.org/podIPs:
Status: Succeeded
...
# Job 생성 실행을 다시 한번 해보면 어떻게 될까?
kubectl apply -f https://kubernetes.io/examples/controllers/job.yaml
# 삭제
kubectl delete -f https://kubernetes.io/examples/controllers/job.yaml
- cronjob.yaml : 현재 시간과 hello 메시지를 1분마다 출력
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *" # Job 실행 주기
successfulJobsHistoryLimit: 10 # 성공 Job 최대 기록
jobTemplate: # 실행될 Job 설정 내용(spec)
spec:
template:
spec:
containers:
- name: hello
image: busybox
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo Hello from the DKOS Member!
restartPolicy: OnFailure
# (옵션) 마스터 - 터미널1
watch -d 'kubectl get pods,cronjobs -o wide'
# 생성
curl -s -O https://raw.githubusercontent.com/gasida/DKOS/main/4/cronjob.yaml
# 원하는 이름으로 바꿔보자! 여기서는 OSAM으로 변경
sed -i 's/DKOS Member/OSAM/g' cronjob.yaml
kubectl apply -f cronjob.yaml && kubectl get jobs --watch
# 확인
root@k8s-m:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-27075352-9wcr8 0/1 Completed 0 8m34s
hello-27075353-fwg55 0/1 Completed 0 7m34s
...
root@k8s-m:~# kubectl get cronjobs.batch
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 0 56s 18m
root@k8s-m:~# kubectl get jobs.batch
NAME COMPLETIONS DURATION AGE
hello-27075352 1/1 2s 9m2s
hello-27075353 1/1 3s 8m2s
...
# 성공 Job 로그 확인
watch -n 1 "kubectl logs -l job-name"
kubectl logs -l job-name
Mon Jul 26 17:32:02 UTC 2021
Hello from the OSAM!
Mon Jul 26 17:33:01 UTC 2021
Hello from the OSAM!
Mon Jul 26 17:34:01 UTC 2021
Hello from the OSAM!
...
# 삭제
kubectl delete -f cronjob.yaml