Обновите поле выбора узла для POD на лету - PullRequest
1 голос
/ 26 марта 2019

Я пробовал разные вещи вокруг k8s в эти дни.Мне интересно о поле nodeSelector в спецификации POD.Насколько я понимаю, мы должны назначить некоторые метки узлам, и эти метки можно в дальнейшем использовать в полевой части nodeSelector спецификации POD.

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

Я думаю, что это так же, как это делаетсядля нормальных меток с помощью команды kubectl label .

Есть ли какие-либо хаки для достижения такого случая?

Если это невозможно для текущих последних версий kubernetesпочему бы нам не рассмотреть это?

Спасибо.

1 Ответ

3 голосов
/ 26 марта 2019

Несмотря на то, что редактирование развертывания вручную, как описано в разделе cookied, является одним из вариантов, я считаю, что использование kubctl patch будет лучшим решением.

Вы можете выполнить исправление, используя файл yaml или строку JSON , что упрощает интеграцию в сценарии.Вот полная ссылка .


Пример

Вот простое развертывание используемого мной nginx, которое будет создано на node-1:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
      nodeSelector:
        kubernetes.io/hostname: node-1

JSON patch

Вы можете исправить развертывание, чтобы изменить нужный узел следующим образом:kubectl patch deployments nginx-deployment -p '{"spec": {"template": {"spec": {"nodeSelector": {"kubernetes.io/hostname": "node-2"}}}}}'

Патч YAML

Запустив kubectl patch deployment nginx-deployment --patch "$(cat patch.yaml)", где patch.yaml подготовлен следующим образом:

spec:
  template:
    spec:
      nodeSelector:
        kubernetes.io/hostname: node-2

Оба приведут к планированию планирования нового модуля назапрашиваемый узел и завершает работу старого, как только новый будет готов.

...