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、容器可以自定义自身的内存资源请求数和内存最大限制数:

  • 如果容器定义的内存最大限制数大于默认的内存最大限制数,则容器的内存最大限制数为自定义的值,此时,容器内存资源请求数也将等于容器自定义的内存最大限制数
  • 如果容器定义的内存请求数小于默认的内存请求数,则容器的内存请求数等于自定义的值,此时,容器内存最大限制数等于默认的容器最大限制数
posted @ 2020-01-19 16:11  McSiberiaWolf  阅读(1488)  评论(0编辑  收藏  举报