eksctl 또는 AWS Management Console을 사용하여 Amazon Elastic Kubernetes Service(Amazon EKS) 워커 노드를 시작했습니다. 이제 워커 노드를 확인, 규모 조정, 비우기 또는 삭제하고 싶습니다.
해결 방법
워커 노드 확인
Amazon EKS 컨트롤 플레인에 등록된 워커 노드를 나열하려면 다음 명령을 실행하세요.
kubectl get nodes -o wide
출력은 워커 노드의 이름, 쿠버네티스 버전, 운영 체제(OS) 및 IP 주소를 반환합니다.
단일 워커 노드에 대한 추가 정보를 얻으려면 다음 명령을 실행합니다.
kubectl describe node/node_name
참고: 예를 들어 node_name을 사용자 값인 ip-XX-XX-XX.us-east-1.compute.internal으로 바꿉니다.
출력에는 레이블, 테인트, 시스템 정보, 상태 등 워커 노드에 대한 자세한 정보가 표시됩니다.
워커 노드 규모 조정
참고: 노드 그룹이 Amazon EKS 콘솔에 나타나면 관리형 노드 그룹을 사용하세요. 그렇지 않으면 관리되지 않는 노드 그룹을 사용합니다.
다음 방법 중 하나를 사용하여 워커 노드의 규모를 조정하세요.
eksctl로 워커 노트 규모 조정
eksctl를 사용하여 관리형 또는 비관리형 워커 노드의 규모를 조정하려면 다음 명령을 실행하세요.
eksctl scale nodegroup --cluster=clusterName --nodes=desiredCount --name=nodegroupName
참고: clusterName, desiredCount 및 nodegroupName을 사용자 값으로 바꿉니다.
eksctl 없이 워커 노드 규모 조정
eksctl없이 관리되는 워커 노드의 규모를 조정하려면 노드 그룹 구성을 편집합니다.
CloudFormation으로 워커 노드 규모 조정
AWS CloudFormation을 사용하여 관리되지 않는 워커 노드의 규모를 조정하려면 다음 단계를 완료하세요.
- CloudFormation 템플릿을 사용하여 Windows 또는 Linux용 워커 노드를 시작합니다.
- CloudFormation 스택에서 NodeAutoScalingGroupDesiredCapacity, NodeAutoScalingGroupMinSize 또는 NodeAutoScalingGroupMaxSize 파라미터를 수정합니다.
워커 노드 비우기
중요: 비우기 작업은 워커 노드를 격리하고 쿠버네티스는 더 이상 노드에서 새 포드를 스케줄링하지 않습니다. 대상 노드에서 실행되는 포드는 비우기 노드에서 제거되고 중지됩니다.
전체 노드 그룹 또는 단일 워커 노드를 비울 수 있습니다.
전체 노드 그룹 비우기
eksctl를 사용하여 워커 노드를 시작하는 경우 다음 명령을 실행합니다.
eksctl drain nodegroup --cluster=clusterName --name=nodegroupName
참고: clusterName 및 nodegroupName을 사용자 값으로 바꿉니다.
노드 그룹을 비우려면 다음 명령을 실행합니다.
eksctl drain nodegroup --cluster=clusterName --name=nodegroupName --undo
참고: clusterName 및 nodegroupName을 사용자 값으로 바꿉니다.
eksctl를 사용하여 워커 노드를 시작하지 않는 경우, 특정 쿠버네티스 버전의 모든 노드를 식별하고 드래그하세요. 예를 들면, 다음과 같습니다.
#!/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
참고: 워커 노드의 버전을 확인하려면 다음 명령을 실행합니다. 버전 번호는 VERSION 열에 표시됩니다.
$ kubectl get nodesNAME 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
단일 워커 노드 비우기
eksctl를 사용하여 워커 노드를 시작하지 않거나 특정 노드만 비우려는 경우 워커 노드를 정상적으로 격리합니다.
kubectl drain node_name --ignore-daemonsets
참고: node_name을 사용자 값으로 바꿉니다.
격리를 취소하려면 다음 명령을 실행합니다.
kubectl uncordon node_name
참고: node_name을 사용자 값으로 바꿉니다.
기존 애플리케이션을 새 워커 노드 그룹으로 마이그레이션하려면 새 노드 그룹으로 마이그레이션하기를 참조하세요.
워커 노드 삭제
중요: 삭제 작업은 복구할 수 없습니다.
eksctl를 사용하는 경우 다음 명령을 실행합니다.
eksctl delete nodegroup --cluster=clusterName --name=nodegroupName
관리되는 노드 그룹이 있는 경우 관리되는 노드 그룹 삭제의 단계를 완료합니다.
관리되지 않는 노드 그룹이 있고 CloudFormation 템플릿을 사용하여 워커 노드를 시작한 경우 스택을 삭제합니다. Windows 또는 Linux용 노드 그룹에 대해 생성한 스택을 삭제해야 합니다.
관리되지 않는 노드 그룹이 있고 CloudFormation 템플릿을 사용하여 워커 노드를 시작하지 않은 경우 Auto Scaling 그룹을 삭제합니다. Auto Scaling 그룹을 사용하지 않았다면 인스턴스를 직접 종료하세요.