taint와 톨러레이션(toleration)을 사용해 일정 조정하기

이 페이지에서는 VMware용 GKE의 taint 및 톨러레이션(toleration)에 대해 간략히 설명합니다. 클러스터에 배포할 워크로드를 예약할 때 노드 taint를 사용하면 실행 가능한 노드를 제어할 수 있습니다.

개요

클러스터에서 실행할 워크로드를 제출하면 스케줄러가 워크로드와 연결된 포드를 배치할 위치를 결정합니다. 스케줄러는 포드의 CPU, 메모리, 커스텀 리소스 요구사항을 충족하는 모든 노드에 포드를 자유롭게 배치할 수 있습니다.

클러스터가 여러 작업 부하를 실행할 경우에는 특정 노드 풀에서 실행할 수 있는 작업 부하를 제어할 필요가 있을 수 있습니다.

노드 taint를 사용하면 스케줄러가 특정 포드에 대한 노드 사용을 방지하도록 노드에 표시를 할 수 있습니다. 보완적 기능인 내결함성을 사용하면 'taint로 표시된' 노드에서 사용할 수 있는 Pod를 지정할 수 있습니다.

taint 및 톨러레이션(toleration)은 함께 작동하여 포드가 부적절한 노드에 예약되지 않도록 합니다.

taint는 특정 효과와 연결된 키-값 쌍입니다. 사용 가능한 효과는 다음 표에 나와 있습니다.

효과 설명
NoSchedule 이 taint를 허용하지 않는 포드는 노드에서 예약되지 않습니다. 기존 포드가 노드에서 제거되지 않습니다.
PreferNoSchedule Kubernetes는 노드에 이 taint를 허용하지 않는 포드를 예약하지 않습니다.
NoExecute 포드가 이미 노드에서 실행 중이면 포드가 노드에서 제거되고 아직 노드에서 실행되지 않은 경우 노드에 예약되지 않습니다.

VMware용 GKE에서 노드 taint를 설정할 경우의 이점

kubectl taint 명령어를 사용하여 노드 taint를 설정할 수 있지만, gkectl 또는 Google Cloud 콘솔을 사용해 노드 taint를 설정하면 kubectl에 비해 다음과 같은 이점이 있습니다.

  • 노드를 다시 시작하거나 교체할 때 taint가 보존됩니다.
  • 노드를 노드 풀에 추가할 때 taint가 자동으로 생성됩니다.
  • gkectl을 사용하여 taint를 추가하면 클러스터 자동 확장 중에 taint가 자동으로 생성됩니다. (현재 Google Cloud 콘솔에서 만든 노드 풀 자동 확장을 사용할 수 없습니다.)

노드 taint 설정

사용자 클러스터를 만들 때 또는 클러스터가 생성된 후 노드 풀에서 노드 taint를 설정할 수 있습니다. 이 섹션에서는 이미 생성된 클러스터에 taint를 추가하는 방법을 설명하지만 새 클러스터를 만들 때에도 프로세스는 유사합니다.

새 노드 풀을 추가하고 taint를 설정하거나 기존 노드 풀을 업데이트하고 taint를 설정하면 됩니다. 다른 노드 풀을 추가하기 전에 클러스터에 사용 가능한 IP 주소가 충분한지 확인하세요.

Google Cloud 콘솔에서 클러스터를 만든 경우 Google Cloud 콘솔을 사용하여 노드 풀을 추가하거나 업데이트할 수 있습니다.

새 노드 풀에 taint 설정

Console

  1. 콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.

    GKE 클러스터로 이동

  2. 사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.

  3. 클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 패널에서 세부정보 보기를 클릭합니다.

  4. 노드 풀 추가를 클릭합니다.

  5. 노드 풀을 구성합니다.

    1. 노드 풀 이름을 입력합니다.
    2. 풀에 있는 각 노드의 vCPU 수를 입력합니다. 사용자 클러스터 작업자당 최소 4개입니다.
    3. 풀의 각 노드에 대한 메모리 크기를 메비바이트(MiB) 단위로 입력합니다(사용자 클러스터 워커 노드당 최소 8,192MiB이며 4의 배수여야 함).
    4. 복제본 필드에 풀의 노드 수를 입력합니다(최솟값 3).
    5. OS 이미지 유형(Ubuntu Containerd, COS)을 선택합니다.

    6. 부팅 디스크 크기를 기비바이트(GiB)로 입력합니다(기본값은 40GiB).

  6. 노드 풀 메타데이터(선택사항) 섹션에서 + taint 추가를 클릭합니다. taint의 , , 효과를 입력합니다. 필요한 경우 반복합니다.

  7. 필요한 경우 + Kubernetes 라벨 추가를 클릭합니다. 라벨의 을 입력합니다. 필요한 경우 반복합니다.

  8. 만들기를 클릭합니다.

  9. Google Cloud console에 클러스터 상태: 진행 중인 변경사항이 표시됩니다. 세부정보 표시를 클릭하여 리소스 상태 조건상태 메시지를 확인합니다.

명령줄

  1. 사용자 클러스터 구성 파일에서 nodePools 섹션을 채웁니다.

    다음 필드를 지정해야 합니다.

    • nodePools.[i].name
    • nodePools[i].cpus
    • nodePools.[i].memoryMB
    • nodePools.[i].replicas

    다음 필드는 선택사항입니다. nodePools[i].bootDiskSizeGB 또는 nodePools[i].osImageType을 포함하지 않으면 기본값이 사용됩니다.

  2. nodePools[i].taints 섹션을 작성합니다. 예를 들면 다음과 같습니다.

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. 원하는 경우 다음 섹션을 작성합니다.

    • nodePools[i].labels
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  4. 다음 명령어를 실행합니다.

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    다음을 바꿉니다.

    • [ADMIN_CLUSTER_KUBECONFIG]를 관리자 클러스터의 kubeconfig 파일 경로로 바꿉니다.

    • [USER_CLUSTER_CONFIG]는 사용자 클러스터 구성 파일의 경로입니다.

기존 노드 풀에 taint 설정

Console

  1. 콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.

    GKE 클러스터로 이동

  2. 사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.

  3. 클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 패널에서 세부정보 보기를 클릭합니다.

  4. 노드 탭을 클릭합니다.

  5. 수정할 노드 풀의 이름을 클릭합니다.

  6. 노드 풀 메타데이터(선택사항) 섹션 옆에 있는 수정을 클릭하고 + taint 추가를 클릭합니다. taint의 , , 효과를 입력합니다. 필요한 경우 반복합니다.

  7. 완료를 클릭합니다.

  8. 을 클릭하여 이전 페이지로 돌아갑니다.

  9. Google Cloud console에 클러스터 상태: 진행 중인 변경사항이 표시됩니다. 세부정보 표시를 클릭하여 리소스 상태 조건상태 메시지를 확인합니다.

명령줄

  1. 사용자 클러스터 구성 파일에서 업데이트할 노드 풀의 nodePools 섹션으로 이동합니다.

  2. nodePools[i].taints를 작성합니다. 예를 들면 다음과 같습니다.

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. 다음 명령어를 실행합니다.

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    다음을 바꿉니다.

    • [ADMIN_CLUSTER_KUBECONFIG]를 관리자 클러스터의 kubeconfig 파일 경로로 바꿉니다.

    • [USER_CLUSTER_CONFIG]는 사용자 클러스터 구성 파일의 경로입니다.

taint를 허용하도록 포드 구성

Pod 사양에 tolerations 필드를 포함하여 taint를 허용하도록 Pod를 구성할 수 있습니다. 다음 예시에서는 dedicated=experimental:NoSchedule taint가 있는 노드에 포드를 예약할 수 있습니다.

tolerations:
- key: dedicated
  operator: Equal
  value: experimental
  effect: NoSchedule

추가 예시는 taint 및 톨러레이션(toleration)을 참조하세요.