Налаштування якості обслуговування для Podʼів
Ця сторінка показує, як налаштувати Podʼи так, щоб їм були призначені певні класи якості обслуговування (QoS). Kubernetes використовує класи QoS для прийняття рішень про видалення Podʼів, коли використання ресурсів вузла збільшується.
Коли Kubernetes створює Pod, він призначає один з таких класів QoS для Podʼа:
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Також вам потрібно мати можливість створювати та видаляти простори імен.
Створення простору імен
Створіть простір імен, щоб ресурси, які ви створюєте у цьому завданні, були ізольовані від решти вашого кластера.
kubectl create namespace qos-example
Створення Podʼа, якому призначено клас QoS Guaranteed
Щоб Podʼа був наданий клас QoS Guaranteed:
- Кожний контейнер у Pod повинен мати ліміт памʼяті та запит памʼяті.
- Для кожного контейнера у Pod ліміт памʼяті повинен дорівнювати запиту памʼяті.
- Кожний контейнер у Pod повинен мати ліміт CPU та запит CPU.
- Для кожного контейнера у Pod ліміт CPU повинен дорівнювати запиту CPU.
Ці обмеження так само застосовуються до контейнерів ініціалізації і до контейнерів застосунків. Ефемерні контейнери не можуть визначати ресурси, тому ці обмеження не застосовуються до них.
Нижче подано маніфест для Podʼа з одним контейнером. Контейнер має ліміт памʼяті та запит памʼяті, обидва дорівнюють 200 MiB. Контейнер має ліміт CPU та запит CPU, обидва дорівнюють 700 міліCPU:
apiVersion: v1
kind: Pod
metadata:
name: qos-demo
namespace: qos-example
spec:
containers:
- name: qos-demo-ctr
image: nginx
resources:
limits:
memory: "200Mi"
cpu: "700m"
requests:
memory: "200Mi"
cpu: "700m"
Створіть Pod:
kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod.yaml --namespace=qos-example
Перегляньте докладну інформацію про Pod:
kubectl get pod qos-demo --namespace=qos-example --output=yaml
Вивід показує, що Kubernetes призначив Podʼу клас QoS Guaranteed
. Також вивід підтверджує, що у контейнера Podʼа є запит памʼяті, який відповідає його ліміту памʼяті, і є запит CPU, який відповідає його ліміту CPU.
spec:
containers:
...
resources:
limits:
cpu: 700m
memory: 200Mi
requests:
cpu: 700m
memory: 200Mi
...
status:
qosClass: Guaranteed
Примітка:
Якщо контейнер вказує свій власний ліміт памʼяті, але не вказує запит памʼяті, Kubernetes автоматично призначає запит памʼяті, який відповідає ліміту. Так само, якщо контейнер вказує свій власний ліміт CPU, але не вказує запит CPU, Kubernetes автоматично призначає запит CPU, який відповідає ліміту.Очищення
Видаліть свій Pod:
kubectl delete pod qos-demo --namespace=qos-example
Створення Podʼа, якому призначено клас QoS Burstable
Podʼу надається клас QoS Burstable, якщо:
- Pod не відповідає критеріям для класу QoS
Guaranteed
. - Принаймні один контейнер у Podʼі має запит або ліміт памʼяті або CPU.
Нижче подано маніфест для Podʼа з одним контейнером. Контейнер має ліміт памʼяті 200 MiB та запит памʼяті 100 MiB.
apiVersion: v1
kind: Pod
metadata:
name: qos-demo-2
namespace: qos-example
spec:
containers:
- name: qos-demo-2-ctr
image: nginx
resources:
limits:
memory: "200Mi"
requests:
memory: "100Mi"
Створіть Pod:
kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod-2.yaml --namespace=qos-example
Перегляньте докладну інформацію про Pod:
kubectl get pod qos-demo-2 --namespace=qos-example --output=yaml
Вивід показує, що Kubernetes призначив Podʼу клас QoS Burstable:
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: qos-demo-2-ctr
resources:
limits:
memory: 200Mi
requests:
memory: 100Mi
...
status:
qosClass: Burstable
Очищення
Видаліть свій Pod:
kubectl delete pod qos-demo-2 --namespace=qos-example
Створення Podʼа, якому призначено клас QoS BestEffort
Для того, щоб Podʼу був призначений клас QoS BestEffort
, контейнери у Podʼі не повинні мати жодних лімітів або запитів памʼяті чи CPU.
Нижче подано маніфест для Podʼа з одним контейнером. контейнер не має лімітів або запитів памʼяті чи CPU:
apiVersion: v1
kind: Pod
metadata:
name: qos-demo-3
namespace: qos-example
spec:
containers:
- name: qos-demo-3-ctr
image: nginx
Створіть Pod:
kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod-3.yaml --namespace=qos-example
Перегляньте докладну інформацію про Pod:
kubectl get pod qos-demo-3 --namespace=qos-example --output=yaml
Вивід показує, що Kubernetes призначив Podʼа клас QoS BestEffort:
spec:
containers:
...
resources: {}
...
status:
qosClass: BestEffort
Очищення
Видаліть свій Pod:
kubectl delete pod qos-demo-3 --namespace=qos-example
Створення Podʼа з двома контейнерами
Нижче подано маніфест для Podʼа з двома контейнерами. Один контейнер вказує запит памʼяті 200 MiB. Інший контейнер не вказує жодних запитів або лімітів.
apiVersion: v1
kind: Pod
metadata:
name: qos-demo-4
namespace: qos-example
spec:
containers:
- name: qos-demo-4-ctr-1
image: nginx
resources:
requests:
memory: "200Mi"
- name: qos-demo-4-ctr-2
image: redis
Зверніть увагу, що цей Pod відповідає критеріям класу QoS Burstable
. Тобто, він не відповідає критеріям для класу QoS Guaranteed
, і один з його контейнерів має запит памʼяті.
Створіть Pod:
kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod-4.yaml --namespace=qos-example
Перегляньте докладну інформацію про Pod:
kubectl get pod qos-demo-4 --namespace=qos-example --output=yaml
Вивід показує, що Kubernetes призначив Podʼу клас QoS Burstable
:
spec:
containers:
...
name: qos-demo-4-ctr-1
resources:
requests:
memory: 200Mi
...
name: qos-demo-4-ctr-2
resources: {}
...
status:
qosClass: Burstable
Отримання класу QoS Podʼа
Замість того, щоб бачити всі поля, ви можете переглянути лише поле, яке вам потрібно:
kubectl --namespace=qos-example get pod qos-demo-4 -o jsonpath='{ .status.qosClass}{"\n"}'
Burstable
Очищення
Видаліть ваш простір імен:
kubectl delete namespace qos-example