본문 바로가기
네트워크/k8s

[k8s] 16. DaemonSet, Job, CronJob

by Lauren X Ming 2021. 2. 14.

DaemonSet, Job, CronJob

1. DaemonSet

  • 노드들이 있고 자원들이 다 다를 때, ReplicaSet은 스캐줄러에 의존하여 파드를 노드에 배치
  • 자원이 많으면 노드에 파드를 많이 배치하고, 자원이 없으면 적게 배치
  • DaemonSet은 노드의 자원과 상관없이 각 노드마다 같은 파드를 배치시킴

자원과 관계없이 파드를 동일하게 배치해야하는 서비스

  1. Prometheus: 노드의 성능수집용
  2. fluentd: 노드의 로그수집용
  3. GlusterFS: 노드의 자원을 갖고 네트워크 파일 시스템 구축용

특징

  • 셀렉터와 템플릿이 있어서 모든 노드에 템플릿으로 파드를 만들고 셀렉터로 파드를 데몬셋과 연결시킴
  • 만약 노드들의 OS 종류가 달라 노드의 라벨이 붙어있고, os:ubuntu에 파드를 설치하고 싶지 않은 상황을 가정
  • 그러면, 파드에 nodeSelector os:centos를 지정하여 os:ubuntu 라벨이 있는 노드에 설치되지 않도록 함
  • 데몬셋은 한 노드에 하나를 초과해서 파드를 만들지 않지만, 노드에 파드를 안 만들 수 있음
  • 특정 노드의 포트에 접근했을 때, 노드에 들어있는 파드에 접근이 되도록 사용
    마치 노드포트처럼

  • 데몬셋의 템플릿에 hostPort를 설정하면 노드의 포트로 접근하면 파드로 연결시킴

Sample YAML

  • selector, template이 있음
  • template의 spec에서 nodeSelector를 통해 원하는 라벨이 달린 노드에만 파드생성, 지정하지 않으면 모든 노드에 파드 생성
  • containers에 ports가 있고, hostPort로 들어온 트래픽은 해당 파드의 containerPort로 연결됨
  • 18080 포트로 들어온 외부트래픽은 해당 파드의 8080 포트로 연결됨

2. Job

직접, ReplicaSet을 통해, Job을 통해 파드를 만드는 방식에 따른 차이점

  • 파드들이 Node1에서 돌아가다가 Node1이 다운되는 상황에서 다른 특징을 보임
  • 직접 만든 파드는 바로 Service Down
  • ReplicaSet, Job을 통해 만들어진 파드들은 다른 노드에 재생성됨

ReplicaSet, Job에서 파드 운영 시 나타나는 차이점

  • ReplicaSet에서 만든 파드는 일을 하지 않으면 파드를 Restart하여, 파드가 계속 수행 되도록 함
    • Recreate: 파드의 이름, 아이피 변경하여 다시 시작
    • Restart: 파드는 그대로 있고, 파드안의 컨테이너만 재기동
  • Job으로 만들어진 파드는 프로세스가 일을 하지 않으면 파드가 종료됨
  • 종료는 파드가 삭제되는게 아니라 자원을 사용하지 않고 멈춘 상태임
  • 종료된 파드에 들어가서 로그 확인 가능, 이후 필요 없으면 삭제해도 됨

특징

  • 템플릿에는 특정 작업만 하고 종료하는 파드들을 담음
  • 셀렉터는 직접 만들지 않아도 Job이 만들어줌
  • 템플릿으로 하나의 파드를 생성하고, 파드가 일을 다하면 보통 Job이 종료됨
  • completions: 6을 주면, 6개의 파드를 하나씩 순차적으로 실행시켜 모두 종료되면 종료
  • parallelism: 2을 주면, 2개씩 파드가 생성됨
  • activeDeadlineSeconds: 30을 주면, Job은 30초 후에 기능이 정지, 실행되고 있는 모든 파드들은 삭제, 실행되지 않은 파드들도 앞으로 실행이 안 됨
    • 일정 시간이 지나도록 완료가 되지 않은 파드들을 삭제하고 싶을 때

Sample YAML

  • completions, parallelism, actvieDeadlineSeconds를 동시에 설정 가능
  • 템플릿의 restartPolicy: Never는 고정된 값
    • Job은 Never, OnFailure만 사용 가능 --> 파드 라이프사이클에서 설명

3. CronJob

  • Job을 주기적으로 생성하는 역할

UseCase

  1. Backup: 특히 DB 백업
  2. Checking: 업데이트 확인
  3. Messaging: 예약 메일 발송

특징

  • jobTemplate을 통해 Job을 만듦
  • schedule에 나온 주기로 Job을 만듦
    • */1****: 1분에 Job을 하나씩 만듦
  • Job은 파드를 또 만듦
  • Suspend로 실행 중인 Job을 일시정지
  • Manual Trigger는 실습 때 함

Sample YAML

  • schedule, concurrencyPolicy 설정 가능
  • jobTemplate은 job을 만들 때의 내용이 다 들어감

concurrencyPolicy

  • Allow, Forbid, Replace가 있음
  • concurrencyPolicy를 설정하지 않으면 Allow가 default
  • 1분 간격으로 스캐줄 한다고 설정했을 때 각각의 특징을 설명함

Allow

  • 1분 때 Job 생성, 파드 생성
  • 2분 때 1분 때 만든 Job과 파드의 상태와 상관 없이 Job 생성, 파드 생성
  • 3분 때도 마찬가지

Forbid

  • 1분 때, Job, 파드 생성
  • 2분 때, 1분 때 만든 파드가 실행 중이면 skip
  • 1분 때 만든 파드가 종료되면 바로 Job, 파드 생성

Replace

  • 1분 때, Job, 파드 생성
  • 2분 때, 기존 Job, 파드는 삭제되고 새로운 Job, 파드 생성

출처

인프런 - 대세는 쿠버네티스