跳至内容

如何在 Amazon EKS 中检查、扩展、耗尽或删除我的 Worker 节点?

2 分钟阅读
0

我使用 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 模板启动适用于 WindowsLinux 的 Worker 节点。然后,修改 CloudFormation 堆栈中的 NodeAutoScalingGroupDesiredCapacityNodeAutoScalingGroupMinSizeNodeAutoScalingGroupMaxSize 参数。

耗尽 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 组,请终止该实例

AWS 官方已更新 9 个月前