更换错误的GKE节点实例的推荐方法是什么?

sol*_*son 6 google-kubernetes-engine

使用gcloud container clusters resize我可以轻松地向上和向下扩展群集.但是,在调整大小时,我发现没有办法将特定的计算实例vm定位为删除.

场景:我们的计算引擎日志表明,一个实例在很久以前的Kubernetes pod中无法卸载卷.群集大小合适,故障节点正确地为容器提供服务,但CPU负载最大.

显然我想要一个新的Kubernetes节点在我杀掉旧节点之前做好准备.简单地调整大小然后使用删除实例是否安全gcloud compute,或者是否有一些容器感知方式来执行此操作?

sol*_*son 10

我们现在使用多专区集群,这意味着我需要一种新方法来获取实例组名称。当前的 shell 命令:

BAD_INSTANCE=[your node name from kubectl get nodes]

kubectl cordon $BAD_INSTANCE

kubectl drain $BAD_INSTANCE

gcloud compute instances describe --format='value[](metadata.items.created-by)' $BAD_INSTANCE

gcloud compute instance-groups managed delete-instances --instances=$BAD_INSTANCE --zone=[from describe output] [grp from describe output]
Run Code Online (Sandbox Code Playgroud)


Rob*_*ley 2

但是,我发现在缩小规模时无法针对特定的计算实例虚拟机进行删除。

无法使用 GKE API 指定要删除哪个虚拟机,但您可以使用托管实例组 API从组中删除单个实例(这会根据您删除的实例数量减少节点数量,因此,如果您想更换节点,您将需要扩展集群以进行补偿)。您可以通过运行以下命令找到实例组名称:

$ gcloud container clusters describe CLUSTER | grep instanceGroupManagers
Run Code Online (Sandbox Code Playgroud)

使用 gcloudcompute 简单地调整大小然后删除实例是否安全,或者是否有某种容器感知的方法来执行此操作?

如果您删除一个实例,托管实例组将用一个新实例替换它(因此,如果您扩大一个实例,然后删除有问题的实例,这将为您留下一个额外的节点)。如果您不担心容量暂时丢失,您可以删除虚拟机并重新创建它。

在删除实例之前,您可以运行kubectl dance以删除实例中的工作负载。与简单地删除实例并等待控制器注意到它已经消失相比,这将导致 pod 的重新调度速度更快。