일부 노드에서만 파드 실행하기
일부 노드에서만 파드 실행하기 (Running Pods on Only Some Nodes)
이 페이지는 DaemonSet의 일부로 파드를 일부 노드에서만 실행하는 방법을 보여줘요.
출처: 문서
본문
시작하기 전에
Kubernetes 클러스터가 있어야 하고, kubectl 명령줄 도구가 클러스터와 통신하도록 구성되어 있어야 해요. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 최소 두 개 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube를 이용해 만들거나, 아래 Kubernetes 플레이그라운드 중 하나를 사용할 수 있어요.
일부 노드에서만 파드 실행하기
DaemonSet을 실행하고 싶지만, 그 데몬 파드를 로컬 SSD(고체 상태) 스토리지가 있는 노드에서만 실행해야 한다고 상상해 봐요. 예를 들어 파드가 노드에 캐시 서비스를 제공하고, 그 캐시는 저지연 로컬 스토리지가 있을 때만 유용하다면 그렇죠.
1단계: 노드에 라벨 추가하기
SSD가 있는 노드에 ssd=true 라벨을 추가해요.
kubectl label nodes example-node-1 example-node-2 ssd=true
2단계: 매니페스트 생성하기
SSD 라벨이 붙은 노드에서만 데몬 파드를 프로비저닝할 DaemonSet을 만들어요.
다음으로 nodeSelector를 사용해 DaemonSet이 ssd 라벨이 "true"로 설정된 노드에서만 파드를 실행하도록 보장해요.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ssd-driver
labels:
app: nginx
spec:
selector:
matchLabels:
app: ssd-driver-pod
template:
metadata:
labels:
app: ssd-driver-pod
spec:
nodeSelector:
ssd: "true"
containers:
- name: example-container
image: example-image
3단계: DaemonSet 생성하기
kubectl create 또는 kubectl apply로 매니페스트에서 DaemonSet을 만들어요.
다른 노드에 ssd=true 라벨을 붙여볼게요.
kubectl label nodes example-node-3 ssd=true
노드에 라벨을 붙이면 자동으로 컨트롤 플레인(정확히는 DaemonSet 컨트롤러)이 그 노드에서 새 데몬 파드를 실행하도록 트리거해요.
kubectl get pods -o wide
출력은 다음과 비슷해요:
NAME READY STATUS RESTARTS AGE IP NODE
<daemonset-name><some-hash-01> 1/1 Running 0 13s ..... example-node-1
<daemonset-name><some-hash-02> 1/1 Running 0 13s ..... example-node-2
<daemonset-name><some-hash-03> 1/1 Running 0 5s ..... example-node-3