[英]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.