1. DaemonSet 소개
- 노드 레이블과 매칭이 되는 모든 노드 또는 노드 레이블이 없다면 모든 노드에 하나씩의 파드를 동작시키는 컨트롤러.
- 특정 노드에 파드를 배치되도록 하는 것.
- 노드가 추가되거나 노드의 레이블이 추가됐을 때 조건이 맞으면 실행★
- 실행할 노드가 없으면 죽어버린다.
- 동일한 노드에 두개의 파드가 만들어지지 않는다.
-> 하나에 하나만 만들어진다. - 기능은 레플리케이션 컨트롤러와 레플리카셋과 비슷하지만, 복제본을 지정하지 않는다.
- 노드가 추가되면 자동으로 컨트롤러는 하나의 파드를 배치
- 노드가 제거되면 삭제된 파드를 다른 노드에 배치하지 않는다.
-> 복제본 컨트롤러가 아니기 때문.
2. DaemonSet 생성
- 데몬셋 오브젝트의 API 버전 역시 apps 그룹의 v1 버전을 사용한다.
# myapp-ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: myapp-ds
spec:
selector:
matchLabels:
app: myapp-ds
template:
metadata:
labels:
app: myapp-ds
spec:
nodeSelector:
node: development
containers:
- name: myapp
image: httpd
ports:
- containerPort: 80
- .spec.template.spec.nodeSelector : 파드를 특정 노드에 배치할 수 있다.
- 데몬셋 오브젝트 생성
kubectl create -f myapp-ds.yaml
3. DaemonSet 확인
- 노드 레이블(development)과 매칭 되는 노드가 없기 때문에 파드를 생성하지 않는다.
- LABELS => node label
- 기본적으로 쿠버네티스 클러스터에 필요에 의해 사용하는 레이블만 있다.
- 해당 레이블에는 node라는 레이블의 키가 없으므로 매칭 되는 노드가 없다.
4. node label 지정
- 생성한 데몬셋 오브젝트가 파드를 생성하기 위해 노드에 레이블을 추가로 지정.
kubectl label nodes node1 node=development
5. DaemonSet 확인
- DaemonSet 확인
- pod 확인
6. node label 제거
- 노드 레이블을 제거하여 데몬셋이 실행하는 파드를 제거할 수 있다.
- 레이블 제거는 레이블의 값을 제거할 수도 있고, 레이블의 키를 제거할 수도 있다.
- 키를 제거한다는 것은 값도 제거된다는 의미
1) 노드 레이블 값 제거
kubectl label nodes node1 node='' --overwrite
2) 노드 레이블 키 제거
kubectl label nodes node1 node-
- 노드 레이블 셀렉터와 매칭 되는 것이 없기 때문에 파드는 제거된다.
7. DaemonSet 삭제
kubectl delete -f myapp-ds.yaml
'Containers > Kubernetes' 카테고리의 다른 글
5.2. Service 탐색 (1) | 2020.08.10 |
---|---|
5.1. Cluster 내부 서비스 (0) | 2020.08.03 |
4.3. ReplicaSet (0) | 2020.07.28 |
4.2. Replication Controller (0) | 2020.07.24 |
4.1. Liveness Probe (0) | 2020.07.24 |
댓글