配置 Pod 的服务质量

    你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 如果你还没有集群,你可以通过 构建一 个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

    要获知版本信息,请输入 .

    QoS 类

    Kubernetes 创建 Pod 时就给它指定了下列一种 QoS 类:

    • Guaranteed
    • Burstable
    • BestEffort

    创建命名空间

    创建一个命名空间,以便将本练习所创建的资源与集群的其余资源相隔离。

    对于 QoS 类为 Guaranteed 的 Pod:

    • Pod 中的每个容器,包含初始化容器,必须指定内存请求和内存限制,并且两者要相等。
    • Pod 中的每个容器,包含初始化容器,必须指定 CPU 请求和 CPU 限制,并且两者要相等。

    下面是包含一个容器的 Pod 配置文件。 容器设置了内存请求和内存限制,值都是 200 MiB。 容器设置了 CPU 请求和 CPU 限制,值都是 700 milliCPU:

    pods/qos/qos-pod.yaml

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: qos-demo
    5. namespace: qos-example
    6. spec:
    7. containers:
    8. - name: qos-demo-ctr
    9. image: nginx
    10. resources:
    11. limits:
    12. memory: "200Mi"
    13. cpu: "700m"
    14. requests:
    15. memory: "200Mi"
    16. cpu: "700m"

    创建 Pod:

    1. kubectl create -f https://k8s.io/examples/pods/qos/qos-pod.yaml --namespace=qos-example

    查看 Pod 详情:

    1. kubectl get pod qos-demo --namespace=qos-example --output=yaml

    结果表明 Kubernetes 为 Pod 配置的 QoS 类为 Guaranteed。 结果也确认了 Pod 容器设置了与内存限制匹配的内存请求,设置了与 CPU 限制匹配的 CPU 请求。

    1. spec:
    2. containers:
    3. ...
    4. resources:
    5. limits:
    6. cpu: 700m
    7. memory: 200Mi
    8. requests:
    9. memory: 200Mi
    10. ...
    11. status:
    12. qosClass: Guaranteed

    删除 Pod:

    1. kubectl delete pod qos-demo --namespace=qos-example

    创建一个 QoS 类为 Burstable 的 Pod

    如果满足下面条件,将会指定 Pod 的 QoS 类为 Burstable:

    • Pod 不符合 Guaranteed QoS 类的标准。
    • Pod 中至少一个容器具有内存或 CPU 请求。

    下面是包含一个容器的 Pod 配置文件。 容器设置了内存限制 200 MiB 和内存请求 100 MiB。

    1. apiVersion: v1
    2. metadata:
    3. name: qos-demo-2
    4. namespace: qos-example
    5. spec:
    6. containers:
    7. - name: qos-demo-2-ctr
    8. image: nginx
    9. resources:
    10. limits:
    11. memory: "200Mi"
    12. requests:
    13. memory: "100Mi"

    创建 Pod:

    查看 Pod 详情:

    1. kubectl get pod qos-demo-2 --namespace=qos-example --output=yaml

    结果表明 Kubernetes 为 Pod 配置的 QoS 类为 Burstable。

    1. spec:
    2. containers:
    3. - image: nginx
    4. imagePullPolicy: Always
    5. name: qos-demo-2-ctr
    6. resources:
    7. limits:
    8. memory: 200Mi
    9. requests:
    10. memory: 100Mi
    11. ...
    12. status:
    13. qosClass: Burstable

    删除 Pod:

    1. kubectl delete pod qos-demo-2 --namespace=qos-example

    创建一个 QoS 类为 BestEffort 的 Pod

    对于 QoS 类为 BestEffort 的 Pod,Pod 中的容器必须没有设置内存和 CPU 限制或请求。

    下面是包含一个容器的 Pod 配置文件。 容器没有设置内存和 CPU 限制或请求。

    配置 Pod 的服务质量 - 图1

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: qos-demo-3
    5. namespace: qos-example
    6. spec:
    7. containers:

    创建 Pod:

    1. kubectl create -f https://k8s.io/examples/pods/qos/qos-pod-3.yaml --namespace=qos-example

    查看 Pod 详情:

    1. kubectl get pod qos-demo-3 --namespace=qos-example --output=yaml

    结果表明 Kubernetes 为 Pod 配置的 QoS 类为 BestEffort。

    删除 Pod:

    1. kubectl delete pod qos-demo-3 --namespace=qos-example

    下面是包含两个容器的 Pod 配置文件。 一个容器指定了内存请求 200 MiB。 另外一个容器没有指定任何请求和限制。

    pods/qos/qos-pod-4.yaml

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: qos-demo-4
    5. namespace: qos-example
    6. spec:
    7. containers:
    8. - name: qos-demo-4-ctr-1
    9. image: nginx
    10. resources:
    11. requests:
    12. memory: "200Mi"
    13. - name: qos-demo-4-ctr-2
    14. image: redis

    注意此 Pod 满足 Burstable QoS 类的标准。 也就是说它不满足 Guaranteed QoS 类标准,因为它的一个容器设有内存请求。

    1. kubectl create -f https://k8s.io/examples/pods/qos/qos-pod-4.yaml --namespace=qos-example

    查看 Pod 详情:

    1. kubectl get pod qos-demo-4 --namespace=qos-example --output=yaml

    结果表明 Kubernetes 为 Pod 配置的 QoS 类为 Burstable:

    1. spec:
    2. containers:
    3. ...
    4. name: qos-demo-4-ctr-1
    5. resources:
    6. requests:
    7. memory: 200Mi
    8. ...
    9. name: qos-demo-4-ctr-2
    10. resources: {}
    11. ...
    12. status:

    删除 Pod:

    1. kubectl delete pod qos-demo-4 --namespace=qos-example

    环境清理

    删除命名空间:

    接下来

    集群管理员参考