Skip to content

Instantly share code, notes, and snippets.

@ianychoi
Last active July 26, 2021 17:35
Show Gist options
  • Select an option

  • Save ianychoi/0a2a2ef772ff1fe011acf3023812c678 to your computer and use it in GitHub Desktop.

Select an option

Save ianychoi/0a2a2ef772ff1fe011acf3023812c678 to your computer and use it in GitHub Desktop.
쿠버네티스 - DaemonSet & Jobs
  • daemonset-1.yaml
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
  • Job 실행 및 확인
# (옵션) 마스터 - 터미널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
  • CronJob: 실행 및 확인
# (옵션) 마스터 - 터미널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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment