gpt4 book ai didi

kubernetes - 升级到GKE中的更大节点池

转载 作者:行者123 更新时间:2023-12-02 11:55:24 25 4
gpt4 key购买 nike

我在具有3个节点的GKE群集中有一个节点池(默认池),机器类型为n1-standard-1。他们托管了6个带有Redis集群的Pod(3个主服务器和3个从属),以及3个带有Nodejs示例应用程序的Pod。

我想升级到具有3个节点的更大计算机类型(n1-standard-2)。

Google在documentation中给出了一个示例,以升级到其他计算机类型(在新的节点池中)。

我已经在开发过程中对其进行了测试,并且在执行以下命令时一段时间无法访问我的节点池:

for node in $(kubectl get nodes -l cloud.google.com/gke-nodepool=default-pool -o=name); do
kubectl cordon "$node";
done

在我的终端中,我收到一条消息,通知我与服务器的连接已丢失(我无法执行kubectl命令)。几分钟后,我可以重新连接,并获得所需的输出,如文档中所示。

第二次,我尝试省略了cordon命令,然后跳到以下命令:
for node in $(kubectl get nodes -l cloud.google.com/gke-nodepool=default-pool -o=name); do
kubectl drain --force --ignore-daemonsets --delete-local-data --grace-period=10 "$node";
done

这是因为,如果我正确解释了kubernetes documentation,则在使用排水命令时会自动关闭节点。但是我得到了与cordon命令相同的结果:我失去了与群集的连接几分钟,并且无法到达同一节点上托管的nodejs示例应用程序。几分钟后,它恢复了自身。

我找到了一种升级到具有更大计算机类型的新节点池的解决方法:编辑了Deployment / statefulset yaml文件并更改了nodeSelector。 GKE中的节点池标记有:
cloud.google.com/gke-nodepool=NODE_POOL_NAME

所以我将正确的nodeSelector添加到deployment.yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
labels:
app: example
spec:
replicas: 3
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
nodeSelector:
cloud.google.com/gke-nodepool: new-default-pool
containers:
- name: example
image: IMAGE
ports:
- containerPort: 3000

这可以在不造成停机的情况下工作,但是我不确定这是在生产环境中正确的方法。

Cordon / Drain命令有什么问题,或者我使用不正确?

最佳答案

封锁节点会导致将其从负载均衡器后端列表中删除,因此也会造成消耗。正确的方法是在部署上设置反关联性规则,这样就不会将Pod部署在同一节点或同一区域上。这将导致Pod在整个节点池中均匀分布。

然后,如果启用了旧节点池,则必须在其上禁用自动缩放,每次缓慢消耗1-2个节点,并等待它们出现在新节点池中,并确保始终保持部署的一个pod处于 Activity 状态因此它可以处理流量。

关于kubernetes - 升级到GKE中的更大节点池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61989776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com