반응형
데몬셋(DaemonSet)
데몬셋은 모든(또는 일부) 노드가 파드의 기능을 실행하도록 한다. 노드가 클러스터에 추가되면 파드도 추가된다. 노드가 클러스터에서 제거되면 해당 파드는 가비지(garbage)로 수집된다. 데몬셋을 삭제하면 데몬셋이 생성한 파드들이 정리된다.
데몬셋의 일부 대표적인 용도는 다음과 같다.
- 모든 노드에서 클러스터 스토리지 데몬 실행
- 모든 노드에서 로그 수집 데몬 실행
- 모든 노드에서 노드 모니터링 데몬 실행
단순한 케이스에서는, 각 데몬 유형의 처리를 위해서 모든 노드를 커버하는 하나의 데몬셋이 사용된다. 더 복잡한 구성에서는 단일 유형의 데몬에 여러 데몬셋을 사용할 수 있지만, 각기 다른 하드웨어 유형에 따라 서로 다른 플래그, 메모리, CPU 요구가 달라진다
DaemonSet 사용
# nginx 서비스하는 daemonset YAML파일 생성
jinsu@jinsu:~$ cat daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: myapp
spec:
selector:
matchLabels:
name: myapp
template:
metadata:
labels:
name: myapp
spec:
containers:
- name: log
image: nginx
jinsu@jinsu:~$
# pod 생성 및 daemonset 확인
jinsu@jinsu:~$ kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-g8xvz 1/1 Running 0 14s
jinsu@jinsu:~$ kubectl get daemonset
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
myapp 1 1 1 1 1 <none> 15s
jinsu@jinsu:~$
# pod 상세정보
jinsu@jinsu:~$ kubectl get pod myapp-g8xvz -oyaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2022-08-14T09:03:42Z"
generateName: myapp-
labels:
controller-revision-hash: 574bb58466
name: myapp
pod-template-generation: "1"
name: myapp-g8xvz
namespace: default
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: DaemonSet
name: myapp
uid: 043877d9-3e51-4f30-b66d-3babe0e4aeef
resourceVersion: "18179"
selfLink: /api/v1/namespaces/default/pods/myapp-g8xvz
uid: 12cd389d-8769-44e6-b8ca-0d92981e7102
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchFields:
- key: metadata.name
operator: In
values:
- master
containers:
- image: nginx
imagePullPolicy: Always
name: log
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: default-token-vm2hl
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: master
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/disk-pressure
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/memory-pressure
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/pid-pressure
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/unschedulable
operator: Exists
volumes:
- name: default-token-vm2hl
secret:
defaultMode: 420
secretName: default-token-vm2hl
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2022-08-14T09:03:42Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2022-08-14T09:03:46Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2022-08-14T09:03:46Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2022-08-14T09:03:42Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: docker://8029082fe0c04c42f894896d1fccdfa75968a0f87fedeb4b2696ee92a843e397
image: nginx:latest
imageID: docker-pullable://nginx@sha256:790711e34858c9b0741edffef6ed3d8199d8faa33f2870dea5db70f16384df79
lastState: {}
name: log
ready: true
restartCount: 0
started: true
state:
running:
startedAt: "2022-08-14T09:03:46Z"
hostIP: 192.168.0.211
phase: Running
podIP: 10.42.0.47
podIPs:
- ip: 10.42.0.47
qosClass: BestEffort
startTime: "2022-08-14T09:03:42Z"
jinsu@jinsu:~$
DaemonSet 삭제
# 현재 데몬셋 확인
jinsu@jinsu:~$ kubectl get daemonset
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
myapp 1 1 1 1 1 <none> 6m24s
# 데몬셋 삭제
jinsu@jinsu:~$ kubectl delete daemonset myapp
daemonset.apps "myapp" deleted
jinsu@jinsu:~$
jinsu@jinsu:~$ kubectl get daemonset
No resources found in default namespace.
jinsu@jinsu:~$ dd
참고자료
https://kubernetes.io/ko/docs/concepts/workloads/controllers/daemonset/
반응형
'Kubernetes' 카테고리의 다른 글
[K8S] 쿠버네티스 - 크론잡(CronJob) 기능 (0) | 2022.08.14 |
---|---|
[K8S] 쿠버네티스 - 잡(Job) 기능 (0) | 2022.08.14 |
[K8S] 쿠버네티스 - 배포(Deployment) 기능 (0) | 2022.08.14 |
[K8S] 쿠버네티스 - 레플리카셋(replicaset) 기능 (0) | 2022.08.14 |
[K8S] 쿠버네티스 - 서비스(Service) 기능 (0) | 2022.08.14 |