sangw0804 / study-docker

0 stars 1 forks source link

13. 포드를 사용하는 다른 오브젝트들 #14

Open sangw0804 opened 3 years ago

sangw0804 commented 3 years ago

디플로이먼트(레플리카셋)은 내부적으로 포드를 사용하는 오브젝트이다. 요거 말고도 내부적으로 포드를 사용하는 오브젝트들이 있는데, 다른 오브젝트들에 대해 알아보자.

1. 잡

잡은 특정 작업을 수행하고 성공적으로 종료되는 것을 목표로 하는 오브젝트이다. 디플로이먼트와는 달리 '특정 포드가 실행중' 이 desire state 가 아니고, '특정 포드가 실행되어 성공적으로 종료(completed)'가 desire state 이다.

apiVersion: batch/v1
kind: Job
metadata:
  name: job-hello-world
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: job-hello-world
          image: busybox
          args: ["sh", "-c", "echo Hello, World && exit 0"]

위 잡 오브젝트는 포드를 하나 생성하고 해당 포드가 정상 종료되면 더 이상 실행되지 않는다.

job 오브젝트는 배치성 작업에 주로 활용될 것 같으니.. 실제로는 아래 CronJob 오브젝트를 많이 사용할 듯 하다.

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob-example
spec:
  jobTemplate:
    spec:
      completions: 8
      parallelism: 2
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: cronjob-example
              image: busybox
              args: ["sh", "-c", "date"]
  schedule: "*/1 * * * *"

2. 데몬셋

데몬셋은 쿠버네티스 클러스터의 모든 노드에 해당 포드를 하나씩 생성하는 오브젝트이다. 주로 모니터링, 로깅 등을 담당할 사이드카 어플리케이션을 생성할때 많이 쓰인다.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-example
spec:
  selector:
    matchLabels:
      name: my-daemonset
  template:
    metadata:
      labels:
        name: my-daemonset
    spec:
      tolerations:
        - key: node-role.kubernetes.io/master
          effect: NoSchedule
      containers:
        - name: daemonset-example
          image: busybox
          args: ["tail", "-f", "/dev/null"]
          resources:
            limits:
              cpu: 100m
              memory: 200mi

데몬셋은 노드마다 하나의 포드가 있는 것이 중요하므로, 해당 노드에 장애가 발생하더라도 eviction 이 일어나지 않도록 여러 toleration이 설정된다고 함.

3. 스테이트풀 셋

스테이트풀 셋은 일반적인 stateless 한 파드와는 다르게 식별성을 지닌 파드를 만들고 싶을때 사용하는 오브젝트이다.

요부분은 잘 이해가 안되어서 구글링을 좀 해봤는데... https://bcho.tistory.com/1306 여기가 그나마 좀 정리가 잘 되어있다.

즉, 스테이트풀 셋으로 파드 3개를 만들면 해당 파드는 파드1, 파드2, 파드3으로 각각 고유하게 구분되는 이름을 갖는다. 이로 인해 다음 사항들이 deployment와 달라진다.

예시로 든 것이 dbms 프로세스인데(master/slave),,, 그렇다면 그냥 2개의 deployment로 나누어서 띄우면 되지 않나?

sangw0804 commented 3 years ago

https://baeji77.github.io/dev/book/10.statefulSet/

sangw0804 commented 3 years ago

https://bcho.tistory.com/1310

스테이트풀셋 아래 있는 파드들은 서로 다른 어플리케이션?