С поддержкой Windows Server 2019 в Kubernetes 1.14 кажется возможным иметь узлы с разными ОС. Например, узел Ubuntu 18.04, узел RHEL 7, узел Windows Server в одном кластере.
В моем случае использования я хотел бы иметь предварительно настроенную систему очередей с очередью для каждого типа ОС. Узлы будут питаться от своих конкретных очередей, обрабатывая задание.
Имея в виду вышеизложенное, возможно ли настроить задание для перехода к определенной очереди и, в свою очередь, к определенному узлу ОС?
Узлы Kubernetes поставляются со стандартным набором меток, включая kubernetes.io/os
Затем поды могут быть назначены в определенные места через nodeSelector
, podAffinity
и podAntiAffinity
.
apiVersion: extensions/v1beta1
kind: Pod
metadata:
name: anapp
spec:
containers:
- image: docker.io/me/anapp
name: anapp
ports:
- containerPort: 8080
nodeSelector:
kubernetes.io/os: linux
Если вам нужен более детальный контроль (например, выбор между Ubuntu/RHEL), вам нужно будет добавить пользовательские метки в развертывание вашего узла kubernetes для выбора. Этот уровень выбора встречается редко, поскольку среды выполнения контейнеров пытаются скрыть от вас большинство различий, но если у вас есть конкретный случай, добавьте в узлы дополнительные метаданные метки.
Я бы рекомендовал использовать поля ID
и VERSION_ID
из cat /etc/*release*
, так как большинство дистрибутивов Linux заполняют эту информацию в той или иной форме.
kubectl label node thenode softey.com/release-id=debian
kubectl label node thenode softey.com/release-version-id=9
OP также может захотеть использовать испорченные + допуски, чтобы гарантировать, что только задания для Windows планируются на узлах Windows.
Вы можете поиграть с Label, Selector и Affinity, чтобы назначить разные модули разным узлам. Взгляните на kubernetes.io/docs/concepts/configuration/assign-pod-node