繁体   English   中英

将新节点池添加到 GKE 集群

[英]Add new node pool to GKE cluster

我正在运行配置为 4vCPU 和 16 GB 内存的单节点 GKE 集群。 现在我打算再添加一个节点池,1 个 vCPU 和 3.75 GB 的 RAM。

现在在单个节点上,我正在运行负载,如 Elasticsearch、Redis、Rabbitmq 和具有磁盘附加的状态集。

我没有在 Pod 配置中添加任何亲和性和反亲和性。 如果我要添加新节点,可能会将一些 Pod 调度到新节点。 虽然我只计划在新 pod 上运行无状态 pod。

有什么方法可以停止在新节点上调度 ES、Redis 或 RabbitMQ,而无需添加亲和力或任何不想重新启动(触摸)pod 或服务的东西。 ES、Redis、RabbitMQ 应该只停留在旧节点上。

nodeSelectorkubectl patch可能是解决方案。

使用新标签

您必须首先使用以下命令标记运行有状态工作负载的节点,例如使用以下标签statefullnode=true

kubectl label nodes <node-name> statefullnode=true

然后,您必须使用kubectl patch此节点上运行的每个部署:

kubectl patch deployments nginx-deployment -p '{"spec": {"template": {"spec": {"nodeSelector": {"statefullnode": "true"}}}}}'

使用节点名称

如果您不想标记您的节点,您可以简单地使用节点名称作为 nodeSelector 的标签。 例如,如果您的节点名称是my-gke-node,则运行:

kubectl patch deployments nginx-deployment -p '{"spec": {"template": {"spec": {"nodeSelector": {"kubernetes.io/hostname": "my-gke-node"}}}}}'

运行kubectl get nodes以获取集群节点的名称。

你需要的是污点。 “它们允许一个节点排斥一组 pod”(更多细节在这里: https : //kubernetes.io/docs/concepts/configuration/taint-and-toleration/

从上面的链接(假设 node1 是新节点)在您的示例中:

kubectl taint nodes node1 key=value:NoSchedule - 这意味着任何 pod 都不能调度到 node1 上,除非它有匹配的容忍度。 (并且您现有的 pod 没有匹配的容差)。

在您希望在新节点上安排的新 pod 之一中,您将应用以下内容:

tolerations:
- key: "key"
  operator: "Equal"
  value: "value"
  effect: "NoSchedule"

因此,旧的 pod 将无法调度到这个新节点,只有新的 pod,并且只有当你对它们应用容忍时,才能调度到新节点上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM