[k8s] 데몬셋(Daemonset)
데몬셋(Daemonset)
데몬셋은 클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러입니다. 클러스터 안에 새롭게 노드가 추가되었을 때 데몬셋이 자동으로 해당 노드에 파드를 실행시킵니다. 반대로 노드가 클러스터에서 빠졌을 때는 해당 노드에 있던 파드는 그대로 사라질 뿐 다른 곳으로 옮겨가서 실행되지는 않습니다.
따라서 데몬셋은 보통 로그 수집기를 실행하거나 노드를 모니터링하는 데몬 등 클러스터 전체에 항상 실행해두어야 하는 파드에 사용합니다.
데몬셋(Daemonset) 사용해보기
매니페스트 파일 작성
로그 수집을 실행하는 데몬셋의 예시는 다음과 같습니다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system # 1
labels:
k8s-app: fluentd-logging # 2
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
updateStrategy:
type: RollingUpdate # 3
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
containers:
- name: fluentd-elasticsearch
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2 # 4
env:
- name: testenv
value: value
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
#1 로그 수집기는 쿠버네티스 관리용 파드나 설정이므로, .metadata.namespace의 필드를 kube-system 네임스페이스로 설정합니다.
#2 .metadata.labels.k8s.app은 오브젝트를 식별하는 레이블로 키를 k8s-app인 값을 fluentd-loggin으로 설정합니다.
#3 데몬셋의 파드를 업데이트하는 방법으로 RollingUpdate로 설정합니다. .spec.updateStrategy.type 필드는 OnDelete와 RollingUpdate 두 가지 중 하나의 값을 설정합니다.
#4 로그 수집에 사용되는 fluentd(플루언트디)의 컨테이너 이미지를 설정합니다.
데몬셋 실행
데몬셋의 실행을 위해 위의 설정 내용을 daemonset.yaml로 저장합니다. 그리고 다음과 같이 명령어를 입력합니다.
kubectl apply -f daemonset.yaml
그리고 daemonset을 조회하는 명령어를 입력합니다.
kubectl get daemonset -n kube-system
fluentd-elasticsearch라는 데몬셋이 만들어진 것을 확인 할 수 있습니다. 노드가 2대 있기 때문에 2개의 데몬셋이 생성되었습니다.
대시보드에서도 각 노드에 파드가 생성된 것을 확인할 수있습니다.
데몬셋에 대하여 알아보았습니다.
참고