728x90
반응형
Node Affinity
Node Affinity란?
쿠버네티스 클러스터의 특정 노드에 노드 어피니티를 사용해 쿠버네티스 파드를 할당하는 방법을 말한다.
노드에 레이블 추가
- 클러스터의 노드를 레이블과 함께 나열하자.
$ kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master.example.com Ready control-plane,master 347d v1.22.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master.example.com,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
node1.example.com Ready :raw-html-m2r:`<none>` 347d v1.22.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1.example.com,kubernetes.io/os=linux
node2.example.com Ready :raw-html-m2r:`<none>` 347d v1.22.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2.example.com,kubernetes.io/os=linux
- 노드 한 개를 선택하고, 레이블을 추가하자.
$ kubectl label nodes node1.example.com disktype=ssd
- 선택한 노드가 disktype=ssd 레이블을 갖고 있는지 확인하자.
$ kubectl get nodes -L disktype
NAME STATUS ROLES AGE VERSION DISKTYPE
master.example.com Ready control-plane,master 347d v1.22.3
node1.example.com Ready :raw-html-m2r:`<none>` 347d v1.22.3 ssd
node2.example.com Ready :raw-html-m2r:`<none>` 347d v1.22.3
필수적인 노드 어피니티 (requiredDuringSchedulingIgnoredDuringExecution)를 사용해 파드 스케줄하기
requiredDuringSchedulingIgnoredDuringExecution을 사용하여 파드가 disktype=ssd 레이블이 있는 노드에만 스케줄될 것이라는 것을 의미한다.
- 매니페스트를 적용하여 선택한 노드에 스케줄된 파드를 생성한다.
$ cat > pod-nginx-required-affinity.yaml
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 get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 4s 10.40.0.4 node1.example.com <none> <none>
선호하는 노드 어피니티 (preferredDuringSchedulingIgnoredDuringExecution)를 사용해 파드 스케줄하기
preferredDuringSchedulingIgnoredDuringExecution을 사용하여 파드가 disktype=ssd 레이블이 있는 노드를 선호한다는 것을 의미한다.
- 매니페스트를 적용하여 선택한 노드에 스케줄된 파드를 생성한다.
$ cat > pod-nginx-preferred-affinity.yaml
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 create -f pod-nginx-preferred-affinity.yaml
- 파드가 선택한 노드에서 실행 중인지 확인하자.
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 4s 10.40.0.4 node1.example.com
728x90
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
Kubernetes::스케쥴링 (Scheduling) - 데몬셋 (1) | 2023.12.19 |
---|---|
Kubernetes::스케쥴링 (Scheduling) - Resource Limit (0) | 2023.12.19 |
Kubernetes::스케쥴링 (Scheduling) (0) | 2023.12.19 |
Kubernetes::핵심 개념 (Core Concepts) (0) | 2023.12.19 |
Kubernetes - Helm (헬름) (0) | 2021.12.28 |