zoukankan      html  css  js  c++  java
  • kubernetes之配置namespace中CPU最大最小值约束

    简介

    此文档讲述在namaspace中,将正在运行的容器配置最小使用CPU及最大使用内存CPU。在LimitRange对象中设置最小和对大CPU值约束后,如果Pod不满足约束条件,Pod不会被创建。

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

    指定namespace中最大CPU和最小CPU值

    创建namespace

    # kubectl create namespace constraints-cpu-example
    

    创建LimitRange对象,文件名:cpu-constraints.yaml

    apiVersion: v1
    kind: LimitRange
    metadata:
      name: cpu-min-max-demo-lr
    spec:
      limits:
      - max:
          cpu: "800m"
        min:
          cpu: "200m"
        type: Container
    
    # kubectl apply -f /root/k8s-example/namespace/cpu-constraints.yaml --namespace=constraints-cpu-example
    

    查看LimitRange详情

    # kubectl get limitrange cpu-min-max-demo-lr --output=yaml --namespace=constraints-cpu-example
    

    从结果可以看出,容器的默认CPU请求数是800m,默认限制数200m;最小CPU值为200m,最大CPU值为800m

    limits:
    - default:
        cpu: 800m
      defaultRequest:
        cpu: 800m
      max:
        cpu: 800m
      min:
        cpu: 200m
      type: Container
    

    constraints-cpu-examplenamespace中,只要容器被创建,kubernetes将会执行如下步骤:

    • 检查容器是否有自定义的CPU请求数和限制数,如果没有,将使用默认的CPU请求数和限制数
    • 确认容器自定义的CPU请求数是否大于或等于200m
    • 确认容器自定义的CPU限制数是否小于或等于800m

    如果超过或小于约束条件,容器不会被创建。

    定义容器CPU请求数、限制数在约束条件内的容器

    创建Pod,配置容器的CPU限制数为800m,请求数为:500m。文件名cpu-constraints-pod.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: constraints-cpu-demo
    spec:
      containers:
      - name: constraints-cpu-demo-ctr
        image: nginx
        resources:
          limits:
            cpu: "800m"
          requests:
            cpu: "500m"
    

    创建Pod

    # kubectl apply -f /root/k8s-example/namespace/cpu-constraints-pod.yaml --namespace=constraints-cpu-example
    

    确认Pod正在运行:

    # kubectl apply -f /root/k8s-example/namespace/cpu-constraints-pod.yaml --namespace=constraints-cpu-example
    

    查看Pod资源信息

    # kubectl get pod constraints-cpu-demo --output=yaml --namespace=constraints-cpu-example
    

    从结果可以看出CPU限制数为800m,请求数为:500m

    resources:
      limits:
        cpu: 800m
      requests:
        cpu: 500m
    

    删除Pod

    # kubectl delete pod constraints-cpu-demo --namespace=constraints-cpu-example
    

    定义Pod的CPU限制数大于约束条件最大CPU值的容器

    创建Pod,文件名:cpu-constraints-pod-2.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: constraints-cpu-demo-2
    spec:
      containers:
      - name: constraints-cpu-demo-2-ctr
        image: nginx
        resources:
          limits:
            cpu: "1.5"
          requests:
            cpu: "500m"
    
    # kubectl apply -f /root/k8s-example/namespace/cpu-constraints-pod-2.yaml --namespace=constraints-cpu-example
    

    输出结果如下,Pod创建失败

    Error from server (Forbidden): error when creating "/root/k8s-example/namespace/cpu-constraints-pod-2.yaml": pods "constraints-cpu-demo-2" is forbidden: maximum cpu usage per Container is 800m, but limit is 1500m
    

    定义Pod的CPU请求数小于约束条件最小CPU值的容器

    创建Pod,文件名:cpu-constraints-pod-3.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: constraints-cpu-demo-3
    spec:
      containers:
      - name: constraints-cpu-demo-3-ctr
        image: nginx
        resources:
          limits:
            cpu: "800m"
          requests:
            cpu: "100m"
    
    # kubectl apply -f /root/k8s-example/namespace/cpu-constraints-pod-3.yaml --namespace=constraints-cpu-example
    

    输出结果如下,容器创建失败。

    Error from server (Forbidden): error when creating "/root/k8s-example/namespace/cpu-constraints-pod-3.yaml": pods "constraints-cpu-demo-3" is forbidden: minimum cpu usage per Container is 200m, but request is 100m
    

    创建Pod不指定CPU请求数和内存限制数

    创建Pod,文件名为:cpu-constraints-pod-4.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: constraints-cpu-demo-4
    spec:
      containers:
      - name: constraints-cpu-demo-4-ctr
        image: vish/stress
    
    # kubectl apply -f /root/k8s-example/namespace/cpu-constraints-pod-4.yaml --namespace=constraints-cpu-example
    

    查看Pod资源信息

    kubectl get pod constraints-cpu-demo-4 --namespace=constraints-cpu-example --output=yaml
    

    从结果可以看出,不指定Pod的CPU请求数和限制数,将会使用默认的CPU请求数和限制数

    resources:
      limits:
        cpu: 800m
      requests:
        cpu: 800m
    

    从上可以看出,自定义CPU资源的Pod可能能正常运行,可能不能运行。如果kubernetes集群中,每个node节点的只有1个CPU,则任何节点上可能没有足够的可分配CPU来容纳800m的请求,如果每个node节点的CPU恰好有2个CPU,则有足够的CPU容纳800m的CPU请求。

    删除Pod

    # kubectl delete pod constraints-cpu-demo-4 --namespace=constraints-cpu-example
    

    实验完毕,删除namespace

    # kubectl delete namespace constraints-cpu-example
    

    总结

    1、在namespace中,可设置CPU的最大最小值约束条件,不满足约束条件的任何Pod将不会被创建。

    2、namespace中通过LimitRange创建的最大最小CPU约束条件只对即将被创建的容器将要更新的容器生效。如果改变了LimitRange中的约束条件,不会影响已经创建的Pod。

    3、使用最大最小CPU约束条件的情况如下:

    • 如果集群中每个node节点只有2个CPU,不想让Pod的CPU请求数大于2个CPU,因为集群中任何一个node都无法支持CPU请求数超过2个CPU的Pod。
    • 如果生产环境和开发环境共用一个k8s 集群,而且想要生产环境工作负载消耗的内存多达3个CPU,开发环境工作负载消耗的内存限制在1个CPU,可以创建两个不同的namespace,例如production和development,给每个namespace创建一个内存约束条件。
  • 相关阅读:
    向量的内积和外积
    软件姿态解算
    PLC与外接按钮开关接线方法图解
    关于三极管处于临界饱和状态的分析
    C语言中的volatile——让我保持原样
    C语言异或运算在程序设计中的妙用
    各种转PDF
    javax.mail发送邮件功能
    MySQL总结
    idea永久破解
  • 原文地址:https://www.cnblogs.com/mcsiberiawolf/p/12214486.html
Copyright © 2011-2022 走看看