본문 바로가기

컨테이너/Kubernetes

[Kubernetes] (15). Node Affinity / Pod Affinity

Node Affinity

label을 통해서 특정 노드에 pod가 스케쥴링 될수 있도록 주는 옵션이다.

조건에 따라서 조금 더 유연한 스케쥴링이 가능하며, 더불어서 운영중에 변경값이 적용되면 무시할지 아니면 재기동 시킬지를 결정한다.

 

 


  •  node에 라벨링을 해준후에, node Affinity 룰을 통해서 해당 노드에 배포가 될수 있게 스케쥴링 합니다.

$ kubectl label nodes node1 disktype=ssd 
## 다음과 같이 노드에 라벨링을 해준다. 


$ kubectl get nodes --show-labels 
## 다음과 같이 노드에 라벨링이 된지 확인한다.
  • 노드 어피니티를 통해서 특정 노드에 pod가 스케쥴링 될수 있게 하는 configuration file 이다.

 

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disk-type 
            operator: In
            values:
            - ssd
  containers:
  - name: nginx
    image: nginx:latest

 

  • 4가지 종류의 조건이 있는데 4가지 조건을 명시 할 수 있다.

 

requiredDuringSchedulingIgnoredDuringExecution 
preferredDuringSchedulingIgnoredDuringExecution 
requiredDuringSchedulingRequiredDuringExecution 
preferredDuringSchedulingRequiredDuringExecution

 

 

앞의 빨간색 preferred & Required는 hard와 soft 즉,  반드시 포함해야 하는지 또는 우선시하되 필수는 아닌지를 결정하는 조건이며

중간의 파란색 Ignored & Required는 운영 중(Runtime) Node의 Label이 변경되면 무시할 것인지(Ignore) 또는 즉시 Eviction 처리(Required)하여 재기동을 수행할 것인지를 결정합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

pod Affinity

 

 

  • pod Affinity rule도 존재하는데, 이는 node Affinity rule과 같이 적용 가능하며 
  • podAffinity는 위와 같이 작성됩니다. 내용을 살펴보자면 pod와 node와 affinity rule을 다 만족시키면 해당 노드에 스케쥴링함

topologyKey는 node의 고유한 값으로 label 형태로 등록되어 있음.

kubectl describe node | grep topology 

 

 

apiVersion: v1
kind: Pod
metadata:
  name: with-pod-affinity
  labels:
    disktype: ssd
spec:
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: disktype
            operator: In
            values:
            - ssd
        topologyKey: topology.kubernetes.io/region
  containers:
  - name: with-pod-affinity
    image: nginx:latest

 

'컨테이너 > Kubernetes' 카테고리의 다른 글

[Kubernetes] (16). Static Pods  (0) 2021.08.31
[Kubernetes] (17). DaemonSets  (0) 2021.08.30
[Kubernetes] (14) Taints and Tolerations  (0) 2021.08.30
[Kubernetes] (13) Lables & Selectors  (0) 2021.08.29
[Kubernetes] (12) Scheduling 개요  (0) 2021.08.29