我使用 eksctl 或 Amazon Elastic Kubernetes Service (Amazon EKS) 控制台来检查、扩展、耗尽或删除我的 Worker 节点。
解决方法
检查 Worker 节点
要列出已注册到 Amazon EKS 控制面板的 Worker 节点,请运行以下命令:
kubectl get nodes -o wide
在输出中,您可以查看 Worker 节点的名称、Kubernetes 版本、操作系统 (OS) 和 IP 地址。
要获取有关特定 Worker 节点的更多信息,请运行以下命令:
kubectl describe node/node_name
**注意:**请将 node_name 替换为您的 Worker 节点的 Amazon 资源名称 (ARN)。例如,ip-AA-BB-CC-DD.us-east-1.compute.internal。
输出将显示 Worker 节点的相关信息,例如标签、污点、系统信息和状态。
扩展 Worker 节点
**注意:**如果您的节点组显示在 Amazon EKS 控制台中,请使用托管节点组来扩展您的 Worker 节点。否则,请使用非托管节点组。
使用以下方法之一来扩展您的 Worker 节点。
使用 eksctl 扩展 Worker 节点
要使用 eksctl 扩展您的托管或非托管 Worker 节点,请运行以下命令:
eksctl scale nodegroup --cluster=clusterName --nodes=desiredCount --name=nodegroupName
**注意:**请将 clusterName 替换为您的集群名称,将 desiredCount 替换为要扩展到的节点数量,将 nodegroupName 替换为节点组名称。
不使用 eksctl 扩展 Worker 节点
要在不使用 eksctl 的情况下扩展托管 Worker 节点,请编辑节点组配置。
使用 CloudFormation 扩展 Worker 节点
要使用 AWS CloudFormation 扩展非托管 Worker 节点,请使用 CloudFormation 模板启动适用于 Windows 或 Linux 的 Worker 节点。然后,修改 CloudFormation 堆栈中的 NodeAutoScalingGroupDesiredCapacity、NodeAutoScalingGroupMinSize 或 NodeAutoScalingGroupMaxSize 参数。
耗尽 Worker 节点
**重要事项:**耗尽操作会隔离 Worker 节点,以便 Kubernetes 不再在该节点上调度新的容器组 (Pod)。Kubernetes 会从耗尽节点中移除并停止在目标节点上运行的容器组 (Pod)。
您可以耗尽整个节点组或单个 Worker 节点。
耗尽整个节点组
如果您使用 eksctl 启动了 Worker 节点,请运行以下命令:
eksctl drain nodegroup --cluster=clusterName --name=nodegroupName
**注意:**请将 clusterName 替换为您的集群名称,将 nodegroupName 替换为您的节点组名称。
要取消对已耗尽节点组的封锁,请运行以下命令:
eksctl drain nodegroup --cluster=clusterName --name=nodegroupName --undo
**注意:**请将 clusterName 替换为您的集群名称,将 nodegroupName 替换为您的节点组名称。
如果您未使用 eksctl 启动 Worker 节点,请运行以下脚本以耗尽特定 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 版本。
要获取您的 Worker 节点版本号,请运行以下命令:
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(版本)列中。
耗尽单个 Worker 节点
如果您未使用 eksctl 启动 Worker 节点或耗尽特定节点,请稳妥地隔离 Worker 节点。运行以下命令:
kubectl drain node_name --ignore-daemonsets
**注意:**请将 node_name 替换为您的节点名称。
要撤消隔离,请运行以下命令:
kubectl uncordon node_name
**注意:**请将 node_name 替换为您的节点名称。
您还可以将现有应用程序迁移到新的 Worker 节点组。
删除 Worker 节点
**重要事项:**无法撤消删除操作。
如果您使用 eksctl,请运行以下命令:
eksctl delete nodegroup --cluster=clusterName --name=nodegroupName
**注意:**请将 clusterName 替换为您的集群名称,将 nodegroupName 替换为您的节点组名称。
如果您有一个托管节点组,请参阅从集群中删除托管节点组。
如果您有一个非托管节点组,并且使用了 CloudFormation 模板启动 Worker 节点,请删除节点组的堆栈。
如果您有一个非托管节点组,但没有使用 CloudFormation 模板,请删除 Amazon Elastic Compute Cloud (Amazon EC2) Auto Scaling 组。如果您未使用 Amazon EC2 Auto Scaling 组,请终止该实例。