레시피: 특정 노드에 Pod가 스케줄링되지 않도록 방지

레시피: 특정 노드에 Pod가 스케줄링되지 않도록 방지

개요 (Overview)

GPU 같은 특수 프로세서가 있는 노드는 표준 머신의 노드보다 실행 비용이 더 비쌀 수 있어요. 특수 하드웨어가 필요 없는 워크로드로부터 이러한 노드를 보호하려면 Kubernetes taints를 사용할 수 있습니다. Taints는 일치하는 tolerations가 없는 Pod를 밀어내도록 노드를 표시해서 호환되는 워크로드만 스케줄링되도록 보장합니다. 자세한 내용은 Kubernetes 문서의 Taints and Tolerations를 참고하세요.

Kubernetes 노드 taints는 AWS Management Console 또는 Amazon EKS API를 사용해서 새 관리형 노드 그룹과 기존 관리형 노드 그룹에 적용할 수 있어요. 이 레시피는 AWS CLI를 사용해서 Amazon EKS 관리형 노드 그룹에 taints를 적용하는 방법을 보여줍니다. AWS Management Console로 taint가 있는 노드 그룹을 만드는 방법은 Create a managed node group for your cluster를 참고하세요.

사전 조건 (Prerequisites)

  • 기존 Amazon EKS 클러스터.
  • 적절한 권한으로 설치·구성된 AWS CLI.

단계 (Steps)

1단계: taints가 있는 노드 그룹 만들기

aws eks create-nodegroup 명령을 사용해서 taints가 있는 새 관리형 노드 그룹을 만듭니다. 이 예제는 키가 dedicated, 값이 gpuGroup, 효과가 NO_SCHEDULE인 taint를 적용합니다.

aws eks create-nodegroup \
 --cli-input-json '
{
  "clusterName": "my-cluster",
  "nodegroupName": "node-taints-example",
  "subnets": [
     "subnet-1234567890abcdef0",
     "subnet-abcdef01234567890",
     "subnet-021345abcdef67890"
   ],
  "nodeRole": "arn:aws:iam::111122223333:role/AmazonEKSNodeRole",
  "taints": [
     {
         "key": "dedicated",
         "value": "gpuGroup",
         "effect": "NO_SCHEDULE"
     }
   ]
}'

자세한 내용과 예시는 Kubernetes 참조 문서의 taint를 참고하세요.

2단계: 기존 노드 그룹의 taints 업데이트

aws eks update-nodegroup-config AWS CLI 명령을 사용해서 관리형 노드 그룹의 taints를 추가, 제거, 또는 교체합니다.

aws eks update-nodegroup-config \
  --cluster-name my-cluster \
  --nodegroup-name node-taints-example \
  --taints 'removeTaints=[{key=dedicated,value=gpuGroup,effect=NO_SCHEDULE}]'

참고 사항 (Notes)

  • 노드 그룹을 만든 후 UpdateNodegroupConfig API를 사용해서 taints를 업데이트할 수 있습니다.
  • taint 키는 문자나 숫자로 시작해야 해요. 문자, 숫자, 하이픈(-), 마침표(.), 밑줄(_)을 포함할 수 있으며 최대 63자입니다.
  • 선택적으로 taint 키는 DNS 서브도메인 접두사와 단일 /로 시작할 수 있습니다. DNS 서브도메인 접두사로 시작하면 253자까지 가능해요.
  • 값은 선택 사항이며 문자나 숫자로 시작해야 합니다. 문자, 숫자, 하이픈(-), 마침표(.), 밑줄(_)을 포함할 수 있으며 최대 63자예요.
  • Kubernetes를 직접 사용하거나 AWS Management Console을 사용할 때 taint 효과는 NoSchedule, PreferNoSchedule, 또는 NoExecute여야 합니다. 다만 AWS CLI나 API를 사용할 때는 taint 효과가 NO_SCHEDULE, PREFER_NO_SCHEDULE, 또는 NO_EXECUTE여야 해요.
  • 노드 그룹당 최대 50개의 taints가 허용됩니다.
  • 관리형 노드 그룹을 사용해 만들어진 taints가 노드에서 수동으로 제거되면, Amazon EKS는 taints를 노드에 다시 추가하지 않습니다. 이는 관리형 노드 그룹 구성에 taints가 지정되어 있어도 마찬가지예요.

더 알아보기 (Learn more)

출처: 문서