Стручки Kubernetes запланированы на не испорченный узел - PullRequest
0 голосов
/ 05 февраля 2020

Я создал кластер GKE Kubernetes и две рабочие нагрузки, развернутые в этом кластере. Для каждой рабочей нагрузки существуют отдельные пулы узлов. Пул узлов для рабочей нагрузки сельдерея испорчен celery-node-pool=true. Спецификация модуля c имеет следующий допуск:

tolerations:
- key: "celery-node-pool"
  operator: "Exists"
  effect: "NoSchedule"    

Несмотря на порчу и допуск узла, некоторые модули из рабочей нагрузки сельдерея развертываются на незараженном узле. Почему это происходит, и я делаю что-то не так? Какие другие порции и допуски я должен добавить, чтобы сохранить модули на указанных c узлах?

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Использование Taints:

Taints позволяют узлу отражать набор пакетов. Вы не указали эффект в заражении. Это должно быть node-pool=true:NoSchedule. Кроме того, ваш другой узел должен отталкивать этот модуль, поэтому вам нужно добавить другой оттенок для других узлов и не иметь этого допуска в модуле.

Использование селектора узлов:

Вы можете ограничить Pod, чтобы иметь возможность работать только на определенных узлах или предпочитать работать на определенных узлах.

Вы можете пометить узел

kubectl label nodes kubernetes-foo-node-1.c.a-robinson.internal node-pool=true

Добавить узел селектор в модуле модуля c:

kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    node-pool: true

Использование Node Affinity

nodeSelector обеспечивает очень простой способ привязать модули к узлам с определенными метками. Функция сродства / анти-сродства значительно расширяет типы ограничений, которые вы можете express.

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: node-pool
            operator: In
            values:
            - true
  containers:
  - name: with-node-affinity
    image: k8s.gcr.io/pause:2.0
0 голосов
/ 05 февраля 2020

Какие еще порции и допуски я должен добавить, чтобы сохранить стручки на определенных c узлах?

Вам также следует добавить node selector, чтобы прикрепить ваши стручки к испорченный узел , иначе pod может свободно go к не испорченному узлу, если планировщик захочет.

kubectl taint node node01 hostname=node01:NoSchedule

Если я испорчу node01 и хочу, чтобы мои стручки были размещены на нем с toleration потребность node selector.

nodeSelector предоставляет очень простой способ ограничения (привязанности) модулей к узлам с определенными метками.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  tolerations:
  - key: "hostname"
    operator: "Equal"
    value: "node01"
    effect: "NoSchedule"
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    kubernetes.io/hostname: node01
...