쿠버네티스 노드 어피니티(Node Affinity) 개념과 설정

ZER0·2022년 10월 12일
0

Kubernetes

목록 보기
11/39
post-thumbnail

1. 개념

  • 파드를 kube-Scheduler에 의존하지 않고 엔지니어 의도에 따라 특정 노드에 배포할 수 있도록 핸들링하는 설정
  • 배포조건/오퍼레이터/weight를 활용해 배포 스케줄링을 세부적으로 핸들링 할 수 있는 점이 nodeSelctor와의 차이점

2. 노드 어피니티 조건

  • 배포조건
    • requiredDuringScheduling : 반드시 노드 어피니티 조건에 부합하는 노드에 배포하겠다는 의미
    • preferredDuringScheduling : 왠만하면 노드 어피니티 조건에 부합하는 노드에 파드를 배포하겠지만, 상황에 따라 조건에 맞지 않는 노드에 배포할 수도 있다는 의미
    • IgnoredDuringExecution : 파드가 배포되어 특정 노드에서 실행 중인 상황에서 해당 노드의 설정이 변경되어 어피니티 조건에 부합하지 않더라도 기존에 실행 중인 파드는 삭제하지 않고 유지하겠다는 의미
    • RequiredDuringExecution : 파드가 배포되어 특정 노드에서 실행 중인 상황에서 해당 노드의 설정이 변경되어 어피니티 조건에 부합하지 않을 경우 기존에 실행 중이던 파드를 축출해 다른 노드에 배포하겠다는 의미(현재는 지원하지 않는 조건으로 추후 지원 예정)
  • 오퍼레이터
    • In / NotIn : 키 값을 체크
    • Exists / DoesNotExists : 키의 존재 여부 체크
    • Gt / Lt : 키 값의 크고 작음을 체크
  • weight
    • preferredDuringScheduling 조건인 경우에만 사용하는 옵션
    • 노드 어피니티 조건마다 weight(1 ~ 100 까지)를 부여해, weight의 총 합이 가장 높은 노드에 배포

3. 노드 어피니티 적용

  • 노드 레이블 상황

3.1. requiredDuringScheduling 적용

  • price > 100인 노드에 배포
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: price
                operator: Gt
                values:
                - "100"  
    cs
  • w1-k8s 노드에 배포된것을 확인

3.2. preferredDuringScheduling 적용

  • price=100 이고 disktype=ssd인 노드에 배포
    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
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 10
            preference:
              matchExpressions:
              - key: disktype
                operator: In
                values:
                - ssd   
          - weight: 30
            preference:
              matchExpressions:
              - key: price
                operator: In
                values:
                - "100"
    cs
  • w2-k8s 노드에 배포된것을 확인(w3-k8s 노드는 weight 총 합이 30이고 w2-k8s는 40이기 때문에 w2-k8s 노드에 배포)

4. 참고

  1. https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/
  2. https://kimjingo.tistory.com/144
  3. https://velog.io/@niyu/k8s-node-affinity-pod-affinity
profile
Security Compliance Engineer

0개의 댓글