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

    简介

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

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

    指定namespace中最大内存和最小内存值

    创建namespace

    # kubectl create namespace constraints-mem-example
    

    创建Pod资源设置最大内存为1Gi,最小内存为500Mi。文件名:memory-constraints.yaml

    apiVersion: v1
    kind: LimitRange
    metadata:
      name: mem-min-max-demo-lr
    spec:
      limits:
      - max:
          memory: 1Gi
        min:
          memory: 500Mi
        type: Container
    

    创建 LimitRange对象

    # kubectl apply -f memory-constraints.yaml --namespace=constraints-mem-example
    

    查看LimitRange资源详情

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

    从输出中可以看出,默认内存请求数为1Gi、内存限制数1Gi、内存最小值为500Mi,内存最大值为1Gi

      limits:
      - default:
          memory: 1Gi
        defaultRequest:
          memory: 1Gi
        max:
          memory: 1Gi
        min:
          memory: 500Mi
        type: Container
    

    只要在创建的constraints-mem-examplenamespace中创建的容器,Kubernetes执行步骤如下:

    • 如果容器没有自定义自己的内存请求数和限制数,将会使用默认值
    • 确认容器的内存请求数是否大于或等于默认值500Mi
    • 确认容器的内存限制数是否小于或等于默认值1Gi

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

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

    创建一个Pod,设置内存请求数为800Mi,限制数为800Mi。文件名:memory-constraints-pod.yaml

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

    查看Pod状态,确认Pod正在运行

    # kubectl get pod constraints-mem-demo --namespace=constraints-mem-example
    

    查看Pod资源信息

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

    从输出结果可以看出,Pod的内存请求数为800Mi,限制数为600Mi

    resources:
      limits:
         memory: 800Mi
      requests:
        memory: 600Mi
    

    删除该Pod资源

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

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

    创建一个Pod,设置内存限制数为1.5Gi,内存请求数为800Mi。文件名为:memory-constraints-pod-2.yaml

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

    输出结果为:

    Error from server (Forbidden): error when creating "/root/k8s-example/namespace/memory-constraints-pod-2.yaml": pods "constraints-mem-demo-2" is forbidden: maximum memory usage per Container is 1Gi, but limit is 1536Mi
    

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

    创建一个Pod,设置内存限制数为800Mi,内存请求数为100Mi。文件名为:memory-constraints-pod-3.yaml

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

    输出结果为:

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

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

    创建Pod资源,文件名:memory-constraints-pod-4.yaml

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

    查看Pod资源信息

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

    从输出可以看出,由于容器没有指定内存请求数和限制数,因此,将会设置为LimitRange对象中定义的资源默认值

    resources:
      limits:
        memory: 1Gi
      requests:
        memory: 1Gi
    

    删除pod资源

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

    实验完毕,删除namespace

    # kubectl delete namespace constraints-mem-example
    

    总结

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

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

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

    • k8s集群中,如果每个node的内存只有2GB,不能接受任何内存资源请求超过2GB的Pod被创建,可以设置约束条件
    • 如果生产环境和开发环境共用一个k8s
      集群,而且想要生产环境工作负载消耗的内存多达8GB,开发环境工作负载消耗的内存限制在512MB,可以创建两个不同的namespace,例如productiondevelopment,给每个namespace创建一个内存约束条件。
  • 相关阅读:
    记录软件工程课程项目开发时遇到的各种小问题(django)
    用python实现逻辑回归
    利用KD树进行异常检测
    PyQt4入门学习笔记(五)
    PyQt4入门学习笔记(四)
    import matplolib 时出现"This probably means that tk wasn't installed properly."的解决方法
    IDEA上安装和使用checkstyle,findbugs,visualVM,PMD插件
    pycharm连接mysql数据库
    基于trie树做一个ac自动机
    用python实现最长公共子序列算法(找到所有最长公共子串)
  • 原文地址:https://www.cnblogs.com/mcsiberiawolf/p/12214481.html
Copyright © 2011-2022 走看看