Amazon EKS에서 작업자 노드를 확인, 조정, 삭제 또는 드레이닝하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2021년 7월 20일

eksctl 또는 AWS Management Console을 사용하여 Amazon Elastic Kubernetes Service(Amazon EKS) 작업자 노드를 시작했습니다. 작업자 노드를 확인, 조정, 드레이닝하거나 삭제하고 싶습니다.

간략한 설명

필요에 따라 해당 섹션의 단계를 완료합니다.

  • 작업자 노드 확인
  • 작업자 노드 조정
  • 작업자 노드 드레이닝
  • 작업자 노드 삭제

해결 방법

작업자 노드 확인

Amazon EKS 제어 플레인에 등록된 작업자 노드를 나열하려면 다음 명령을 실행합니다.

kubectl get nodes -o wide

출력은 작업자 노드의 이름, Kubernetes 버전, 운영 체제 및 IP 주소를 반환합니다.

단일 작업자 노드에 대한 추가 정보를 가져오려면 다음 명령을 실행합니다.

kubectl describe node/node_name

참고: node_name을 사용자의 값으로 바꿉니다. 예: ip-XX-XX-XX-XX.us-east-1.compute.internal

출력에는 레이블, 오염물, 시스템 정보, 상태 등 작업자 노드에 대한 출력 정보가 표시됩니다.

작업자 노드 조정

참고: Amazon EKS 콘솔에 노드 그룹이 표시되면 관리형 노드 그룹을 사용하세요. 그렇지 않으면 비관리형 노드 그룹을 사용합니다.

(옵션 1) eksctl을 사용하여 관리형 또는 비관리형 작업자 노드를 조정하려면 다음 명령을 실행합니다.

eksctl scale nodegroup --cluster=clusterName --nodes=desiredCount --name=nodegroupName

참고: clusterName, desiredCountnodegroupName을 사용자 값으로 바꿉니다.

-또는-

(옵션 2) eksctl 없이 관리형 작업자 노드를 조정하려면 관리형 노드 그룹 업데이트의 "노드 그룹 구성을 편집하려면" 섹션의 단계를 완료합니다.

-또는-

(옵션 3) AWS CloudFormation을 사용하여 비관리형 작업자 노드를 조정하려면 다음 단계를 완료하세요.

1.    CloudFormation 템플릿을 사용하여 Windows 또는 Linux용 작업자 노드를 시작합니다.

2.    CloudFormation 스택에서 NodeAutoScalingGroupDesiredCapacity, NodeAutoScalingGroupMinSize 또는 NodeAutoScalingGroupMaxSize 파라미터를 수정합니다.

작업자 노드 드레이닝

중요: 드레이닝 작업은 작업자 노드를 격리하고 노드에서 새 포드 예약을 중지하도록 Kubernetes에 지시합니다. 대상 노드에서 실행 중인 포드는 드레이닝 노드에서 제거되므로 포드가 중지됩니다. 이 작업이 프로덕션 환경에 미칠 수 있는 영향을 고려하세요.

전체 노드 그룹 또는 단일 작업자 노드를 드레이닝할 수 있습니다. 적절한 옵션을 선택합니다.

(옵션 1) 전체 노드 그룹을 드레이닝합니다.

eksctl을 사용하여 작업자 노드를 시작하는 경우 다음 명령을 실행합니다.

eksctl drain nodegroup --cluster=clusterName --name=nodegroupName

참고: clusterNamenodegroupName을 사용자 값으로 바꿉니다.

노드 그룹을 해제하려면 다음의 명령을 실행합니다.

eksctl drain nodegroup --cluster=clusterName --name=nodegroupName --undo

참고: clusterNamenodegroupName을 사용자 값으로 바꿉니다.

eksctl을 사용하여 작업자 노드를 시작하지 않을 경우 특정 Kubernetes 버전의 모든 노드를 식별하고 드레이닝합니다. 예를 들면 다음과 같습니다.

#!/bin/bash
K8S_VERSION=1.18.8-eks-7c9bda
nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}")
for node in ${nodes[@]}
do
    echo "Draining $node"
    kubectl drain $node --ignore-daemonsets --delete-local-data
done

다음의 코드를 사용하여 특정 Kubernetes 버전의 모든 노드를 식별하고 해제합니다.

#!/bin/bash
K8S_VERSION=1.18.8-eks-7c9bda
nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}")
for node in ${nodes[@]}
do
    echo "Uncordon $node"
    kubectl uncordon $node
done

참고: 작업자 노드의 버전을 가져오려면 다음 명령을 실행합니다.

$ kubectl get nodes
NAME                                      STATUS   ROLES    AGE     VERSION
ip-XXX-XXX-XX-XXX.ec2.internal            Ready    <none>   6d4h    v1.18.8-eks-7c9bda
ip-XXX-XXX-XX-XXX.ec2.internal            Ready    <none>   6d4h    v1.18.8-eks-7c9bda

참고: 버전 번호가 VERSION 열에 표시됩니다.

(옵션 2) 단일 작업자 노드를 드레이닝합니다.

eksctl을 사용하여 작업자 노드를 시작하지 않거나 특정 노드만 드레이닝하려면 작업자 노드를 적절히 격리합니다.

kubectl drain node_name --ignore-daemonsets

참고: node_name을 사용자의 값으로 바꿉니다.

격리를 취소하려면 다음의 명령을 실행합니다.

kubectl uncordon node_name

참고: node_name을 사용자의 값으로 바꿉니다.

기존 애플리케이션을 새 작업자 노드 그룹으로 마이그레이션하려면 새 작업자 노드 그룹으로 마이그레이션을 참조하세요.

작업자 노드 삭제

중요: 삭제 작업은 복구할 수 없습니다. 이 작업이 프로덕션 환경에 미칠 수 있는 영향을 고려하십시오.

eksctl을 사용하는 경우 다음 명령을 실행합니다.

eksctl delete nodegroup --cluster=clusterName --name=nodegroupName

관리형 노드 그룹이 있는 경우 관리형 노드 그룹 삭제의 단계를 완료합니다.

관리되지 않은 노드 그룹이 있고 CloudFormation 템플릿으로 작업자 노드를 시작했다면 CloudFormation 스택을 삭제합니다. Windows 또는 Linux에 대한 노드 그룹을 생성했다면 스택을 삭제해야 합니다.

비관리형 노드 그룹이 있고 CloudFormation 템플릿을 사용하여 작업자 노드를 시작하지 않은 경우 작업자 노드에 대한 Auto Scaling 그룹을 삭제합니다. 또는 Auto Scaling 그룹을 사용하지 않은 경우 인스턴스를 직접 종료합니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?