1. Введение
Kubernetes предоставляет два способа ограничения ресурсов:ResourceQuota
иLimitRange
.
вResourceQuota
направлен наnamespace
сделать ограничения ресурсов, в то время какLimitRange
направлен наnamespace
Ограничение ресурсов, которое делает каждый компонент.
Когда несколько пространств имен совместно используют один и тот же кластер, квота ресурсов, используемая пространством имен, может превышать его справедливую квоту, что приводит к занятию ресурсов других пространств имен. В настоящее время мы можем создать ResourceQuota для каждого пространства имен,
Когда пользователь создает ресурс в пространстве имен, система квот отслеживает использование, чтобы гарантировать, что ограничение ResourceQuota не превышено. Если создание или обновление ресурса нарушает ограничения квоты, код состояния HTTP приведет к сбою запроса с ошибкой 403 FORBIDDEN. Изменения квот на ресурсы не влияют на уже созданные модули.
Параметры запуска apiserver обычно включены по умолчанию в kubernetes.ResourceQuota
, в параметрах запуска аписервера–enable-admission-plugins=
в, если естьResourceQuota
начать.
2 использовать
Создайте тест с помощью NS
[~] kubectl create ns testquota
namespace/testquota created
[~] kubectl get ns | grep quota
testquota Active 3m41s
Создать ресурсную квоту
[yaml] cat resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: testquota-resources
namespace: testquota
spec:
hard:
pods: "4"
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
[yaml] kubectl apply -f resourcequota.yaml
resourcequota/testquota-resources created
[yaml] kubectl describe resourcequotas -n testquota testquota-resources
Name: testquota-resources
Namespace: testquota
Resource Used Hard
-------- ---- ----
limits.cpu 0 2
limits.memory 0 2Gi
pods 0 4
requests.cpu 0 1
requests.memory 0 1Gi
Создайте развертывание и ограничьте ресурсы
[yaml] cat quota-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: testquota
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
resources:
requests:
memory: "100Mi"
cpu: "100m"
limits:
memory: "200Mi"
cpu: "500m"
[yaml] kubectl apply -f quota-deploy.yaml
deployment.apps/nginx-deployment created
[yaml] kubectl get po -n testquota
NAME READY STATUS RESTARTS AGE
nginx-deployment-7c6bbc77d8-mfxnl 1/1 Running 0 9s
Измените количество реплик развертывания, чтобы общие используемые ресурсы превышали ресурсы, определенные в ResourceQuota.
Сначала проверьте текущее использование ресурсов
[yaml] kubectl describe resourcequotas -n testquota testquota-resources
Name: testquota-resources
Namespace: testquota
Resource Used Hard
-------- ---- ----
limits.cpu 500m 2
limits.memory 200Mi 2Gi
pods 1 4
requests.cpu 100m 1
requests.memory 100Mi 1Gi
Изменить количество копий
[yaml] kubectl scale deployment -n testquota nginx-deployment --replicas=4
deployment.apps/nginx-deployment scaled
[yaml] kubectl get po -n testquota
NAME READY STATUS RESTARTS AGE
nginx-deployment-7c6bbc77d8-5mbc6 1/1 Running 0 7s
nginx-deployment-7c6bbc77d8-ld69h 1/1 Running 0 7s
nginx-deployment-7c6bbc77d8-mfxnl 1/1 Running 0 5m18s
nginx-deployment-7c6bbc77d8-sdcxb 1/1 Running 0 7s
Текущее использование ресурсов
[yaml] kubectl describe resourcequotas -n testquota testquota-resources
Name: testquota-resources
Namespace: testquota
Resource Used Hard
-------- ---- ----
limits.cpu 2 2
limits.memory 800Mi 2Gi
pods 4 4
requests.cpu 400m 1
requests.memory 400Mi 1Gi
Создать другое развертывание
[yaml] kubectl apply -f quota-deploy-2.yaml
deployment.apps/nginx2-deployment created
[yaml] kubectl get deployment -n testquota
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 4/4 4 4 7m48s
nginx2-deployment 0/1 0 0 34s
Видно, что хотя развертывание было успешно создано, соответствующий pod не был создан.Вы можете просмотреть ошибку развертывания
[yaml] kubectl describe deployments -n testquota nginx2-deployment
Name: nginx2-deployment
Namespace: testquota
...
Replicas: 1 desired | 0 updated | 0 total | 0 available | 1 unavailable
NewReplicaSet: nginx2-deployment-7c6bbc77d8 (0/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 98s deployment-controller Scaled up replica set nginx2-deployment-7c6bbc77d8 to 1
Видно, что модуль не может быть создан, поскольку сумма созданных модулей превысила общий лимит ресурсов пространства имен.
3 распространенных типа ресурсов
Имя ресурса | описывать |
---|---|
limits.cpu | Сумма лимитов ЦП всех подов в пространстве имен. |
limits.memory | Сумма лимитов памяти |
requests.cpu | Сумма запросов процессора |
requests.memory | Сумма лимитов памяти |
requests.storage | Сумма значений хранения, запрошенных PVC |
persistentvolumeclaims | Количество ПВХ |
requests.ephemeral-storage | Сумма запросов локального временного хранилища |
limits.ephemeral-storage | Сумма лимита локального временного хранилища |