此文档讲述在namaspace中,将正在运行的容器配置最小使用内存及最大使用内存内存。在LimitRange对象中设置最小和对大内存值约束后,如果Pod不满足约束条件,Pod不会被创建。
备注:此文档参考官方文档,并加以自己的理解。如有误导性的内容,请批评指正。
创建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执行步骤如下:
500Mi1Gi如果超过或小于约束条件,容器不会被创建。
创建一个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,设置内存限制数为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,设置内存限制数为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资源,文件名: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、使用最大最小内存约束条件的情况如下:
production和development,给每个namespace创建一个内存约束条件。kubernetes之配置namespace中内存最大最小值约束
原文:https://www.cnblogs.com/mcsiberiawolf/p/12214481.html