zoukankan      html  css  js  c++  java
  • Kubernetes之配置namespace的默认内存请求和限制

    简介

    在Kubernetes中通过namespace隔离资源,也可以对每个namespace中的新创建的pod设置默认的内存资源请求数和最大限制数,此时,在pod中资源对象中就不用配置内存资源了,内存资源等于默认值

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

    指定namespace中创建的pod配置默认的内存请求大小和内存最大限额

    创建一个namespace

    # kubectl create namespace default-mem-example
    

    创建一个名为memory-defaults.yml的配置文件,以下配置文件中给出了一个LimitRange对象文件,配置中定义了内存请求大小及内存的最大限额。

    apiVersion: v1
    kind: LimitRange
    metadata:
      name: mem-limit-range
    spec:
      limits:
      - default:
          memory: 512Mi
        defaultRequest:
          memory: 256Mi
        type: Container
    

    创建资源,限制namespace为default-mem-example的资源使用率

    # kubectl apply -f /root/k8s-example/namespace/memory-defaults.yml --namespace=default-mem-example
    

    如果上面的配置已创建,那么在default-mem-example的namespace中创建的新的p容器不需要指定内存的请求数和限制数,容器中默认的内存请求数为256Mi,内存限制数为512Mi

    例如:创建只有一个容器的pod,文件名memory-defaults-pod.yaml

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

    查看该Pod的资源详情,如下:

    kubectl get pod default-mem-demo --output=yaml --namespace=default-mem-example
    

    从输出的结果中,可以看到如下信息,该pod默认请求的内存资源是256Mi最大请求的内存资源是512Mi

    containers:
    - image: nginx
      imagePullPolicy: Always
      name: default-mem-demo-ctr
      resources:
        limits:
          memory: 512Mi
        requests:
          memory: 256Mi
    

    删除Pod资源

    # kubectl delete pod default-mem-example --namespace=default-mem-example
    

    定义容器的限制数且限制数大于默认容器限制数,不定义请求数

    创建只用一个容器的pod,文件名:memory-defaults-pod-2.yaml

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

    查看该pod资源详情

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

    我们一开始设置的default-mem-example命名空间内存请求数为256Mi,内存最大限制为512Mi。从default-mem-demo-2容器中的输出的结果可以看出,当default-mem-demo-2容器的内存资源限制数1Gi大于默认限制数512Mi时,以容器自定义的资源限制数为准,且资源请求数等于自定义的最大资源限制数。

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

    定义容器请求数,且容器请求数小于默认容器请求数,不定义限制数

    创建只包含一个容器的pod,文件名:memory-defaults-pod-3.yaml

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

    查看输出结果

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

    从结果中可以看出,当容器自定义的请求数小于默认请求数时,以容器自定义个资源请求数作为准。

    resources:
      limits:
        memory: 512Mi
      requests:
        memory: 128Mi
    

    实验完毕,删除命名空间

    # kubectl delete namespace default-mem-example
    

    总结

    1、指定命名空间可以设置容器默认的内存资源请求数(memory requests)和最大限制数(memory limits)

    2、容器可以自定义自身的内存资源请求数和内存最大限制数:

    • 如果容器定义的内存最大限制数大于默认的内存最大限制数,则容器的内存最大限制数为自定义的值,此时,容器内存资源请求数也将等于容器自定义的内存最大限制数
    • 如果容器定义的内存请求数小于默认的内存请求数,则容器的内存请求数等于自定义的值,此时,容器内存最大限制数等于默认的容器最大限制数
  • 相关阅读:
    Java异常之初认识二
    Java异常之初认识
    enum类型用于switch语句
    数组指定元素查找 之 二分法查找
    数组元素查找 之 线性查找
    数组的反转
    枚举类 Enum 之初认识
    求数组元素的最大值,最小值,总和,平均数
    clone()方法引发的对protected权限修饰符的思考
    完成一个朋友圈的表设计
  • 原文地址:https://www.cnblogs.com/mcsiberiawolf/p/12214361.html
Copyright © 2011-2022 走看看