• [Kubernetes Workloads] 파드 배치 컨트롤 (Pod Placement Controll)
    아키텍처 공부/Cloud 2022. 10. 12. 22:07
    반응형

    파드를 노드에 스케줄(배치)하는 법

     쿠버네티스에서 노드에 파드 스케줄하는 방법은 노드셀렉터(nodeSelector)어피니티(affinity) 규칙테인트(taint), nodeName으로 제어할 수 있다. 다음으로 파드의 각 컨테이너에 필요한 CPU 및 RAM의 크기를 지정할 수 있는데,  지정된 리소스 요청(request)(CPU,RAM) 있는 경우 스케줄러(scheduler)가 파드가 배치될 노드를 결정하기에  좋은 판단을 내릴 있다. 스케줄러 파드 내의 컨테이너에서 설정한 리소스 요청(request) 제한(limit) 기반으로 파드를 노드에 할당한다. 스케줄러는 파드의 요청된 제한이 노드 용량 내에 있는지 확인한다. 또한 노드 간에 파드를 자동으로 분산한다.

     

    노드 셀렉터

     노드셀렉터 레이블(label) 기반으로 파드 스케줄  있는 노드를 제한(limit)할  있다.

     

    어피니티(affinity)

       어피니티의 레이블로 nodeAffinity, podAffinity, podAntiAnffinity가 있다.

       nodeAffinity

        노드셀렉터 마찬가지로 노드 어피니티를 사용하면 레이블(label) 기반으로 파드 스케줄 있는 노드를 제한할 있다. 하지만 어피니티는 요구 사항이 충족되지 않으면 파드가 스케줄되지 않는 노드셀렉터와 달리, 요구 사항이 충족되지 않아도 파드가 스케줄되게 할 수 있다. 

    requiredDuringSchedulingIgnoredDuringExecution
    preferredDuringSchedulingIgnoredDuringExecution

        위 필드는 'IgnoredDuringExecution' 문자열을 포함하여 레이블이 변경되더라도 이미 실행 중인 파드는 영향을 받지 않는다는 점을 부분적으로 알려주고 있다. 'requiredDuringScheduling' 은 노드셀렉터와 유사하게 파드를 스케줄하려면 반드시 충족해야 하는 엄격한 요구사항이고, 'preferredDuringScheduling'은 조건을 만족하는 노드를 찾으려고 노력하지만, 만족하는 노드가 없더라도 파드를 스케줄할 수 있다.

       podAffinity, podAntiAnffinity

        해당 레이블은 노드 자체의 레이블 대신 노드에서 이미 실행 중인 파드 레이블을 기반으로 하는 규칙이다. 다른 파드와 동일한 노드에서 실행을 원하는 파드는 podAffinity 규칙으로 구성할 수 있다. podAntiAffinity 규칙을 사용하여 다른 파드와 동일한 노드에서 예약하지 않아야 하는 파드를 구성할 수 있다.

     

       topologyKey 레이블 활용

         GCP에서는 노드가 시작되면 kubelet 영역 정보(zone information) 포함된 레이블(topologyKey)을 노드에 자동으로 추가한다. 쿠버네티스는 장애 영향을 줄이기 위해 레플리케이션 컨트롤러(replication controller)의 파드 또는 단일 영역 클러스터(single-zone cluster)의 노드 간에 서비스를 자동으로 분산한다. 다중 영역 클러스터를 사용하면  동작이 영역 전체로 확장되어 영역 오류의 영향을 줄인다.

     

    테인트(taint)와 톨러레이션(tolerations)

     노드 셀렉터와 어피니티는 파드에 구성하는 속성이지만, 테인트는 노드에 구성하는 속성이다. 테인트와 함께 작용하는 톨러레이션 또한 파드에 구성하는 속성이다.  테인트와 톨러레이션은 함께 작동하여 파드가 부적절한 노드에 스케줄되지 않게 한다.

     

    참고:

    https://kubernetes.io/ko/docs/concepts/scheduling-eviction/assign-pod-node/

    https://kubernetes.io/ko/docs/tasks/configure-pod-container/assign-pods-nodes/

    https://kubernetes.io/ko/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/

    https://kubernetes.io/ko/docs/concepts/scheduling-eviction/taint-and-toleration/

    반응형

    댓글

Designed by Tistory.