쿠버네티스 Daemon Set, Stateful Sets, job

greenTea·2023년 8월 20일
0

쿠버네티스 Daemon Set, Stateful Sets, job

🤗전에 보았던 Replicaset, Deployment 말고도 다양한 컨트롤러들이 존재하는데 이번에는 DaemonSet, StatefulSets, job에 대해서 알아보겠습니다.

StatefulSet

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2

😎StatefulSet은 상태를 유지하는 파드의 집합을 관리하는데 사용됩니다.
기존의 replicaSet과 별다른 차이가 없는 것을 확인 할 수 있습니다. StatefulSet의 특징이라면 각 파드마다 정해진 이름을 가지게 된다는 것인데요 실제로 위 파일을 kubectl create -f [yaml 파일 이름]을 진행해보시면 각 파드의 이름이 (web-0, web-1...)형태로 존재하는 것을 확인 하실 수 있습니다.
🤔위 명령어를 실행한 후에 특정 파드를 삭제해보시면 해당 파드가 삭제된 후에 같은 이름을 가진 파드가 다시 생성되는 것을 확인 할 수 있으며 kubectl scale statefulset name --replicas=원하는 개수를 실행해 보시면 순차적으로 파드가 생성되는 것을 확인 할 수 있는데(web-2,web-3...) 이 것이 StatefulSet의 특징이라고 이해 하시면 됩니다.

DaemonSet

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-daemonset
spec:
  selector:
    matchLabels:
      name: nginx-daemonset
  template:
    metadata:
      labels:
        name: nginx-daemonset
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2

😑DaemonSet클러스터의 모든 노드에 파드를 실행하는 데 사용됩니다.
위 파일을 직접 실행해보시면 한 노드당 하나의 파드가 생성된 것을 확인 할 수 있습니다. 노드를 추가할 경우 해당 노드에 자동으로 파드가 생성되며 삭제할 경우에는 자동으로 삭제가 되는 것이 특징입니다.
🤨DaemonSet은 시스템 데몬, 로그 수집기, 모니터링 에이전트와 같이 각 노드에서 실행해야 하는 서비스에 특히 유용하다고 하네요. kubectl get daemonsets --all-namespaces를 실행해 보시면 다양한 daemonsets을 확인 할 수 있습니다.(대표적으로 kube-proxy가 있네요...)

Job

apiVersion: batch/v1
kind: Job
metadata:
  name: example-job
spec:
  completions: 10
  parallelism: 3
  template:
    spec:
      containers:
      - name: job-container
        image: busybox
        command: ["echo", "Hello from the Job container"]
      restartPolicy: Never

😓Job은 일회성 작업을 실행하는 데 사용됩니다. 주어진 작업을 완료한 후에 파드를 종료합니다. Job은 배치 작업, 데이터 처리 작업, 또는 특정 시간 동안 실행되는 작업과 같은 일회성의 작업을 실행하는 데 적합합니다.

1. completions
정의: 이 필드는 Job의 성공적인 완료를 위해 필요한 총 파드의 수를 지정합니다.

예를 들어, completions가 10으로 설정된 경우, 10개의 파드가 성공적으로 완료될 때까지 작업을 계속합니다. 첫 번째 파드가 실패하면 Job은 해당 파드를 다시 시작합니다.

2. parallelism
정의: 이 필드는 한 번에 실행되어야 하는 파드의 최대 수를 지정합니다.

😎예를 들어, parallelism이 3이고 completions가 10이라면, Job은 한 번에 최대 3개의 파드를 동시에 실행합니다. 3개의 파드 중 하나가 완료되면 (성공하든 실패하든) 새 파드가 시작되어 동시에 실행되는 파드의 수가 항상 3개가 유지됩니다. 전체적으로, 10개의 파드가 성공적으로 완료될 때까지 이 프로세스가 반복됩니다.

job의 경우 위의 처럼 일회성으로 끝내는 job도 있지만 주기적으로 실행 시켜주는 cronJob도 존재합니다.

결론

😭쿠버네티스는 다양한 컨트롤러들을 지원하는데 자신에게 필요한 컨트롤러를 사용하면 될 것 같습니다.(deployment를 가장 많이 쓸 것 같네요...)

profile
greenTea입니다.

0개의 댓글