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

최종 업데이트 날짜: 2020년 1월 27일

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.    AWS CloudFormation 템플릿을 사용하여 Windows 또는 Linux용 작업자 노드를 시작합니다.

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

작업자 노드 드레이닝

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

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

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

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

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

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

노드 그룹의 드레이닝 작업을 실행 취소하려면 다음 명령을 실행합니다.

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

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

eksctl을 사용하여 작업자 노드를 시작하지 않는 경우 다음 코드를 사용하여 특정 Kubernetes 버전의 모든 노드를 식별하고 드레이닝합니다(이 경우 1.14.7-eks-1861c5).

#!/bin/bash
K8S_VERSION=1.14.7-eks-1861c5
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 버전(이 경우 1.14.7-eks-1861c5)의 모든 노드를 식별하고 드레이닝합니다.

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

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

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

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

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

eksctl을 사용하여 작업자 노드를 시작하지 않거나 특정 노드만 드레이닝하려면 다음 명령을 실행하여 작업자 노드를 정상적으로 격리합니다.

kubectl drain node_name --ignore-daemonsets

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

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

kubectl uncordon name

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

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

작업자 노드 삭제

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

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

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

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

비관리형 노드 그룹이 있고 AWS CloudFormation 템플릿을 사용하여 작업자 노드를 시작한 경우 Windows 또는 Linux용 노드 그룹에 대해 생성한 AWS CloudFormation 스택을 삭제합니다.

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


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?