我使用 eksctl 或 AWS 管理控制台启动了我的 Amazon Elastic Kubernetes Service(Amazon EKS)Worker 节点。现在我想检查、扩展、耗尽或删除我的 Worker 节点。
解决方法
检查 Worker 节点
要列出注册到 Amazon EKS 控制面板的 Worker 节点,请运行以下命令:
kubectl get nodes -o wide
输出返回 Worker 节点的名称、Kubernetes 版本、操作系统(OS)和 IP 地址。
要获取有关单个 Worker 节点的更多信息,请运行以下命令:
kubectl describe node/node_name
**注意:**将 node_name 替换为您的值,例如:ip-XX-XX-XX-XX.us-east-1.compute.internal。
输出显示有关 Worker 节点的更多信息,包括标签、污点、系统信息和状态。
扩展 Worker 节点
**注意:**如果您的节点组出现在 Amazon EKS 控制台中,则使用托管节点组。否则,使用非托管节点组。
使用以下方法之一来扩展您的 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)。在目标节点上运行的容器组(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
要识别和耗尽特定 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
**注意:**要获取 Worker 节点的版本,请运行以下命令。版本号显示在 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
耗尽单个 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
如果您有托管节点组,请完成删除托管节点组中的步骤。
如果您有一个非托管节点组,并且使用了 CloudFormation 模板启动 Worker 节点,则删除相关堆栈。您必须删除为 Windows 或 Linux 节点组创建的堆栈。
如果您有非托管节点组且未使用 CloudFormation 模板启动 Worker 节点,则删除自动扩缩组。如果您没有使用自动扩缩组,请直接终止该实例。