Post

(2) Assign pod to nodes using Node Affinity

(2) Assign pod to nodes using Node Affinity

Affinity란?

  • affinity란 선호도란 의미. Pod는 항상 nodㄷ에 띄워져야 하는데, 이러한 배치를 함에 있어 선호하는 Node나 Pod에 설정할 수 있게끔 설정

Affinity 종류

  • nodeAffinity란 어떤 Node를 선호할것인가에대한 리소스. 즉 Pod를 배치할 떄 어떤 node에 스케쥴링 할지 설정
  • podAffinity는 pod가 배치될때, 실행중인 Pod들에 선호하는 pod를 찾아 해당 pod와 동일한 Node로 배치하는걸 선정
  • podAntiAffinity는 실행 중인 Pod들 중에, 선호하지 않은 pod가 실행중인 node에 피해서 배치를 하겠다

Node Affinity

  • 선호하는 Node를 설정하는 방법으로, nodeSelector보다 확장된 label selector기능을 지원
  • matchExpressions사용 가능(In,NotIn,Exists,DoesNotExists,Gt,Lt)
  • 2가지 옵션이 hard,soft가 존재
    • 반드시 충족 해야 하는 조건(Hard)
      • requiredDuringSchedulingIgnoredDuringExecution : 즉 스케쥴링 되는 워크로드에는 필수 조건이고 실행 중인 워크로드는 조건을 무시
    • 선호하는 조건(soft) -preferredDuringSchedulingIgnoredDuringExecution : 즉 스케쥴링 되는 워크로드에는 선호 조건이고, 실행 중인 워크로드는 조건을 무시
  • 용어
    • IgnoredDuringExecution: 실행 중인 워크로드에 대해서는 해당 규칙을 무시한다.
    • RequiredDuringExecution: 위와 반대개념으로 실행 중인 워크로드에 대해서 해당 규칙을 반드시 필요로 한다.

      에제

  • required.yml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: node-affinity-required
    spec:
    replicas: 3
    selector:
      matchLabels:
        app: hello
    template:
      metadata:
        name: hello
        labels:
          app: hello
      spec:
        containers:
        - name: nginx
          image: nginxdemos/hello:plain-text
          ports:
          - name: http
            containerPort: 80
            protocol: TCP
        affinity:
          nodeAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
              - matchExpressions:
                - key: team
                  operator: In
                  values:
                  - blue
                  - red
    
  • 스케쥴링 될때는 필수적으로 적용될 조건이지만 실행 중인 노드에는 무시
  • operato in은 or연산자라고 이해. key가 team이고 value가 blue,red인 조건을 필수

podAffinity

This post is licensed under CC BY 4.0 by the author.