레플리카셋과 데몬셋 비교
- 레플리카셋은 각 쿠버네티스 노드에 총 N개의 파드를 노드의 리소스 상황에 맞게 배치한다.
- 각 노드의 파드 수가 동일하다고 할 수 없으며, 모든 노드에 반드시 배치된다고도 할 수 없다.
- 데몬셋은 각 노드에 파드를 하나씩 배치하는 리소스
- 레플리카 수를 지정할 수 없고 하나의 노드에 두 개의 파드를 배칠 수도 없다.
- 다만 특정 파드에 배치하고 싶지 않을 경우
nodeSelector
나 node Anti-affinity
를 사용한 스케줄링으로 예외 처리가 가능하다.
- 쿠버네티스 노드를 늘렸을 때도 데몬셋의 파드는 자동으로 늘어난 노드에서 기동한다.
데몬셋 생성
- 데몬셋 생성 시 레플리카셋 등과 달리 레플리카 수 등을 지정할 수 있는 항목은 없다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: sample-ds
spec:
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.16
데몬셋 업데이트 전략
- 데몬셋 업데이트에는
OnDelete
와 RollingUpdate
가 있다.
OnDelete
- 데몬셋 매니페스트가 변경되었을 때 파드를 업데이트하지 않고 다른 이유로 파드가 다시 생성될 때 새로운 정의로 파드를 생성
OnDelete
설정 시 데몬셋 매니페스트를 수정하여 이미지 등을 변경했더라도 기존 파드는 업데이트되지 않는다.
OnDelete
로 설정하고 아무것도 하지 않을 경우, 노드의 유지 보수를 이유로 파드가 정지되거나 예기치 못하게 파드가 정지되는 등 다양한 이유로 파드가 정지되어 다시 생성되기 전까지는 업데이트되지 않는다.
- 운영상의 이유로 정지하면 안 되는 파드이거나 업데이트가 급하게 필요 없는 경우 OnDelete 설정으로 사용해도 되지만, 이전 버전이 계속 장기간 사용된다.
- 임의의 시점에 파드를 업데이트 하는 경우에는 데몬셋과 연결되 파드를
kubectl delete pod
명령어로 수동 정지시키고 자동화된 복구 기능으로 새로운 파드를 생성해야 한다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: sample-ds-ondelete
spec:
updateStrategy:
type: OnDelete
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.16
RollingUpdate
- 즉시 파드를 업데이트 한다.
- 데몬셋의 기본 업데이트 전략이다.
- 하나의 노드에 동일한 파드를 여러 개 생성할 수 없으므로 디플로이먼트와 달리 동시에 생성할 수 있는 최대 파드 수(
maxSurge
)를 설정할 수 없다.
- 동시에 정지 가능한 최대 파드 수(
maxUnavailable
)만 지정하여 RollingUpdate를 하게 된다.