我正在运行单节点GKE集群,配置为4vCPU & 16 GB内存。现在,我计划再添加一个节点池1 vCPU和3.75GB内存。
现在,在一个节点上,我正在运行load,比如Elasticsearch、Redis、Rabbitmq,其中有状态集具有磁盘附加。
我没有在Pod配置中添加任何亲和力和反亲和力。如果我将添加新节点,可能会有一些豆荚调度到新节点。而我只是计划在新的豆荚上运行无状态的豆荚。
我是否可以停止在新节点上调度ES、Redis或RabbitMQ,而不添加关联或任何不想重新启动(Touch) pod或服务的内容。ES,Redis,RabbitMQ应该只能停留在老节点上。
发布于 2020-01-06 07:48:57
nodeSelector和kubectl 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,则运行:
kubectl patch deployments nginx-deployment -p '{"spec": {"template": {"spec": {"nodeSelector": {"kubernetes.io/hostname": "my-gke-node"}}}}}'运行kubectl get nodes以获取群集节点的名称。
发布于 2020-01-06 07:43:48
你需要的是圣徒。“它们允许节点排斥一组豆荚”(更详细的信息在这里:https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ )
从上面的链接(假设node1是新节点)在您的示例中:
kubectl taint nodes node1 key=value:NoSchedule --这意味着,除非有匹配的公差,否则任何吊舱都无法在node1上调度。(而且您现有的吊舱没有匹配的公差)。
在您想要在新节点上调度的一个新豆荚中,您将应用以下内容:
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"因此,旧的豆荚将不能调度到这个新节点,只有新的豆荚,只有当你应用公差,才能在新的节点上调度。
https://stackoverflow.com/questions/59608060
复制相似问题