跳至内容

如何更新 Amazon EKS 托管节点组中的属性?

2 分钟阅读
0

我想更改我的 Amazon Elastic Kubernetes Service (Amazon EKS) 托管节点组中的属性。

简短描述

更新托管节点组属性的过程取决于您要更改的属性类型。

您可以使用 UpdateNodegroupConfigUpdateNodegroupVersion 更新以下属性:

  • labels
  • taints
  • scalingConfig
  • nodeRepairConfig
  • updateConfig
  • launchTemplate
    **注意:**要编辑 launchTemplate 属性,必须在创建托管节点组时指定该属性。

您可以使用自定义启动模板更新以下属性:

  • diskSize
  • remoteAccess
  • tags
    **注意:**您也可以使用 TagResource API 来更新标签。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

要更改 instanceType 属性,请在创建托管节点组时在启动模板中指定实例类型。然后,您可以在启动模板中对其进行更新。

要更改 amiType 属性,请在创建节点组时在启动模板中指定 ImageId。然后,您可以将其更新为在启动模板中使用不同的亚马逊机器映像 (AMI) ID。

要更新无法直接修改的属性,必须先创建托管节点组。然后,可以选择设置容器组中断预算 (PDB),耗尽现有节点,并删除旧的托管节点组。

创建新的托管节点组

完成以下步骤:

  1. 创建新的托管节点组
  2. 检查从您创建的托管节点组启动的节点是否成功加入集群。运行以下命令:
    kubectl get node -l 'eks.amazonaws.com/nodegroup=my-new-node-group-name'
    **注意:**将 my-new-node-group-name 替换为所需的新节点组名称。
    如果节点成功加入集群,则您将看到类似于以下内容的输出:
    NAME                            STATUS   ROLES    AGE     VERSION
    ip-192-168-95-10.ec2.internal   Ready    <none>   3m33s   v1.33.3-eks-3abbec1
    ip-192-168-96-53.ec2.internal   Ready    <none>   3m32s   v1.33.3-eks-3abbec1

可选: 设置 PDB

为了安全地将容器组迁移到新创建的托管节点组并保持其可用性,最佳做法是为工作负载设置 PDB。

如果您已经使用 PDB,请检查配置。运行以下命令:

kubectl get pdb -n your_namespace

**注意:**将 your-namespace 替换为您的命名空间的名称。

输出示例:

NAME       MIN AVAILABLE   MAX UNAVAILABLE   ALLOWED DISRUPTIONS   AGE
my-pdb     2               N/A               2                     95d

如果您尚未配置 PDB,则可以使用以下模板为每个工作负载创建一个。

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: mypdb
  namespace: your_namespace
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: myapp

**注意:**将 your_namespace 替换为您的命名空间的名称。

有关详细信息,请参阅使用容器组中断预算保护关键工作负载

耗尽现有节点

将现有节点标记为不可调度,然后驱逐在其上运行的容器组。

**注意:**如果您使用 Kubernetes Cluster Autoscaler,请将部署缩减为零副本,以避免扩缩操作发生冲突。运行以下命令:

kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system

完成以下步骤:

  1. 防止新的容器组被调度。运行以下命令:
    kubectl cordon -l 'eks.amazonaws.com/nodegroup=my-old-node-group-name'
    **注意:**将 my-old-node-group-name 替换为现有节点组名称。
  2. 逐一移除每个不可调度节点的工作负载。运行以下命令:
    kubectl drain --ignore-daemonsets --delete-emptydir-data your_node
    **注意:**将 your-node 替换为您的节点名称。
  3. 验证被驱逐的容器组是否在新节点上运行。运行以下命令:
    kubectl get deploy -n your_namespace
    **注意:**将 your_namespace 替换为您的命名空间的名称。
    输出示例:
    NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/test                 4/4     4            4           5d3h
    

删除旧的托管节点组

除了 DaemonSet 之外的所有容器组都被逐出现有节点后,删除旧的托管节点组

相关信息

Kubernetes 数据面板

AWS 官方已更新 4 个月前