이번 포스팅에서는 Kubernetes에서 Daemonset Object에 대해서 알아 보겠습니다. 유사한 Object로 Replicationset이 있었는데. 이 둘의 차이는 ReplicationSet은 Pod 배포를 스케쥴어에 의해 무작위로 Node에 배포를 합니다. 즉 한개의 Node에 2개 이상의 Pod가 배포될 수도 있고. 어떤 Node에는 배포되지 않을 수도 있습니다. 즉 무작위로 배포를 하고 운영되는 Pod의 숫자를 관리를 하는 Object입니다.
만약에 한개의 Node에 한개의 Pod만 배포하고 싶을 경우에는 Daemonset Object를 사용을 해야 합니다.
Daemonsset은 ReplicationSet과 달리 스케쥴러를 거치지 않고 직접 배포를 합니다. 스케줄러를 거치지 않기에 한개의 Node에 한개의 Pod를 배포를 할 수 있는 것입니다. 둘의 차이를 보면 아래 그림과 같습니다.
그림출처: Kubernetes In action
이게 어떻게 가능할까요? DaemonSet은 Node-Selector라는 파라메터를 이용해서 특정 Node를 지정을 할수 있습니다.
그럼 daemonset.yaml파일을 만들고 아래 내용을 입력 후 종료 합니다.
root@master-VirtualBox:~/test/daemonset# vi daemonset.yaml
apiVersion: apps/v1 ==> daemonset object는 v1beta2 버전에 존재
kind: DaemonSet ==> 배포될 객체 정의
metadata:
name: ssd-monitor
spec:
selector:
matchLabels:
app: ssd-monitor ==> 대상 Pod의 Label 정의
template:
metadata:
labels:
app: ssd-monitor
spec:
nodeSelector: ==> 어느 노드에 배포할지 정의
disk: ssd ==> Node에 disk: ssd Label이 존재 하는 경우에 배포
containers:
- name: main
image: luksa/ssd-monitor
|
그럼 이제 daemonset을 배포를 하고 상태를 조회해 보겠습니다.
root@master-VirtualBox:~/test/daemonset# kubectl apply -f daemonset.yaml
daemonset.apps/ssd-monitor created
root@master-VirtualBox:~/test/daemonset# kubectl get pod
No resources found in default namespace.
|
get pod 명령어로 조회를 해보면 pod가 배포되지 않은것을 알수 있습니다. 그 이유는 어떤 Node도 Label값을 가지고 있지 않기 때문에 배포가 되지 않은것 입니다. 그럼 이제 아래와 같이 Node에 Label을 입력 하고 다시 조회를 해보겠 습니다.
root@master-VirtualBox:~/test/daemonset# kubectl get nodes ==> Node 정보 조회
NAME STATUS ROLES AGE VERSION
master-virtualbox Ready control-plane 8d v1.24.3
worknode1-virtualbox Ready <none> 8d v1.24.3
worknode2-virtualbox Ready <none> 8d v1.24.3
root@master-VirtualBox:~/test/daemonset# kubectl label node worknode1-virtualbox disk=ssd ==> node1에 레이블 설정
node/worknode1-virtualbox labeled
root@master-VirtualBox:~/test/daemonset# kubectl get pod -o wide ==> Pod정보 조회
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ssd-monitor-dqr2w 1/1 Running 0 29s 172.16.168.250 worknode1-virtualbox <none> <none>
oot@master-VirtualBox:~/test/daemonset# kubectl label nodes worknode1-virtualbox disk=hdd --overwrite
oot@master-VirtualBox:~/test/daemonset# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ssd-monitor-dqr2w 1/1 Terminating 0 5m20s 172.16.168.250 worknode1-virtualbox <none> <none>
|
위와 같이 처음에는 어떤 Node에서 배포된 Pod가 없지만. Node1에 disk=ssd라는 Label을 설정 후에 조회를 해보면 신규 Pod 하나가 배포된것을 확인할 수 있습니다. 그리고 Label값은 ssd에서 hdd로 변경을 해보면 기존에 배포된 Pod가 삭제 되는것을 볼수 있습니다.
'쿠버네티스' 카테고리의 다른 글
[클라우드] 10. 쿠버네티스 Configmap 사용하기. (85) | 2023.08.20 |
---|---|
[클라우드] 11. Kubernetes Volume 사용하기 (12) | 2023.01.30 |
[클라우드] 8. Kubernetes Prob의 종류와 Resource 할당 (6) | 2022.09.18 |
[클라우드] 7. Deployment strategies (6) | 2022.09.13 |
[클라우드] 6. Kubernetes Service 배포 (37) | 2022.09.03 |