如何检查、扩展、删除或耗尽 Amazon EKS 中的工作线程节点?

上次更新时间:2020 年 1 月 27 日

使用 eksctl 或 AWS 管理控制台启动 Amazon Elastic Kubernetes Service (Amazon EKS) 工作线程节点后,我想检查、扩展、耗尽或删除我的工作线程节点。

简短描述

根据您的需要完成相应章节中的步骤:

  • 检查您的工作线程节点
  • 扩展您的工作线程节点
  • 耗尽您的工作线程节点
  • 删除您的工作线程节点

解决方法

检查您的工作线程节点

要列出注册到 Amazon EKS 控制平面的工作线程节点,请运行以下命令:

kubectl get nodes -o wide

输出会返回工作线程节点的名称、Kubernetes 版本、操作系统和 IP 地址。

要获取关于单个工作线程节点的其他信息,请运行以下命令:

kubectl describe node/node_name

注意:node_name 替换为您的值。例如:ip-XX-XX-XX-XX.us-east-1.compute.internal

输出将显示关于工作线程节点的更多信息,包括标签、影响、系统信息和状态。

扩展您的工作线程节点

注意:如果您的节点组出现在 Amazon EKS 控制台中,则使用托管节点组。否则,使用非托管节点组。

(选项 1)要使用 eksctl 扩展您的托管或非托管工作线程节点,请运行以下命令:

eksctl scale nodegroup --cluster=clusterName --nodes=desiredCount --name=nodegroupName

注意:clusterNamedesiredCountnodegroupName 替换为您的值。

--或者--

(选项 2)要扩展托管工作线程节点而不使用 eksctl,请完成更新托管节点组的“编辑节点组配置”部分中的步骤。

--或者--

(选项 3)要使用 AWS CloudFormation 扩展您的非托管工作线程节点,请完成以下步骤:

1.    使用 AWS CloudFormation 模板启动您的 WindowsLinux 工作线程节点。

2.    修改您的 AWS CloudFormation 堆栈中的 NodeAutoScalingGroupDesiredCapacityNodeAutoScalingGroupMinSizeNodeAutoScalingGroupMaxSize 参数。

耗尽您的工作线程节点

重要提示:耗尽操作可隔离工作线程节点,并告知 Kubernetes 停止在该节点上计划的任何新 Pod。在目标节点上运行的 Pod 被排除出耗尽节点操作,这意味着这些 Pod 将会停止。考虑这可能对您的生产环境产生的影响。

您可以耗尽整个节点组或单个工作线程节点。选择合适的选项。

(选项 1)耗尽整个节点组:

如果您使用 eksctl 来启动您的工作线程节点,则运行以下命令:

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

注意:clusterNamenodegroupName 替换为您的值。

要撤消对节点组的耗尽操作,请运行以下命令:

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

注意:nodegroupclusterNamenodegroupName 替换为您的值。

如果您不使用 eksctl 来启动您的工作线程节点,则使用以下代码来识别和耗尽特定 Kubernetes 版本(在本例中为 1.14.7-eks-1861c5)的所有节点:

#!/bin/bash
K8S_VERSION=1.14.7-eks-1861c5
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 版本(在本例中为 1.14.7-eks-1861c5)的所有节点:

#!/bin/bash
K8S_VERSION=1.14.7-eks-1861c5
nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}")
for node in ${nodes[@]}
do
    echo "Undo draining $node"
    kubectl uncordon $node
done

注意:要获取工作线程节点的版本,请运行以下命令:

$ kubectl get nodes
NAME                                      STATUS   ROLES    AGE     VERSION
ip-XXX-XXX-XX-XXX.ec2.internal            Ready    <none>   6d4h    v1.14.7-eks-1861c5
ip-XXX-XXX-XX-XXX.ec2.internal            Ready    <none>   6d4h    v1.14.7-eks-1861c5

注意:版本号显示在版本列中。

(选项 2)耗尽单个工作线程节点:

如果您不使用 eksctl 来启动您的工作线程节点,或者您想仅耗尽特定节点,则运行以下命令以从容地隔离您的工作线程节点:

kubectl drain node_name --ignore-daemonsets

注意:node_name 替换为您的值。

要撤销隔离,请运行以下命令:

kubectl uncordon name

注意:node_name 替换为您的值。

要将现有应用程序迁移到新工作线程节点组,请参阅迁移到新工作线程节点组

删除您的工作线程节点

重要提示:删除操作不可恢复。考虑这可能对您的生产环境产生的影响。

如果您使用 eksctl,则运行以下命令:

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

如果您有托管节点组,则完成删除托管节点组中的步骤。

如果您有非托管节点组,并且您已使用 AWS CloudFormation 模板启动了工作线程节点,则删除您为自己的 WindowsLinux 节点组创建的 AWS CloudFormation 堆栈。

如果您有非托管节点组但未使用 AWS CloudFormation 模板来启动您的工作线程节点,则删除为您的工作线程节点的 Auto Scaling 组。或者,如果您不使用 Auto Scaling 组,则直接终止实例


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?