Как зарезервировать определенные рабочие узлы для пространства имен - PullRequest
0 голосов
/ 31 октября 2019

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

Как назначить пространство имен для определенных узлов?

https://medium.com/@alejandro.ramirez.ch/reserving-a-kubernetes-node-for-specific-nodes-e75dc8297076

Я понимаю, что мы можем использовать Taintи выбор узла для достижения этого. Мой вопрос: если люди узнают подробности о nodeselector или taint, как мы можем предотвратить их развертывание модулей в этих выделенных рабочих узлах.

спасибо

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Вот как это можно сделать

  1. Добавить новую метку, скажем, ns = зарезервированную, метку для конкретного рабочего узла
  2. Добавить маркер и допуски для целевых определенных модулей. к этому рабочему узлу
  3. Необходимо определить роли RBAC и привязки ролей в этом пространстве имен, чтобы контролировать, что могут делать другие пользователи
0 голосов
/ 31 октября 2019

Чтобы выполнить то, что вам нужно, в основном вы должны использовать taint . Предположим, у вас есть кластер Kubernetes с одним главным и двумя рабочими узлами:

$ kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
knode01      Ready    <none>   8d    v1.16.2
knode02      Ready    <none>   8d    v1.16.2
kubemaster   Ready    master   8d    v1.16.2

В качестве примера я установлю knode01 как Prod и knode02 как Dev.

$ kubectl taint nodes knode01 key=prod:NoSchedule
$ kubectl taint nodes knode02 key=dev:NoSchedule

Чтобы запустить модуль pod в эти узлы, мы должны указать допуск в спецификации сессии для вашего файла yaml:

apiVersion: v1
kind: Pod
metadata:
  name: pod1
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  tolerations:
  - key: "key"
    operator: "Equal"
    value: "dev"
    effect: "NoSchedule"

Этот модуль pod (pod1) всегда будет запускаться в knode02, поскольку он настроен как dev. Если мы хотим запустить его на prod, наши допуски должны выглядеть следующим образом:

  tolerations:
  - key: "key"
    operator: "Equal"
    value: "prod"
    effect: "NoSchedule"

Поскольку у нас есть только 2 узла, и оба они предназначены для запуска только prod или dev, если мы пытаемся запустить модуль безс указанием допусков модуль перейдет в состояние ожидания:

$ kubectl get pods -o wide
    NAME         READY   STATUS    RESTARTS   AGE   IP               NODE      NOMINATED NODE   READINESS GATES
    pod0         1/1     Running   0          21m   192.168.25.156   knode01   <none>           <none>
    pod1         1/1     Running   0          20m   192.168.32.83    knode02   <none>           <none>
    pod2         1/1     Running   0          18m   192.168.25.157   knode01   <none>           <none>
    pod3         1/1     Running   0          17m   192.168.32.84    knode02   <none>           <none>
    shell-demo   0/1     Pending   0          16m   <none>           <none>    <none>           <none>

Для удаления порчи:

$ kubectl taint nodes knode02 key:NoSchedule-
...