使用gcloud container clusters resize
我可以轻松扩展和缩小群集。但是,在调整大小时,我发现没有办法将特定的计算实例vm定位为删除。
场景:我们的计算引擎日志表明,一个实例无法从Kubernetes pod中卸载卷,因为它已经过去了。群集大小合适,故障节点正确地为容器提供服务,但CPU负载最大。
显然,在我杀掉旧节点之前,我想要一个新的Kubernetes节点准备就绪。简单地调整大小然后使用gcloud compute
删除实例是否安全,或者是否有一些容器感知方式来执行此操作?
答案 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"