다음은 쿠버네티스 스터디 자료를 참고해 정리한 내용입니다.
데몬셋 ?
모든 노드에 Pod를 1개씩 생성해주는 오브젝트
DNS 파드
인프라 모니터링 에이전트 설치할때 유용하다.
데몬세트와 node가 있다.
리플리카 세트는 필요 없다.
<1> 데몬셋 테스트 1
<2> 데몬셋 테스트 2
<3> 정리
<1> 데몬셋 테스트 1
master node의 api 서버 접속
ssh -i ~/.ssh/id_rsa ubuntu@api.k8s.serverchk.com
1
디폴트로 존재하는 데몬셋 확인 ?
칼리코 노드와 kops 가 데몬셋으로 배포되어 있음.
kubectl get daemonsets.apps -n kube-system
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
calico-node 3 3 3 3 3 kubernetes.io/os=linux 3d22h
kops-controller 1 1 1 1 1 kops.k8s.io/kops-controller-pki=,node-
calico-node 와 kops-controller 가 모든 노드에 배포 된다.
데몬셋으로 배포 되어 있다.
2
상세 확인 ?
kubectl describe daemonsets.apps -n kube-system calico-node
kubectl describe daemonsets.apps -n kube-system kops-controller
3
cat << EOF > daemonset-1.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-1
spec:
selector:
matchLabels:
name: daemonset-cndk
template:
metadata:
labels:
name: daemonset-cndk
spec:
containers:
- name: daemonset-pod
image: nginx
EOF
4
다른 터미널에서 모니터링
watch -d kubectl get pods,ds -o wide
5
생성 ?
kubectl apply -f daemonset-1.yaml
daemonset.apps/daemonset-1 created
7
다른 터미널에서 상태 확인
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/daemonset-1-whc8n 1/1 Running 0 86s 100.99.166.4 ip-172-20-38-114.ap-
pod/daemonset-1-xzxns 1/1 Running 0 86s 100.98.158.176 ip-172-20-38-144.ap-
node당 1개씩 pod가 생긴다.
pod를 삭제 하더라도 데몬셋에 의해 자동으로 pod가 재 생성 된다.
데몬셋은 리플리카 세트가 필요 없어 리플리카 세트는 사용하지 않는다.
기본 work node에만 생성 된다. 마스터 노드는 생성되지 않는다.생성하려면 따로 옵션을 줘야 한다.
8
데몬셋 확인
kubectl get ds -o wide
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR
daemonset-1 2 2 2 2 2 <none> 100s daemonset-pod nginx
9
pod, 라벨 확인 ?
kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
daemonset-1-57s22 1/1 Running 0 3m43s controller-revision-hash=88d8d4645,name=daemonset-cndk,pod-template-generation=1
daemonset-1-wjq49 1/1 Running 0 3m43s controller-revision-hash=88d8d4645,name=daemonset-cndk,pod-template-generation=1
10
ds 상세 확인 ?
kubectl describe ds daemonset-1
11
강제 pod 삭제 테스트 ?
kubectl delete pod --all
pod "daemonset-1-whc8n" deleted
pod "daemonset-1-xzxns" deleted
삭제후 다시 생성됨
12
데몬셋 확인 ?
kubectl get ds -o wide
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR
daemonset-1 2 2 2 2 2 <none> 4m42s daemonset-pod nginx name=daemonset-cndk
13
데몬셋 삭제 ?
kubectl delete ds daemonset-1
// 터미널1 모니터링에서 없어진다.
14
데몬셋 확인 ?
kubectl get ds -o wide
No resources found in default namespace.
<2> 데몬셋 테스트 2
마스터 노드에도 데몬셋을 생성해 보자.
tolerations: 옵션 사용
1
cat << EOF > daemonset-2.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-2
spec:
selector:
matchLabels:
name: daemonset-cndk-2
template:
metadata:
labels:
name: daemonset-cndk-2
spec:
tolerations:
- effect: NoSchedule
operator: Exists
containers:
- name: daemonset-pod-2
image: nginx
EOF
// tolerations: = 마스터 노드에서 배포 된다. 모든 노드에 배포한다 !!!
2
ubuntu@ip-172-20-41-255:~$ kubectl apply -f daemonset-2.yaml
daemonset.apps/daemonset-2 created
3
kubectl get ds -o wide
ubuntu@ip-172-20-41-255:~$ kubectl get ds -o wide
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR
daemonset-2 3 3 3 3 3 <none> 22s daemonset-pod-2 nginx name=daemonset-cndk-2
4
다른 테미널에서 모니터링
watch -d 'kubectl get pods,ds -o wide'
kubectl get pods,ds -o wide
5
kubectl get pod --show-labels
ubuntu@ip-172-20-41-255:~$ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
daemonset-2-fhz6l 1/1 Running 0 72s controller-revision-hash=8bc7c45d6,name=daemonset-cndk-2,pod-template-generation=1
daemonset-2-nhhgj 1/1 Running 0 72s controller-revision-hash=8bc7c45d6,name=daemonset-cndk-2,pod-template-generation=1
daemonset-2-zbwqj 1/1 Running 0 72s controller-revision-hash=8bc7c45d6,name=daemonset-cndk-2,pod-template-generation=1
ubuntu@ip-172-20-41-255:~$
6
kubectl describe ds daemonset-2
7
kubectl delete ds daemonset-2
데몬셋 모두 삭제
kubectl delete ds --all
<3> 정리
데몬셋 ?
모든 노드에 Pod를 1개씩 생성해주는 오브젝트.
<4> 다음 과정
https://brunch.co.kr/@topasvga/1678
감사합니다.