#kubernetes
#kubernetes
Вопрос:
Я следую руководству [1] по созданию многоузлового кластера K8S, в котором есть 1 главный и 2 узла. Кроме того, метку необходимо установить для каждого узла соответственно.
Node 1 - label name=orders
Node 2 - label name=payment
Я знаю, что вышесказанное может быть достигнуто с помощью команды kubectl
kubectl get nodes
kubectl label nodes <node-name> <label-key>=<label-value>
Но я хотел бы знать, как установить метку при создании узла. Руководство по созданию узла приведено в [2].
Ценю ваш вклад.
[1] https://coreos.com/kubernetes/docs/latest/getting-started.html
[2] https://coreos.com/kubernetes/docs/latest/deploy-workers.html
Ответ №1:
На самом деле есть тривиальный способ добиться этого с версии 1.3 или что-то в этом роде.
За регистрацию вашего узла отвечает запущенный на нем процесс kubelet, все, что вам нужно сделать, это передать ему такой флаг --node-labels 'role=kubemaster'
. Вот как я различаю узлы между различными группами автоматического масштабирования в моем кластере AWS k8s.
Комментарии:
1. похоже, что мой
v1.7.3 coreos.0
кластер не обнаруживает, что аргумент CLI kubelet изменился.--node-labels mapStringString <Warning: Alpha feature> Labels to add when registering the node in the cluster. Labels must be key=value pairs separated by ','.
2. Согласно github.com/kubernetes/kubernetes/issues/51858 это применяется только во время начальной регистрации узла.
Ответ №2:
Этот ответ теперь неверен (и был для нескольких версий Kubernetes). Пожалуйста, посмотрите правильный ответ Радека ‘Гоблина’ Пьецзонки
Вам доступно несколько вариантов. Самым простым ИМХО было бы использовать системный модуль для установки и настройки kubectl, а затем запустить kubectl label
команду. В качестве альтернативы, вы могли бы просто использовать curl
для прямого обновления меток вметаданных узла.
При этом, хотя я не знаю вашего точного варианта использования, то, как вы используете метки на узлах, похоже, является попыткой обойти некоторые ключевые функции Kubernetes, такие как динамическое планирование компонентов между узлами. Я бы посоветовал вместо того, чтобы работать над автоматической маркировкой узлов, попытаться решить, почему вам нужно идентифицировать узлы в первую очередь.
Комментарии:
1. Ага. Я согласен с вами. Но мое требование — создавать модули на узлах, где они соответствуют метке. Потому что в кластере K8S будет запущено так много модулей, и мне легко понять, какой модуль работает на каком узле.
2. Весь смысл Kubernetes заключается в том, что вам не нужно знать и не заботиться о том, какой модуль где запускается. Kubernetes — это абстракция, специально предназначенная для устранения необходимости знать, что и где выполняется, и позволяющая перемещать объекты на другие узлы, когда (не если) происходят сбои.
Ответ №3:
Я знаю, что это не время создания, но следующее довольно просто (метки следуют шаблону key=value
):
k label node minikube gpu.nvidia.com/model=Quadro_RTX_4000 node.coreweave.cloud/cpu=intel-xeon-v2
node/minikube labeled