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

2 分钟阅读
0

我使用 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.    使用 CloudFormation 模板启动您的 WindowsLinux 工作线程节点。

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

耗尽您的工作线程节点

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

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

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

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

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

**注意:**将 clusterNamenodegroupName 替换为您的值。

要解锁节点组,请运行以下命令:

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

**注意:**将 clusterNamenodegroupName 替换为您的值。

如果您不使用 eksctl 来启动您的工作线程节点,那么识别并耗尽特定 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

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

$ kubectl get nodes
NAME                                      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

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

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

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

kubectl drain node_name --ignore-daemonsets

**注意:**将 node_name 替换为您的值。

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

kubectl uncordon node_name

**注意:**将 node_name 替换为您的值。

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

删除您的工作线程节点

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

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

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

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

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

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


AWS 官方
AWS 官方已更新 3 年前
没有评论