본문 바로가기

kubernetes, helm, rancher

kubernetes Statefulset, Job, Cronjob

기본적인 kubernetes resource, option 등을 설명한 블로그입니다. 추가적인 기능을 보고싶으시면 docs를 참고바랍니다.

https://kubernetes.io/docs/home/

 

Kubernetes Documentation

Kubernetes is an open source container orchestration engine for automating deployment, scaling, and management of containerized applications. The open source project is hosted by the Cloud Native Computing Foundation.

kubernetes.io

  • StatefulSet - pod의 상태(pod 이름, pod의 볼륨)를 유지해주는 controller

 

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: sf-nginx
spec:
  replicas: 3
  serviceName: sf-nginx-service
  # podManagementPolicy: OrderedReady # OrderedReady가 default, 0번, 1번을 순차적으로 ready
  podManagementPolicy: Parallel # 0번, 1번 ... 동시에 실행
  ...

 

  • sf-nginx-0, sf-nginx-1 ... pod이름이 이렇게 정해지고 scale을 조정하면 숫자에 따라 순차적으로 제거 및 생성된다.
  • kubectl scale statefulset [statefulset name] --replicas=[num]
  • kubectl edit statefulsets, kubectl rollout undo statefulesets 으로 수정하면 rolling update, rolling back 가능.
  • kubernetes는 pod를 running 중인 상태를 유지시키려는 특징이 있음. -> kubectl run testpod --image:centos:7 --command sleep 5 를 통해 5초동안 멈추고 다시 restart 되는 pod를 생성. 
  • 따라서 job contoller가 정상적으로 작업을 완료한 pod에 대해서는 종료하도록 함. 비정상종료시 다시 실행.
  • 작업이 완료되면 Ready 상태가 0/1로 바뀜. pod가 삭제가 되는건 아님.

 

apiVersion: batch/v1
kind: Job
metadata:
  name: centos
spec:
# completions: 5 # 순차적으로 정상종료 된 후 실행하는 pod개수
# paralleism: 2 # 동시에 실행하려는 pod 개수 -> 2개 동시 실행 후, 완료 후 다시 2개 동시에 실행.
# activeDeadlineSeconds: 15 # 15초안에 안끝나면 terminating
  template:
    spec:
      containers:
        - name: centos-container
          image:contos:7
          command: ["bash"]
          args:
          - "-c"
          - "echo 'Hello World'; sleep 50; echo 'Bye'"
        restartPolicy: Never # 비정상 종료 시 pod를 restart 시킨다. -> pod가 계속 생성된다.
        # restartPolicy: OnFailure # container만 backoffLimit만큼 restart -> restart가 증가
   backoffLimit: 3 # default 6번

 

  • kubectl delete jobs.batch centos-job -> pod의 로그기록, 데이터 등을 보존해주기 위해 남기고 job을 지우기 위함.
  • CronJob contoller -> 원하는 시간에 job 실행 예약.
  • "[Miniutes(0~59)] [Hours(0~23)] [Day(1~31)] [Month(1~12)] [Week(0~6, 일요일:0)]" -> *->다 포함(매주, 매월...), 주중 1-5, 주말 0,6, 5분마다 */5 

 

kind: CronJob
...
spec:
  schedule: "0 3 1 * *"
  startingDeadlineSeconds: 300 # 300초 동안까지만 job 실행.
  concurrencyPolicy: Forbid # default는 Allow, 한번에 여러개 job이 실행 허용, forbid는 금지.
  successfulJobHistoryLimit: 3 # 계속 job pod가 남겨지는데 그 개수를 제한.
  jobTemplate:
  ... # job과 동일