[英]Kubernetes default QoS for whole namespace
是否有任何方法可以為給定命名空間中的所有節點設置默認QoS? 或者只是在命名空間級別而不是 pod 級別設置 QoS。 我的意思是每個現有和每個新創建的 pod 都將具有給定命名空間的默認設置的情況。
例如。 命名空間kube-system
或super-important
所有 pod 都獲得了“保證”的 QoS 級別。
我想以這樣的方式設置 QoS,如果kube-system
(或其他重要的組/命名空間)的資源 pod 出現任何問題,它們會被最后刪除,晚於不太重要的。
PS 我得到了關於准入控制器的建議,但我沒有看到與 QoS 的相關性。
這是可能的。 關於QoS的一些基本信息:
Kubernetes 使用 QoS 類來決定調度和驅逐 Pod。
要為 Pod 提供保證的 QoS 等級:
- Pod 中的每個 Container 都必須有內存限制和內存請求,並且它們必須相同。
- Pod 中的每個 Container 都必須有 CPU 限制和 CPU 請求,並且它們必須相同。
如果滿足以下條件,Pod 將被賦予 Burstable QoS 等級:
- Pod 不符合 QoS 等級保證的標准。 Pod 中至少有一個 Container 有內存或 CPU 請求。
要為 Pod 提供 BestEffort 的 QoS 等級:
- Pod 中的容器不得有任何內存或 CPU 限制或請求。
以下是如何為命名空間 qos-test 中的所有 pod 設置保證 QoS 的示例。
讓我們創建一個命名空間 qos-test:
$ kubectl create namespace qos-test
接下來,讓我們創建一個 LimitRange 對象 YAML 文件(CPU 和內存應該存在,限制和請求應該相同):
$ 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-test 中:
$ kubectl create -f limitRange.yaml --namespace=qos-test
現在,讓我們創建一個 Pod(Pod 規范中不得存在 CPU 或內存請求和限制):
$ 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 的 pod,請參閱文檔的這一部分:
您可以在本文中找到有關為命名空間配置默認限制的更多詳細信息:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.