是否有任何方法可以为给定命名空间中的所有节点设置默认服务质量?或者只是在名称空间级别而不是Pod级别上设置QoS。 我的意思是,每个现有的和每个新创建的Pod都将具有给定名称空间的默认设置。
例如。命名空间kube-system
或super-important
中的所有Pod已获得“保证”的QoS级别。
我想以这样一种方式设置QoS:万一kube-system
(或其他重要的组/名称空间)中的资源窗格出现问题时,它们的删除时间要晚于次要的删除时间。
P.S。我收到了有关准入控制器的建议,但没有看到与QoS的关联。
答案 0 :(得分:1)
有可能。有关QoS的一些基本信息:
Kubernetes使用QoS类来做出有关调度和 驱逐豆荚。
要为Pod提供QoS等级的保证:
- Pod中的每个容器必须有一个内存限制和一个内存 要求,并且它们必须相同。
- 豆荚中的每个容器必须 有CPU限制和CPU请求,并且它们必须相同。
如果满足以下条件,则为Pod提供burstable的QoS类:
- 该Pod不符合QoS类保证的标准。至少 Pod中的一个容器有一个内存或CPU请求。
要为Pod提供BestEffort的QoS类:
- 容器中的容器不得具有任何内存或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,请参阅文档的此部分:
您可以在本文中找到有关配置名称空间默认限制的更多详细信息: