Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Assign Pods to Nodes using Node Affinity
노드 어피니티를 사용해 노드에 파드 할당
이 문서는 쿠버네티스 클러스터의 특정 노드에 노드 어피니티를 사용해 쿠버네티스 파드를 할당하는 방법을 설명한다.
시작하기 전에
쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와 통신할 수 있도록 설정되어 있어야 한다. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 적어도 2개 포함된 클러스터에서 실행하는 것을 추천한다. 만약, 아직 클러스터를 가지고 있지 않다면, minikube를 사용해서 생성하거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있다.
쿠버네티스 서버의 버전은 다음과 같거나 더 높아야 함. 버전: v1.10. 버전 확인을 위해서, 다음 커맨드를 실행kubectl version
.노드에 레이블 추가
클러스터의 노드를 레이블과 함께 나열하자.
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
레이블이 있는 것을 확인할 수 있다.
필수적인 노드 어피니티를 사용해 파드 스케줄하기
이 매니페스트는 disktype: ssd
라는 requiredDuringSchedulingIgnoredDuringExecution
노드 어피니티를 가진 파드를 설명한다.
파드가 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
매니페스트를 적용하여 선택한 노드에 스케줄된 파드를 생성한다.
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
선호하는 노드 어피니티를 사용해 파드 스케줄하기
이 매니페스트는 disktype: ssd
라는 preferredDuringSchedulingIgnoredDuringExecution
노드 어피니티를 가진 파드를 설명한다.
파드가 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
매니페스트를 적용하여 선택한 노드에 스케줄된 파드를 생성한다.
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
다음 내용
노드 어피니티에 대해 더 알아보기.