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, пожалуйста, обратитесь к этой части документации:
Вы можете найти более подробную информацию о настройке ограничений по умолчанию для пространства имен в этой статье: