Multi node Pod 배치

문성하·2023년 12월 26일
0
post-thumbnail

쿠버네티스는 기본적으로 pod가 분할되어 배치된다.
2개의 워커 노드로 구성된 클러스터를 사용중에
인그레스를 이용해 서비스를 운영하려고한다.
인그레스 컨트롤러 파드는 각 노드에 한 개 이상의 파드가 동작하고 있어야 한다.
인그레스 컨트롤러의 replicas=2로 조정하면 각 노드로 파드가 분할되지만, 그렇지 않을 경우도 간혹 생겨 중요한 서비스를 운영중이라면 파드를 여러 노드로 분할해 배포하는 방식을 알아야 한다.
An

spec:
      affinity:
        #podAntiAffinity:
        #podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:          
            - labelSelector:
                matchExpressions:
                  - key: app.kubernetes.io/component
                    operator: In
                    values:
                      - controller
              #topologyKey: kubernetes.io/hostname
              #topologyKey: topology.kubernetes.io/zone
              #topologyKey: topology.kubernetes.io/region

podAffinity는 조건과 부합하는 영역에 배포
podAntiAffinity는 반대 의미이다

requiredDuringSchedulingIgnoredDuringExecution는 조건이 필수조건을 뜻한다.
아래 조건으로 선호 기준을 선택할 수 있다.(선호 하지 않으면 그 외 것들에 기회가 주어진다.)
preferredDuringSchedulingIgnoredDuringExecution

즉 조건을 requiredDuringSchedulingIgnoredDuringExecution 일 경우 충족하지 못하면 정상적으로 배포되지 않는다.
topologyKey: kubernetes.io/hostname
: 노드 기준
topologyKey: topology.kubernetes.io/zone
: 가용 영역 기준(AZ)
topologyKey: topology.kubernetes.io/region
: 리전 기준
으로 선택 가능하다.

spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:          
            - labelSelector:
                matchExpressions:
                  - key: app.kubernetes.io/component
                    operator: In
                    values:
                      - controller
              topologyKey: kubernetes.io/hostname

이런 식으로 구성한다면, 라벨 셀렉터에 해당하는 파드가 동작중인 노드 기준으로 그 외 노드에 파드를 배치한다.
두 개의 노드가 동작중일 경우, replicas=2를 넣어주면 파드가 각 노드에 겹치는 경우를 대비할 수 있다.


실제 내가 작성한 것이 맞는지 podAffinity를 활용해 검증해보았다.

spec:
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:          
            - labelSelector:
                matchExpressions:
                  - key: app.kubernetes.io/component
                    operator: In
                    values:
                      - controller
              topologyKey: kubernetes.io/hostname

worker node : 2개
replicas : 5

검증 성공

0개의 댓글