QoS по умолчанию в Kubernetes для всего пространства имен

Есть ли способ установки QoS по умолчанию для всех узлов из данного пространства имен? Или просто установите QoS на уровне пространства имен вместо уровня pod. Я имею в виду ситуацию, когда каждый существующий и каждый вновь созданный модуль будет иметь эту настройку по умолчанию для данного пространства имен.

Например. Все стручки в пространстве имен kube-system или же super-important получил уровень QoS "гарантированный".

Я хочу настроить QoS таким образом, чтобы в случае каких-либо проблем со стручками ресурсов kube-system (или другие важные группы / пространства имен), они будут удалены последними, позже, чем менее важные.

PS Я получил совет о контроллерах приема, но я не видел корреляции с QoS.

1 ответ

Возможно. Некоторая основная информация о QoS:

Kubernetes использует классы QoS для принятия решений о планировании и выселении Pod.

Для стручка, которому нужно дать гарантированный класс QoS:

  • Каждый контейнер в модуле должен иметь ограничение памяти и запрос памяти, и они должны быть одинаковыми.
  • Каждый Контейнер в модуле должен иметь ограничение ЦП и запрос ЦП, и они должны быть одинаковыми.

Pod получает класс QoS Burstable, если:

  • Pod не соответствует критериям для класса QoS Guaranteed. По крайней мере один контейнер в модуле имеет запрос памяти или ЦП.

Для стручка, которому нужно дать класс QoS BestEffort:

  • Контейнеры в модуле не должны иметь никаких ограничений памяти или ЦП или запросов.

Вот пример того, как установить Гарантированное QoS для всех модулей в qos-тесте пространства имен.

Давайте создадим qos-тест пространства имен:

$ kubectl create namespace qos-test

Далее, давайте создадим YAML-файл объекта LimitRange (должны присутствовать процессор и память, ограничения и запросы должны быть одинаковыми):

$ cat <<EOF > limitRange.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-gua
spec:
  limits:
  - default:
      cpu: 100m
      memory: 512Mi
    defaultRequest:
      cpu: 100m
      memory: 256Mi
    type: Container
EOF

Тогда давайте применим его к qos-тесту пространства имен:

$ kubectl create -f limitRange.yaml --namespace=qos-test

Теперь давайте создадим модуль (запросы и ограничения ЦП или памяти не должны присутствовать в спецификации Pod):

$ cat <<EOF > default-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: default-pod
spec:
  containers:
  - name: default-ctr
    image: nginx
EOF

$ kubectl create -f default-pod.yaml --namespace=qos-test

Наконец, давайте проверим, что у нас есть:

$ kubectl get namespaces
...
$ kubectl get limitrange --all-namespaces -o wide
...
$ kubectl get limitrange -o yaml -n qos-test
...
$ kubectl get pod default-pod -o yaml -n qos-test

apiVersion: v1
kind: Pod
metadata:
  ...
  name: default-pod
  namespace: qos-test
  ...
spec:
  containers:
  - image: nginx
    imagePullPolicy: Always
    name: default-ctr
    resources:
      limits:
        cpu: 100m
        memory: 256Mi
      requests:
        cpu: 100m
        memory: 256Mi
    ...
status:
  ...
  hostIP: 10.0.2.15
  phase: Running
  podIP: 172.17.0.10
  qosClass: Guaranteed
  ...

Как вы видете default-pod получил qosClass: Guaranteed,

Для создания контейнеров с различным QoS, пожалуйста, обратитесь к этой части документации:

Вы можете найти более подробную информацию о настройке ограничений по умолчанию для пространства имен в этой статье:

Другие вопросы по тегам