Добавить новый пул узлов в кластер GKE - PullRequest
0 голосов
/ 06 января 2020

Я использую одноузловой кластер GKE с конфигурацией 4 ВЦП и 16 ГБ памяти. Теперь я планирую добавить еще один пул узлов 1 vCPU и 3,75 ГБ ОЗУ.

Сейчас на одном узле я работаю с нагрузкой, такой как Elasticsearch, Redis, Rabbitmq, с наборами состояний с подключением диска.

Я не добавил ни одного сродства и анти-сродства в конфигурации Pod. Если я буду добавлять новый узел, возможно, некоторые из графиков pods для нового узла. Пока я планирую запускать капсулы без гражданства на новых.

Можно ли как-нибудь остановить планирование ES, Redis или RabbitMQ на новом узле, не добавляя привязку, или что-либо, что не хочет перезапускать (Touch) модуль или службу. ES, Redis, RabbitMQ должны зависать только на старом узле.

Ответы [ 2 ]

2 голосов
/ 06 января 2020

nodeSelector и kubectl patch могут быть решением.

Использование новой метки

Вы должны сначала пометить метку работающего узла рабочие нагрузки statefull, например, со следующей меткой 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, чтобы получить имена узлов вашего кластера.

1 голос
/ 06 января 2020

Что вам нужно, так это Taints. «они позволяют узлу отражать набор модулей» (более подробно здесь: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)

По приведенной выше ссылке (предполагая, что node1 - новый узел) в вашем примере:

kubectl taint nodes node1 key=value:NoSchedule - Это означает, что ни один модуль не сможет планировать на узел 1, если у него нет соответствующего допуска. (и ваши существующие модули не имеют допустимого отклонения).

И в одном из новых модулей, которые вы хотите запланировать на новом узле, вы примените это:

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

Таким образом, старые модули не смогут планировать на этот новый узел, и только новые модули, и только если вы примените к ним допуск, смогут планировать на новом узле.

...