• kubenetes之配置pod的QoS


    系列目录

    上节提到过,QoS影响pod的调度和驱离,本节讲解如何通过配置pod来使它自动被赋予一个QoS

    实际上是pod的配置达到一定标准,则kubernetes会自动为其它添加一个QoS类

    QoS类型

    当一个pod被创建,kubernetes会赋予它们以下类型的值之一

    • Guaranteed

    • Burstable

    • BestEffor

    并且上一节我们讲过,从上到下,他们的质量依次降低.

    创建示例名称空间

    kubectl create namespace qos-example
    

    创建一个会被赋予Guaranteed类型QoS的pod

    满足以下条件的pod将会被赋予GuaranteedQoS类型

    • pod中每个容器都必须包含内存请求和限制,并且值相等

    • pod中每个容器都必须包含cpu请求和限制,并且值相等

    下面是一个pod中的container的配置.它包含内存请求和限制,并且值都等于200M;都包含cpu请求和限制,值都是700milliCPU

    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 https://k8s.io/examples/pods/qos/qos-pod.yaml --namespace=qos-example
    

    我们来查看它的信息

    kubectl get pod qos-demo --namespace=qos-example --output=yaml
    
    spec:
      containers:
        ...
        resources:
          limits:
            cpu: 700m
            memory: 200Mi
          requests:
            cpu: 700m
            memory: 200Mi
    ...
      qosClass: Guaranteed
    

    输出信息显示kubernetes给它了一个Guaranteed类型的QoS.同时也验证了它的内存请求与限制相同,cpu请求与限制也相同.

    请注意,如果pod仅声明了内存限制,而没声明内存请求,则kubernetes会自动赋予它与限制相同的内存请求.对于cpu也是这样的.

    还要注意的是前面我们讲过LimitRange会自动赋予默认值,但是本篇我们并没有设置LimitRange,因此以上行为是kubernetes的默认行为,而非由LimitRange超作用.同时,即便设置了LimitRange,当仅设置了限制的时候,kubernetes也会自动将请求设置为与限制一样的值,而不是默认值.当然,当仅仅设置了请求而没设置限制,kubernetes在没有LimitRange的情况下为会有自动行为,当有LimitRange会自动设置为默认值.

    创建一个会被赋予BurstableQoS类型的pod

    当符合以下条件时,一个pod会被赋予Burstable类型的QoS

    • Pod不符合Guaranteed类型的QoS要求

    • pod至少设置了内存或者cpu请任一

    以下是配置文件

    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"
    

    创建pod

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

    查看它的信息

    kubectl get pod qos-demo-2 --namespace=qos-example --output=yaml
    
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: qos-demo-2-ctr
        resources:
          limits:
            memory: 200Mi
          requests:
            memory: 100Mi
    ...
      qosClass: Burstable
    

    输出信息显示kubernetes给它了一个Burstable类型的QoS

    创建一个会被赋予BestEffortQoS类型的pod

    一个pod即没有内存限制或请求也没有cpu限制或请求,则会被赋予BestEffort

    以上可以翻译为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 https://k8s.io/examples/pods/qos/qos-pod-3.yaml --namespace=qos-example
    

    查看信息

    kubectl get pod qos-demo-3 --namespace=qos-example --output=yaml
    
    spec:
      containers:
        ...
        resources: {}
      ...
      qosClass: BestEffort
    

    创建一个包含两个容器的pod

    以下配置的pod包含两个容器,其中一个声明了内存限制为200M.另一个则没有声明任何请求或者限制

    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
    

    创建后查看输出信息

    spec:
      containers:
        ...
        name: qos-demo-4-ctr-1
        resources:
          requests:
            memory: 200Mi
        ...
        name: qos-demo-4-ctr-2
        resources: {}
        ...
      qosClass: Burstable
    
  • 相关阅读:
    【原】ListView的BeginUpdate()和EndUpdate()的用处
    【原】Telerik radwindow 在IE10下偶尔报 unable to get value of the property 'toLowerCase' 的解决办法
    【原】从头学习设计模式(一)——单例模式
    【原】从头学习设计模式(二)——简单工厂模式
    【原】通过JS打开IE新tab(非Window)的解决方案
    【原】高效GTD云工具 ——高效管理你的时间
    【原】安装Win7和Ubuntu双系统后,Win7耳机无声音的解决办法
    【原】从头学习设计模式(三)——工厂方法模式
    【原】备忘:Oracle 中创建存储过程及调用测试一例
    【转】DBA的性格
  • 原文地址:https://www.cnblogs.com/tylerzhou/p/11043282.html
Copyright © 2020-2023  润新知