简介
在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、容器可以自定义自身的内存资源请求数和内存最大限制数:
- 如果容器定义的
内存最大限制数大于默认的内存最大限制数
,则容器的内存最大限制数为自定义的值
,此时,容器内存资源请求数也将等于容器自定义的内存最大限制数
。 - 如果容器定义的
内存请求数小于默认的内存请求数
,则容器的内存请求数等于自定义的值
,此时,容器内存最大限制数等于默认的容器最大限制数
。