如何在EKS中优雅地耗尽节点?

问题描述 投票:0回答:3

有时我们需要排出 Kubernetes 中的节点。当我手动设置 k8s 集群时,我可以耗尽特定节点,然后终止该机器。在 EKS 中,节点位于自动缩放组下,这意味着我无法终止特定实例(节点)。如果我手动终止一个实例,另一个实例(节点)将自动添加到 eks 集群中。

那么有没有建议的方法来耗尽EKS中的节点?

amazon-web-services docker kubernetes autoscaling
3个回答
37
投票

这些步骤应该有效:

  1. kubectl get nodes
  2. kubectl cordon <node name>
  3. kubectl drain <node name> --ignore-daemonsets

    kubectl drain <node name> --ignore-daemonsets --delete-emptydir-data
  4. aws autoscaling terminate-instance-in-auto-scaling-group --instance-id <instance-id> --should-decrement-desired-capacity

对于 AWS 自动缩放组,如果您的节点分布到多个区域,请考虑删除每个区域中的节点,而不是删除单个区域中的所有节点。

执行完上述命令后,查看伸缩组所需的数量。 它应该会自动减少。 如果您使用 Terraform 或其他自动化框架,请不要忘记在基础设施脚本中更新自动缩放组配置。


2
投票
1.) kubectl get nodes

2.) kubectl cordon <node name>

3.) kubectl drain <node name> --ignore-daemonsets --delete-emptydir-data

标志 --delete-local-data 已被弃用,此选项是 已弃用并将被删除。使用--delete-emptydir-data。


0
投票

对于

k8s < 1.23

kubectl get nodes
kubectl cordon "node-name"
kubectl drain "node-name" --ignore-daemonsets --delete-emptydir-data

对于

k8s >= 1.23
kubectl drain
命令已经封锁节点。

kubectl get nodes
kubectl drain "node-name" --ignore-daemonsets --delete-emptydir-data

耗尽节点后,假设您使用任何集群自动缩放器(CA),您的工作就完成了,因为

ca
将检测何时不需要节点并将其删除。

如果不这样做,那么您需要手动缩小排出节点的

autoscaling node group

© www.soinside.com 2019 - 2024. All rights reserved.