다중 풀 Kubernetes 클러스터에서 Pod 관리

완료됨

Contoso 개발자는 내부적으로 개발된 Windows 및 Linux 애플리케이션을 Helm 차트를 사용하여 배포 가능한 Docker 기반 이미지로 변환하기 위해 작업 중입니다. 여러분은 Azure Stack HCI의 Kubernetes 클러스터 구현 계획에서 두 운영 체제 플랫폼 모두에 대한 지원을 보장해야 합니다.

Azure Stack HCI의 Kubernetes 클러스터 내 노드 풀이란?

Azure Stack HCI의 AKS는 동일한 Kubernetes 클러스터에서 여러 노드 풀을 지원합니다. 각 풀은 해당 풀을 프로비전할 때 지정하는 설정에 따라 동일하게 구성된 VM으로 구성됩니다.

노드를 별도의 풀로 그룹화하여 적절한 VM 집합을 대상으로 Pod 배포를 지정할 수 있습니다. 예를 들어 Windows 운영 체제로만 지원되는 컨테이너화된 워크로드가 있거나 그래픽 프로세서 유닛 같은 특수한 하드웨어가 필요할 수 있습니다.

Azure Stack HCI의 Kubernetes 클러스터 내 노드 풀로 Pod 배포 제어

기본적으로 Kubernetes는 리소스 사용률을 최적화하는 방식으로 사용 가능한 모든 작업자 노드의 컨테이너화된 워크로드 프로비저닝을 예약합니다. 이 동작을 적용하기 위해 지정한 사용자 지정 조건에 따라 노드 선택에 대한 제약 조건을 적용할 수 있습니다. 이러한 제약 조건에는 노드 선택기와 테인트 및 톨러레이션이 포함됩니다.

노드 선택기

노드 선택기는 해당하는 Pod의 예약이 가능한 대상 노드를 식별하는 Pod 또는 배포의 YAML 기반 정의 내에 있는 설정입니다. 대상 노드를 해당하는 운영 체제에 따라 지정하고자 하는 경우 Kubernetes가 노드에 자동으로 할당하는 기본 제공 레이블을 사용하면 됩니다. 노드 선택기는 사용하려는 운영 체제에 따라 kubernetes.io/os = Windows 또는 kubernetes.io/os = Linux 형식이 됩니다. 예를 들어 다음 YAML 기반 Pod 매니페스트는 Linux 노드를 배포 대상으로 지정합니다.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    kubernetes.io/os = Linux

테인트 및 톨러레이션

테인트 및 톨러레이션은 또 다른 Pod 배치 방법을 제공합니다. 이 방법에서 테인트는 노드 구성에 포함되며 톨러레이션은 Pod 사양에 포함됩니다. 노드를 테인팅하면 노드가 해당하는 테인트별 톨러레이션 없이 Pod를 호스트하는 경우를 효과적으로 방지할 수 있습니다.

예를 들어 Azure Stack HCI의 AKS에서 Pod가 Windows 노드에서 예약되도록 허용하려면 그 정의에 다음 톨러레이션을 추가해야 합니다.

tolerations:
- key: node.kubernetes.io/os
  operator: Equal
  value: Windows
  effect: NoSchedule

또한 해당하는 톨러레이션으로 Pod 배포에 단독으로 사용하려고 하는 각 Windows 노드에 node.kubernetes.io/os=Windows:NoSchedule 테인트를 추가해야 합니다. 이를 위해 kubectl 명령줄 유틸리티를 사용한 후 대상 클러스터에 연결하고 범위 안의 각 노드에 대해 다음 명령을 실행할 수 있습니다(여기서 <node_name> 자리 표시자는 대상 노드의 이름을 지정함).

kubectl taint node <node_name> node.kubernetes.io/os=Windows:NoSchedule

참고

노드 선택기는 특정 노드 집합에 Pod 배치를 적용합니다. 톨러레이션을 사용하면 지정되어 있는 테인트된 노드 집합에서 Pod를 실행할 수 있지만, 테인트 없는 노드에 배치되는 경우를 방지하지는 않습니다.

지식 점검

1.

Contoso는 Windows와 Linux의 컨테이너화된 워크로드를 Azure Stack HCI의 AKS에 배포할 계획입니다. Windows 기반 Pod가 Windows를 실행하는 Kubernetes 클러스터 노드에 배포되도록 하는 절차를 문서화해야 합니다. 여러분은 이 용도로 테인트와 톨러레이션을 사용하기로 했습니다. 어느 클러스터 구성 요소에 테인트를 적용해야 할까요?