Kubectl запустить установить nodeSelector - PullRequest
0 голосов
/ 03 июля 2018

Есть ли способ указать nodeSelector при использовании команды запуска Kubernetes?

У меня нет файла yaml, и я хочу переопределить только nodeSelector.

Я попробовал следующее, но не сработало:

kubectl run myservice --image myserviceimage:latest --overrides='{ "nodeSelector": { "beta.kubernetes.io/os": "windows" } }'

Ответы [ 4 ]

0 голосов
/ 29 января 2019

В Kubernetes 1.12 и новее правила соответствия изменены для использования nodeAffinity.

kubectl run hello-world --replicas=1 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0  --port=8080 --overrides='{"apiVersion":"v1","spec":{"affinity":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchFields":[{"key":"metadata.name","operator":"In","values":["my-chosen-node-01"]}]}]}}}}}'

Обратите внимание, что этот подход прекрасно работает в Unix, таких как оболочки, но есть проблемы с цитированием при запуске этого в PowerShell в Windows.

0 голосов
/ 04 июля 2018

Попробуйте это:

kubectl run myservice --image myserviceimage:latest --overrides='{"apiVersion": "v1", "spec": {"nodeSelector": { "beta.kubernetes.io/os": "windows" }}}'

0 голосов
/ 07 июля 2018

У меня есть актуальный ответ сейчас ... Вот мой окончательный ответ :

Чтобы указать селектор узла с помощью команды запуска (и заставить его работать так, чтобы он работал на определенном узле), мы можем сделать следующее:

0) Убедитесь, что узел, на который вы хотите настроить таргетинг, может запланировать на нем pods. Мой главный узел (master-0) не был подготовлен к этому, поэтому мне пришлось удалить его заражение с помощью команды:

kubectl taint node master-0 node-role.kubernetes.io/master:NoSchedule-

(Трейлинг - важен), и где master-0 заменяется вашим именем, если это необходимо.

1) Добавьте команду переопределения к команде запуска kubectl.

run hello-world --replicas=1 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0  --port=8080 --overrides='{ "apiVersion": "apps/v1beta1", "spec": { "template": { "spec": { "nodeSelector": { "kubernetes.io/hostname": "master-0" } } } } }'

* Убедитесь, что ваш apiVersion поддерживается ... При попытке использовать v1 я получил следующую ошибку:

ошибка: для версии "v1" не зарегистрирован тип "Развертывание"

Чтобы обойти это, я выполнил команду:

kubectl api-versions

и по настоянию этой темы https://github.com/kubernetes/kubernetes/issues/55894 выбрал "apps / v1beta1"

Я не уверен, как работают вышеуказанные ответы, так как им не хватает инкапсуляции в json ... ни как: https://github.com/kubernetes/kubernetes/issues/45153 работает, так как для меня проблема заключалась в том, что:

Ключ, который мне не хватало, заключался в следующем: это не .spec.nodeSelector, это должно быть .spec.template.spec.nodeSelector

0 голосов
/ 03 июля 2018

Документация kubectl run упоминает:

--overrides="": 

Встроенное переопределение JSON для сгенерированного объекта.
Если он не пустой, он используется для переопределения сгенерированного объекта.
Требуется, чтобы объект предоставил действительное поле apiVersion .

Так что, по крайней мере, попробуйте:

--overrides='{ "apiVersion": "v1", "nodeSelector"... }'

Если это не сработает, проверьте фактически сгенерированный yaml (из выпуск 24873 );

for n in $(kubectl get -o=name pvc,configmap,serviceaccount,secret,ingress,service,deployment,statefulset,hpa,job,cronjob)
do
    mkdir -p $(dirname $n)
    kubectl get -o=yaml --export $n > $n.yaml
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...