기본 데몬셋(DaemonSet) 생성하기
이 페이지는 쿠버네티스 클러스터의 모든 노드에서 파드를 실행하는 기본 데몬셋을
만드는 방법을 보여준다.
호스트로부터 파일을 마운트하고, 초기화 컨테이너를 사용해
그 내용을 로그로 남기며, pause 컨테이너를 이용하는 간단한 사용 사례를 다룬다.
시작하기 전에
쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와 통신할 수 있도록 설정되어 있어야 한다. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 적어도 2개 포함된 클러스터에서 실행하는 것을 추천한다. 만약, 아직 클러스터를 가지고 있지 않다면, minikube를 사용해서 생성하거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있다.
데몬셋의 동작을 보여주기 위해서는 최소 두 개의 노드(하나의 컨트롤 플레인 노드와 하나의 워커 노드)를 가진 쿠버네티스 클러스터가 필요하다.
데몬셋 정의하기
이 태스크에서는 기본 데몬셋을 생성하여 클러스터의 모든 노드에 파드가 하나씩 스케줄되도록 한다.
파드는 초기화 컨테이너를 이용해 호스트의 /etc/machine-id
내용을 읽어 로그에 남기고,
메인 컨테이너는 파드를 실행 상태로 유지하는 pause
컨테이너가 된다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: example-daemonset
spec:
selector:
matchLabels:
app.kubernetes.io/name: example
template:
metadata:
labels:
app.kubernetes.io/name: example
spec:
containers:
- name: pause
image: registry.k8s.io/pause
initContainers:
- name: log-machine-id
image: busybox:1.37
command: ['sh', '-c', 'cat /etc/machine-id > /var/log/machine-id.log']
volumeMounts:
- name: machine-id
mountPath: /etc/machine-id
readOnly: true
- name: log-dir
mountPath: /var/log
volumes:
- name: machine-id
hostPath:
path: /etc/machine-id
type: File
- name: log-dir
hostPath:
path: /var/log
(YAML) 매니페스트를 기반으로 데몬셋을 생성한다.
kubectl apply -f https://k8s.io/examples/application/basic-daemonset.yaml
적용 후, 클러스터의 모든 노드에서 데몬셋이 파드를 실행 중인지 확인할 수 있다.
kubectl get pods -o wide
출력은 다음과 같이 노드별로 하나의 파드를 보여줄 것이다.
NAME READY STATUS RESTARTS AGE IP NODE example-daemonset-xxxxx 1/1 Running 0 5m x.x.x.x node-1 example-daemonset-yyyyy 1/1 Running 0 5m x.x.x.x node-2
호스트에서 마운트한 로그 디렉터리를 확인하여 로그에 기록된
/etc/machine-id
파일의 내용을 볼 수 있다.kubectl exec <pod-name> -- cat /var/log/machine-id.log
<pod-name>
은 사용자의 파드 중 하나의 이름이다.
정리하기
데몬셋을 삭제하려면, 다음 명령어를 실행한다.
kubectl delete --cascade=foreground --ignore-not-found --now daemonsets/example-daemonset
이 간단한 데몬셋 예제는 초기화 컨테이너와 호스트 패스(host path) 볼륨 같은 핵심 컴포넌트를 소개하며, 더 고급 사용 사례로 확장할 수 있다. 더 자세한 내용은 데몬셋을 참고하자.
다음 내용
- 데몬셋(DaemonSet)에서 롤링 업데이트 수행을 참고한다.
- 기존 데몬셋 파드를 인계받기 위한 데몬셋 생성을 참고한다.