zoukankan      html  css  js  c++  java
  • kubernetes之配置Pod的QoS

    简介

    此文讲述如何配置Pod的QoS(Quality of Service)即服务质量。Kubernetes使用QoS类来做出有关调度和驱逐Pod的决策。

    备注:此文档参考官方文档,并加以自己的理解。如有误导性的内容,请批评指正。

    QoS类

    当Kubernetes创建Pod时,它将为这些Pod分配以下QoS类之一:

    • Guaranteed
    • Burstable
    • BestEffort

    创建一个分配了QoS类Guaranteed的Pod

    创建namespace

    # kubectl create namespace qos-example
    

    为Pod提供QoS类为Guaranteed的条件:

    • Pod中的每个容器必须有内存请求和内存限制,而且它们的值必须相同
    • Pod中的每个容器必须有CPU请求和CPU限制,而且它们的值必须相同

    创建一个Pod,该Pod中只有一个容器。该容器中自定义了内存请求和内寸限制,均等于200MiB,CPU请求和CPU限制均等于 700 milli CPU。文件名:qos-pod.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: qos-demo
      namespace: qos-example
    spec:
      containers:
      - name: qos-demo-ctr
        image: nginx
        resources:
          limits:
            memory: "200Mi"
            cpu: "700m"
          requests:
            memory: "200Mi"
            cpu: "700m"
    
    # kubectl apply -f /root/k8s-example/pods/qos-pod.yaml --namespace=qos-example
    

    查看Pod资源详情

    # kubectl get pod qos-demo --namespace=qos-example --output=yaml
    

    从输出结果看出,Kubernetes为Pod提供了QoS类的Guaranteed。输出还验证Pod容器的内存请求与其内存限制相匹配,并且其CPU请求与其CPU限制相匹配。

    spec:
      containers:
        ...
        resources:
          limits:
            cpu: 700m
            memory: 200Mi
          requests:
            cpu: 700m
            memory: 200Mi
    ...
      qosClass: Guaranteed
    

    备注:如果容器自定义了自己的内存限制,但是没有定义内存请求,Kubernetes自动将默认的内存限制数设置为改容器的内存请求数;如果容器自定义了CPU限制,但是没有定义CPU请求,Kubernetes自动将默认的CPU限制数设置为该容器的CPU请求数。

    删除改Pod

    # kubectl delete pod qos-demo --namespace=qos-example
    

    创建一个分配了QoS级Burstable的Pod

    如果满足以下条件,则为Pod提供burstable的QoS类:

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

    创建一个Pod,该Pod中只有一个容器,容器的内存限制数为200 MiB,内存请求数为100 MiB。文件名:qos-pod-2.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: qos-demo-2
      namespace: qos-example
    spec:
      containers:
      - name: qos-demo-2-ctr
        image: nginx
        resources:
          limits:
            memory: "200Mi"
          requests:
            memory: "100Mi"
    
    # kubectl apply -f /root/k8s-example/pods/qos-pod-2.yaml --namespace=qos-example
    

    查看Pod资源详情

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

    输出显示Kubernetes为Pod提供了burstable的QoS类

    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: qos-demo-2-ctr
        resources:
          limits:
            memory: 200Mi
          requests:
            memory: 100Mi
    ...
      qosClass: Burstable
    

    删除Pod

    # kubectl delete pod qos-demo-2 --namespace=qos-example
    

    创建一个分配了BestEffort QoS类的Pod

    为了使Pod获得BestEffort的QoS类,Pod中的容器不得具有任何内存或CPU限制或请求。

    创建一个Pod,Pod中只有一个容器。容器没有内存或CPU限制和请求

    apiVersion: v1
    kind: Pod
    metadata:
      name: qos-demo-3
      namespace: qos-example
    spec:
      containers:
      - name: qos-demo-3-ctr
        image: nginx
    
    # kubectl apply -f /root/k8s-example/pods/qos-pod-3.yaml --namespace=qos-example  
    

    查看Pod资源详情

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

    输出显示Kubernetes为Pod提供了BestEffort的QoS类。

    spec:
      containers:
        ...
        resources: {}
      ...
      qosClass: BestEffort
    

    删除Pod

    # kubectl delete pod qos-demo-3 --namespace=qos-example
    

    在一个Pod中创建两个容器

    创建包含两个容器的Pod。一个容器自定义内存请求 200 MiB。另一个容器不定义资源任何请求或限制。文件名:qos-pod-4.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: qos-demo-4
      namespace: qos-example
    spec:
      containers:
    
      - name: qos-demo-4-ctr-1
        image: nginx
        resources:
          requests:
            memory: "200Mi"
    
      - name: qos-demo-4-ctr-2
        image: redis
    
    # kubectl apply -f /root/k8s-example/pods/qos-pod-4.yaml --namespace=qos-example
    

    查看Pod资源详情

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

    注意,此Pod符合QoS类别Burstable的标准。也就是说,它不符合Guaranteed的QoS类别的标准,并且其“容器”之一具有内存请求。

    spec:
      containers:
        ...
        name: qos-demo-4-ctr-1
        resources:
          requests:
            memory: 200Mi
        ...
        name: qos-demo-4-ctr-2
        resources: {}
        ...
      qosClass: Burstable
    

    删除Pod

    # kubectl delete pod qos-demo-4 --namespace=qos-example
    

    删除namespace

    # kubectl delete namespace qos-example
    

    总结

    1、Pod的QoS类有三种GuaranteedBurstableBestEffort

    2、为Pod提供QoS类为Guaranteed的条件:

    • Pod中的每个容器必须有内存请求和内存限制,而且它们的值必须相同
    • Pod中的每个容器必须有CPU请求和CPU限制,而且它们的值必须相同

    3、为Pod提供burstable的QoS类的条件:

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

    4、为Pod提供BestEffort的QoS类的条件:Pod中的容器不得具有任何内存或CPU限制或请求。

  • 相关阅读:
    众包实验:《分享上海》出书计划
    程序员笔试题(附答案)
    "客户管理系统"终于开发完毕,在这快乐元宵节里深吸一口气(图)
    SOA 初步阅读理解
    大型网站性能优化的通用方法(转)
    读《恒源祥彪悍广告是如何出炉的》后学习到的
    Asp.net生成静态页面最简单方法(源码)
    综合实习报告 写了一下午 图图图。。。。全是图
    程序员笔试题 将人民币金额转换成大写的金额
    扬太集团的网站也做完了,写篇日记算做总结吧
  • 原文地址:https://www.cnblogs.com/mcsiberiawolf/p/12214554.html
Copyright © 2011-2022 走看看