안녕하세요, 쯀리입니다.
오늘은 Daemon Sets에 관해 알아볼게요
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
Daemon Set이란?
Daemon이란것을 들어보셨나요?
사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말합니다.
https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%AA%AC_(%EC%BB%B4%ED%93%A8%ED%8C%85)#%EA%B0%81%EC%A3%BC
Kubernetes에서 DaemonSet 은 모든(또는 일부) 노드가 Pod 복사본을 실행하도록 보장하는 Controller입니다. 클러스터에 노드가 추가되면 해당 노드에 Pod가 추가됩니다. 클러스터에서 노드가 제거되면 해당 Pod는 가비지 수집됩니다. DaemonSet를 삭제하면 생성된 Pod가 정리됩니다.
DaemonSet의 예제: fluentd 로그 수집기를 클러스터의 모든 노드에 배포하는 DaemonSet의 예제입니다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
labels:
app: fluentd
spec:
selector:
matchLabels:
name: fluentd
template:
metadata:
labels:
name: fluentd
spec:
containers:
- name: fluentd
image: fluentd:latest
resources:
limits:
memory: "200Mi"
cpu: "100m"
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
DaemonSet에 관해 예제를 통해 더 자세히 알아보도록 할게요,
Quiz.
1. How many DaemonSets are created in the cluster in all namespaces?
k get daemonsets -A
2. Which namespace is the kube-proxy Daemonset created in?
위에서 확인했을때 kube-proxy는 kube-system 이라는 namespace에 만들어져 있습니다.
3. Which of the below is a DaemonSet?
kube-flannel-ds
4. On how many nodes are the pods scheduled by the DaemonSet kube-proxy?
k describe daemonset kube-proxy -n=kube-system
한개의 pod가 스케쥴 잡혀 있는 것을 볼 수 있습니다.
5. What is the image used by the POD deployed by the kube-flannel-ds DaemonSet?
// 해당 daemon의 namespace를 알아본다
k get daemonset -A
// 동일한 namespace로 찾아 pod를 검색
k get pod -A -o wide | grep kube-flannel
// 해당 pod에서 image검색
k describe pod kube-flannel-ds-bzgjl -n=kube-flannel | grep Image
그럼 배포된 image는 docker.io/flannel/flannel:v0.23.0
6. Deploy a DaemonSet for FluentD Logging. Use the given specifications.
Name: elasticsearch
Namespace: kube-system
Image: registry.k8s.io/fluentd-elasticsearch:1.20
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
name: elasticsearch
template:
metadata:
labels:
name: elasticsearch
spec:
tolerations:
# these tolerations are to have the daemonset runnable on control plane nodes
# remove them if your control plane nodes should not run pods
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
image: registry.k8s.io/fluentd-elasticsearch:1.20
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
# it may be desirable to set a high priority class to ensure that a DaemonSet Pod
# preempts running Pods
# priorityClassName: important
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
Docs의 yaml파일을 참고했습니다.
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
오늘은 DaemonSet에 관해 알아보았습니다. 이는 모든 노드에 필요한 특정 작업을 수행하는 Pod를 배포할 때 유용합니다. 예를 들어, 로그 수집기, 모니터링 에이전트, 네트워크 구성 관리 등을 수행하는 데 사용됩니다.
다음시간에는 Static PODs에 관해 알아보겠습니다.
참조
※ Udemy Labs - Certified Kubernetes Administrator with Practice Tests
'IT 잡지식 > DevOps' 카테고리의 다른 글
[CKA] KodeKloud - Multiple Schedulers (0) | 2024.06.23 |
---|---|
[CKA] KodeKloud - Static PODs (0) | 2024.06.23 |
[CKA] KodeKloud -Resource Limits (0) | 2024.06.09 |
[CKA] KodeKloud -Node Affinity (0) | 2024.06.08 |
[CKA] KodeKloud -Taints and Tolerations (0) | 2024.06.08 |