eksctl 또는 Amazon Elastic Kubernetes Service(Amazon EKS) 콘솔을 사용하여 워커 노드를 확인, 규모 조정, 드레이닝 또는 삭제했습니다.
해결 방법
워커 노드 확인
Amazon EKS 컨트롤 플레인에 등록한 워커 노드를 나열하려면 다음 명령을 실행합니다.
kubectl get nodes -o wide
출력에서 워커 노드의 이름, Kubernetes 버전, 운영 체제(OS) 및 IP 주소를 볼 수 있습니다.
특정 워커 노드에 대한 추가 정보를 가져오려면 다음 명령을 실행합니다.
kubectl describe node/node_name
참고: node_name을 워커 노드의 Amazon 리소스 이름(ARN)으로 바꾸십시오. 예를 들어 ip-AA-BB-CC-DD.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 파라미터를 수정합니다.
워커 노드 드레이닝
중요: 드레인 작업은 Kubernetes가 더 이상 노드에서 새 포드를 예약하지 않도록 워커 노드를 격리합니다. Kubernetes는 대상 노드에서 실행되는 포드를 드레이닝 노드에서 제거하고 중지합니다.
전체 노드 그룹 또는 단일 워커 노드를 드레이닝할 수 있습니다.
전체 노드 그룹 드레이닝
eksctl을 사용하여 워커 노드를 시작한 경우 다음 명령을 실행합니다.
eksctl drain nodegroup --cluster=clusterName --name=nodegroupName
참고: clusterName을 클러스터 이름으로 바꾸고, nodegroupName을 노드 그룹 이름으로 바꾸십시오.
드레이닝된 노드 그룹의 연결을 해제하려면 다음 명령을 실행합니다.
eksctl drain nodegroup --cluster=clusterName --name=nodegroupName --undo
참고: clusterName을 클러스터 이름으로 바꾸고, nodegroupName을 노드 그룹 이름으로 바꾸십시오.
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
참고: 1.18.8-eks-7c9bda를 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
참고: 1.18.8-eks-7c9bda를 Kubernetes 버전으로 바꾸십시오.
워커 노드 버전 번호를 가져오려면 다음 명령을 실행합니다.
kubectl get nodesNAME
참고: nodesNAME을 노드 이름으로 바꾸십시오.
출력 예시:
$ kubectl get nodesNAME STATUS ROLES AGE VERSION
ip-ABC-ACB-DE-ABC.ec2.internal Ready <none> 6d4h v1.18.8-eks-7c9bda
ip-ABC-ABC-DE-ABC.ec2.internal Ready <none> 6d4h v1.18.8-eks-7c9bda
버전 번호는 VERSION 열에 표시됩니다.
단일 워커 노드 드레이닝
eksctl을 사용하여 워커 노드를 시작하지 않았거나 특정 노드를 드레이닝하지 않은 경우 워커 노드를 정상적으로 격리합니다. 다음 명령을 실행합니다.
kubectl drain node_name --ignore-daemonsets
참고: node_name을 노드 이름으로 바꾸십시오.
격리를 취소하려면 다음 명령을 실행합니다.
kubectl uncordon node_name
참고: node_name을 노드 이름으로 바꾸십시오.
기존 애플리케이션을 새 워커 노드 그룹으로 마이그레이션할 수도 있습니다.
워커 노드 삭제
중요: 삭제 작업은 실행 취소할 수 없습니다.
eksctl을 사용하는 경우 다음 명령을 실행합니다.
eksctl delete nodegroup --cluster=clusterName --name=nodegroupName
참고: clusterName을 클러스터 이름으로 바꾸고, nodegroupName을 노드 그룹 이름으로 바꾸십시오.
관리형 노드 그룹이 있는 경우 클러스터에서 관리형 노드 그룹 삭제를 참조하십시오.
비관리형 노드 그룹이 있고 CloudFormation 템플릿을 사용하여 워커 노드를 시작한 경우 노드 그룹의 스택을 삭제합니다.
비관리형 노드 그룹이 있지만 CloudFormation 템플릿을 사용하지 않은 경우 Amazon Elastic Compute Cloud(Amazon EC2) Auto Scaling 그룹을 삭제합니다. Amazon EC2 Auto Scaling 그룹을 사용하지 않았다면 인스턴스를 종료하십시오.