노드 어피니티로 파드를 노드에 할당하기
노드 어피니티로 파드를 노드에 할당하기 (Assign Pods to Nodes using Node Affinity)
이 페이지에서는 쿠버네티스 클러스터에서 노드 어피니티(Node Affinity)를 사용해 쿠버네티스 Pod를 특정 노드에 할당하는 방법을 보여드려요.
출처: 문서
본문
시작하기 전에 (Before you begin)
쿠버네티스 클러스터가 필요하고, kubectl 명령줄 도구가 클러스터와 통신하도록 구성돼 있어야 해요. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 두 개 이상 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube로 만들거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있어요.
- iximiuz Labs
- Killercoda
- KodeKloud
쿠버네티스 서버가 최소 v1.10 버전이어야 해요. 버전을 확인하려면 kubectl version을 입력하세요.
노드에 라벨 추가하기 (Add a label to a node)
클러스터의 노드와 그 라벨을 나열해요.
kubectl get nodes --show-labels
출력은 다음과 비슷해요.
NAME STATUS ROLES AGE VERSION LABELS
worker0 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker0
worker1 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker1
worker2 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker2
노드 중 하나를 선택하고 그 노드에 라벨을 추가해요.
kubectl label nodes <your-node-name> disktype=ssd
여기서 <your-node-name>은 선택한 노드의 이름이에요.
선택한 노드에 disktype=ssd 라벨이 있는지 확인해요.
kubectl get nodes --show-labels
출력은 다음과 비슷해요.
NAME STATUS ROLES AGE VERSION LABELS
worker0 Ready <none> 1d v1.13.0 ...,disktype=ssd,kubernetes.io/hostname=worker0
worker1 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker1
worker2 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker2
앞선 출력에서 worker0 노드에 disktype=ssd 라벨이 있는 것을 볼 수 있어요.
required 노드 어피니티로 파드 스케줄링하기 (Schedule a Pod using required node affinity)
이 매니페스트는 requiredDuringSchedulingIgnoredDuringExecution 노드 어피니티, disktype: ssd를 가진 Pod를 설명해요. 즉 이 파드는 disktype=ssd 라벨이 있는 노드에만 스케줄링돼요.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
pods/pod-nginx-required-affinity.yaml — 매니페스트를 적용해 선택한 노드에 스케줄링되는 Pod를 생성해요.
kubectl apply -f https://k8s.io/examples/pods/pod-nginx-required-affinity.yaml
파드가 선택한 노드에서 실행 중인지 확인해요.
kubectl get pods --output=wide
출력은 다음과 비슷해요.
NAME READY STATUS RESTARTS AGE IP NODE
nginx 1/1 Running 0 13s 10.200.0.4 worker0
preferred 노드 어피니티로 파드 스케줄링하기 (Schedule a Pod using preferred node affinity)
이 매니페스트는 preferredDuringSchedulingIgnoredDuringExecution 노드 어피니티, disktype: ssd를 가진 Pod를 설명해요. 즉 이 파드는 disktype=ssd 라벨이 있는 노드를 선호해요.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: disktype
operator: In
values:
- ssd
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
pods/pod-nginx-preferred-affinity.yaml — 매니페스트를 적용해 선택한 노드에 스케줄링되는 Pod를 생성해요.
kubectl apply -f https://k8s.io/examples/pods/pod-nginx-preferred-affinity.yaml
파드가 선택한 노드에서 실행 중인지 확인해요.
kubectl get pods --output=wide
출력은 다음과 비슷해요.
NAME READY STATUS RESTARTS AGE IP NODE
nginx 1/1 Running 0 13s 10.200.0.4 worker0
다음 단계 (What's next)
노드 어피니티(Node Affinity)에 대해 더 배우기.