일부 노드에서만 파드 실행하기

일부 노드에서만 파드 실행하기 (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

더 알아보기 (Learn more)