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

2 分钟阅读
0

我使用 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

**注意:**用您的值替换 clusterNamedesiredCountnodegroupName

不使用 eksctl 扩展 Worker 节点

要在不使用 eksctl 的情况下扩展托管 Worker 节点,请编辑节点组配置

使用 CloudFormation 扩展 Worker 节点

要使用 AWS CloudFormation 扩展您的非托管 Worker 节点,请完成以下步骤:

  1. 使用 CloudFormation 模板启动 WindowsLinux Worker 节点。
  2. 修改 CloudFormation 堆栈中的 NodeAutoScalingGroupDesiredCapacityNodeAutoScalingGroupMinSizeNodeAutoScalingGroupMaxSize 参数。

耗尽 Worker 节点

**重要事项:**耗尽操作隔离了 Worker 节点,Kubernetes 不再在该节点上调度任何新的容器组(pod)。在目标节点上运行的容器组(pod)将从耗尽节点中移除并停止。

您可以耗尽整个节点组或单个 Worker 节点。

耗尽整个节点组

如果您使用 eksctl 启动 Worker 节点,请运行以下命令:

eksctl drain nodegroup --cluster=clusterName --name=nodegroupName

**注意:**用您的值替换 clusterNamenodegroupName

要耗尽节点组,请运行以下命令:

eksctl drain nodegroup --cluster=clusterName --name=nodegroupName --undo

**注意:**用您的值替换 clusterNamenodegroupName

如果您没有使用 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 节点,则删除自动扩缩组。如果您没有使用自动扩缩组,请直接终止该实例

AWS 官方
AWS 官方已更新 8 个月前