有时我们需要排出 Kubernetes 中的节点。当我手动设置 k8s 集群时,我可以耗尽特定节点,然后终止该机器。在 EKS 中,节点位于自动缩放组下,这意味着我无法终止特定实例(节点)。如果我手动终止一个实例,另一个实例(节点)将自动添加到 eks 集群中。
那么有没有建议的方法来耗尽EKS中的节点?
这些步骤应该有效:
kubectl get nodes
kubectl cordon <node name>
kubectl drain <node name> --ignore-daemonsets
或kubectl drain <node name> --ignore-daemonsets --delete-emptydir-data
aws autoscaling terminate-instance-in-auto-scaling-group --instance-id <instance-id> --should-decrement-desired-capacity
对于 AWS 自动缩放组,如果您的节点分布到多个区域,请考虑删除每个区域中的节点,而不是删除单个区域中的所有节点。
执行完上述命令后,查看伸缩组所需的数量。 它应该会自动减少。 如果您使用 Terraform 或其他自动化框架,请不要忘记在基础设施脚本中更新自动缩放组配置。
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。
对于
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
。