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

时间:2016-04-19 07:45:50

标签: google-kubernetes-engine

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

场景:我们的计算引擎日志表明,一个实例无法从Kubernetes pod中卸载卷,因为它已经过去了。群集大小合适,故障节点正确地为容器提供服务,但CPU负载最大。

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

4 个答案:

答案 0 :(得分:3)

我们现在使用多区域群集,这意味着我需要一种新方法来获取实例组名称。当前的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]

答案 1 :(得分:2)

  

但是,在调整大小时,我发现没有办法将特定的计算实例vm定位为删除。

没有办法指定使用GKE API删除哪个VM,但您可以使用托管实例组API delete individual instances from the group(这会缩小您的节点数量,以减少实例数量你删除了,所以如果你想要替换节点,你需要扩展你的集群以补偿)。您可以通过运行:

找到实例组名称
$ gcloud container clusters describe CLUSTER | grep instanceGroupManagers
  

使用gcloud compute简单地调整大小然后删除实例是否安全,或者是否有一些容器感知方法可以做到这一点?

如果删除实例,托管实例组将使用新实例替换它(因此,如果您按一个扩展,则会为您留下额外的节点,然后删除麻烦的实例)。如果您不担心临时容量丢失,可以删除VM并重新创建。

在删除实例之前,您可以运行kubectl drain以从实例中删除工作负载。与仅删除实例并等待控制器注意到它已经消失相比,这将导致更快地重新安排pod。

答案 2 :(得分:0)

我不确定是否可以保证,但是两次尝试时,按比例缩小时,自动缩放器都会选择耗尽的节点。因此,要替换节点,我按比例放大,耗尽节点然后按比例缩小。

答案 3 :(得分:0)

您可以使用以下命令重新创建坏节点:

gcloud compute instance-groups managed recreate-instances \
  --instances="$BAD_INSTANCE" \
  --zone="$ZONE" \
  "$INSTANCE_GROUP"

例如:

#!/bin/bash
set -e

BAD_INSTANCE="$1"
FULL_ZONE=$(gcloud compute instances describe --format='value[](zone)' "$BAD_INSTANCE")
FULL_INSTANCE_GROUP=$(gcloud compute instances describe --format='value[](metadata.items.created-by)' "$BAD_INSTANCE")
ZONE=${FULL_ZONE##*/}
INSTANCE_GROUP=${FULL_INSTANCE_GROUP##*/}

echo "Recreating node '$BAD_INSTANCE' from zone '$ZONE' in instance group '$INSTANCE_GROUP'"
sleep 10

gcloud compute instance-groups managed recreate-instances \
  --instances="$BAD_INSTANCE" \
  --zone="$ZONE" \
  "$INSTANCE_GROUP"