导读 | 如何配置命名空间的默认内存请求和限制。如果在具有默认内存限制的命名空间中创建Container,并且Container未指定其自己的内存限制,则会为Container分配默认内存限制。Kubernetes在某些条件下分配默认内存请求。 |
要检查版本,请输入kubectl version。
群集中的每个节点必须至少具有2 GiB的内存。
创建命名空间
创建命名空间,以便在此练习中创建的资源与群集的其余部分隔离。
kubectl create namespace default-mem-example
创建LimitRange和Pod
这是LimitRange对象的配置文件。配置指定默认内存请求和默认内存限制。
apiVersion: v1 kind: LimitRange metadata: name: mem-limit-range spec: limits: - default: memory: 512Mi defaultRequest: memory: 256Mi type: Container
在default-mem-example命名空间中创建LimitRange:
kubectl create -f https://**s.io/examples/*****/resource/memory-defaults.yaml --namespace=default-mem-example
现在,如果在default-mem-example命名空间中创建了Container,并且Container没有为内存请求和内存限制指定自己的值,则会向Container提供256 MiB的默认内存请求,默认内存限制为512 MiB 。
这是具有一个Container的Pod的配置文件。Container未指定内存请求和限制。
apiVersion: v1 kind: Pod metadata: name: default-mem-demo spec: containers: - name: default-mem-demo-ctr image: nginx
创建Pod
kubectl create -f https://**s.io/examples/*****/resource/memory-defaults-pod.yaml --namespace=default-mem-example
查看Pod的详细信息
kubectl get pod default-mem-demo --output=yaml --namespace=default-mem-example
输出显示Pod的Container具有256 MiB的内存请求和512 MiB的内存限制。这些是LimitRange指定的默认值。
containers: - image: nginx imagePullPolicy: Always name: default-mem-demo-ctr resources: limits: memory: 512Mi requests: memory: 256Mi
删除你的Pod
kubectl delete pod default-mem-demo --namespace=default-mem-example
如果指定Container的限制但不指定其请求,该怎么办?
这是具有一个Container的Pod的配置文件。Container指定内存限制,但不指定请求:
apiVersion: v1 kind: Pod metadata: name: default-mem-demo-2 spec: containers: - name: default-mem-demo-2-ctr image: nginx resources: limits: memory: "1Gi"
创建Pod
kubectl create -f https://**s.io/examples/*****/resource/memory-defaults-pod-2.yaml --namespace=default-mem-example
查看Pod的详细信息
kubectl get pod default-mem-demo-2 --output=yaml --namespace=default-mem-example
输出显示Container的内存请求设置为与其内存限制匹配。请注意,未向Container分配默认的内存请求值256Mi。
resources: limits: memory: 1Gi requests: memory: 1Gi
默认内存限制和请求的动机
如果您的命名空间具有资源配额,则为内存限制设置默认值会很有帮助。以下是资源配额对命名空间施加的两个限制:
在命名空间中运行的每个Container都必须具有自己的内存限制。
命名空间中所有Container使用的内存总量不得超过指定的限制。
如果Container未指定其自己的内存限制,则会为其指定默认限制,然后可以允许它在受配额限制的命名空间中运行。