Kubernetes整个命名空间的默认QoS

时间:2018-08-23 12:52:38

标签: kubernetes qos

是否有任何方法可以为给定命名空间中的所有节点设置默认服务质量?或者只是在名称空间级别而不是Pod级别上设置QoS。 我的意思是,每个现有的和每个新创建的Pod都将具有给定名称空间的默认设置。

例如。命名空间kube-systemsuper-important中的所有Pod已获得“保证”的QoS级别。

我想以这样一种方式设置QoS:万一kube-system(或其他重要的组/名称空间)中的资源窗格出现问题时,它们的删除时间要晚于次要的删除时间。

P.S。我收到了有关准入控制器的建议,但没有看到与QoS的关联。

1 个答案:

答案 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,请参阅文档的此部分:

您可以在本文中找到有关配置名称空间默认限制的更多详细信息: