Kubernetes 管理内存与CPU资源

涉及参考文档:

前提条件

  • Kubernetes 集群
  • 集群名称空间 mem-cpu
    在这里插入图片描述

测试总结小图
在这里插入图片描述

一、为命名空间配置默认内存请求和限制

简介: 命名空间中创建 Container,并且 Container 未指定自己的内存限制,则为 Container 分配默认内存限制。Kubernetes 在特定条件下分配默认内存请求。

1、书写yaml文件

vim memory-defaults-pod.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
  namespace: mem-cpu
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: default-mem-demo
  namespace: mem-cpu
spec:
  containers:
  - name: default-mem-demo-ctr
    image: nginx:latest
    imagePullPolicy: IfNotPresent

2、生成默认内存请求/限制Pod资源

kubectl apply -f memory-defaults-pod.yaml

3、查看详细信息

  • 查看对名称空间下Pod的默认内存请求/限制
kubectl  get   limitranges  -n mem-cpu  mem-limit-range  && kubectl  describe   limitranges -n mem-cpu  mem-limit-range

在这里插入图片描述
可以看到默认内存请求/限制分别为256Mi/512Mi, 接下来只需要查看Pod是否继承

  • 查看Pod的详细信息
kubectl  get   po -n mem-cpu  default-mem-demo  -o yaml |grep "    resources" -A4

在这里插入图片描述
可以看到Pod继承了设定名称空间下对Pod的默认内存请求/限制值。

4、设置指定一个容器的内存请求

vim  memory-defaults-requestspod.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
  namespace: mem-cpu
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: default-mem-demo
  namespace: mem-cpu
spec:
  containers:
  - name: default-mem-demo-ctr
    image: nginx
    resources:
      requests:
        memory: "128Mi"

重新更新资源,并且查看Pod的请求资源的值

kubectl  delete  -f memory-defaults-pod.yaml  &&  \
kubectl  apply -f memory-defaults-requestspod.yaml  &&  \
kubectl  get   po -n mem-cpu  default-mem-demo  -o yaml |grep "    resources" -A4 && \
kubectl  describe   limitranges  -n mem-cpu mem-limit-range

在这里插入图片描述
设置默认内存请求/限制Pod资源 可以修改请求资源的值

5、设置指定一个容器的内存限制

vim memory-defaults-limitspod.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
  namespace: mem-cpu
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: default-mem-demo
  namespace: mem-cpu
spec:
  containers:
  - name: default-mem-demo
    image: nginx
    resources:
      limits:
        memory: "1Gi"
kubectl  delete  -f memory-defaults-requestspod.yaml && \
kubectl  apply -f memory-defaults-limitspod.yaml  && \
kubectl  get   po -n mem-cpu  default-mem-demo  -o yaml |grep "    resources" -A4 && \
kubectl  describe   limitranges  -n mem-cpu mem-limit-range

在这里插入图片描述
设置默认内存请求/限制Pod资源 可以修改限制资源的值,其中Pod请求/限制设置值为最大值

总结:
不设置限制/请求继承默认值,
设置 限制超过默认值,请求和限制都为超过值
设置 请求小于默认值,请求为最小值但限制值依旧为默认限制值

二、为命名空间配置默认 CPU 请求和限制

简介: CPU 限制的命名空间中创建 Container,并且 Container 未指定自己的 CPU 限制,则为 Container 分配默认 CPU 限制

1、书写yaml文件

vim  cpu-defaults-pod.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
  namespace: mem-cpu
spec:
  limits:
  - default:
      cpu: 1
    defaultRequest:
      cpu: 0.5
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: default-cpu-demo
  namespace: mem-cpu
spec:
  containers:
  - name: default-cpu-demo-ctr
    image: nginx
    imagePullPolicy: IfNotPresent

2、生成默认CPU 请求/限制Pod资源

kubectl  apply -f  cpu-defaults-pod.yaml

3、查看详细信息

  • 查看对名称空间下Pod的默认CPU请求/限制
    在这里插入图片描述
    可以看到默认CPU 请求/限制分别为 0.5/1 , 接下来只需要查看Pod是否继承

  • 查看Pod的详细信息

kubectl  get   po -n mem-cpu  default-cpu-demo  -o yaml |grep "    resources" -A4

在这里插入图片描述
在这里插入图片描述
可以看到Pod继承了设定名称空间下对Pod的默认CPU 请求/限制值。

4、设置指定一个容器的CPU请求

vim  cpu-defaults-requestspod.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
  namespace: mem-cpu
spec:
  limits:
  - default:
      cpu: 1
    defaultRequest:
      cpu: 0.5
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: default-cpu-demo
  namespace: mem-cpu
spec:
  containers:
  - name: default-cpu-demo-ctr
    image: nginx
    resources:
      requests:
        cpu: "0.75"
    imagePullPolicy: IfNotPresent
kubectl delete -f cpu-defaults-pod.yaml  && \
kubectl apply  -f cpu-defaults-requestspod.yaml  && \
kubectl get pod -n mem-cpu default-cpu-demo  -o yaml |grep "    resources" -A4  && \
kubectl describe  limitranges -n mem-cpu  cpu-limit-range

在这里插入图片描述
设置默认CPU 请求/限制Pod资源 可以修改请求资源的值

5、设置指定一个容器的CPU限制

vim cpu-defaults-limitspod.yaml 
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
  namespace: mem-cpu
spec:
  limits:
  - default:
      cpu: 1
    defaultRequest:
      cpu: 0.5
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: default-cpu-demo
  namespace: mem-cpu
spec:
  containers:
  - name: default-cpu-demo-ctr
    image: nginx
    resources:
      limits:
        cpu: "2"
kubectl  delete  -f cpu-defaults-requestspod.yaml  && \
kubectl  apply -f cpu-defaults-limitspod.yaml  && \
kubectl get pod -n mem-cpu default-cpu-demo  -o yaml |grep "    resources" -A4  && \
kubectl describe  limitranges -n mem-cpu  cpu-limit-range

在这里插入图片描述

设置默认CPU 请求/限制Pod资源 可以修改限制资源的值,其中Pod请求/限制设置值为最大值

总结:
不设置限制/请求继承默认值
设置 限制超过默认值,请求和限制都为超过值
设置 请求小于默认值,请求为最小值但限制值依旧为默认限制值

对此以上CPU、内存设定值超过默认的限制值,随之Pod的请求/限制值都变成了设定值。 这样是否做不打到真正的资源隔离。 我们应当对最大限制值进行也有个上限,同理最小限制值如同。

接下来引入新的概念 对命名空间最大与最小的约束

三、为命名空间配置最小和最大内存约束

简介: 命名空间中运行的容器使用的内存设置最小值和最大值。您可以在LimitRange 对象中指定最小和最大内存值。如果 Pod 不满足 LimitRange 施加的约束,则无法在命名空间中创建它

1、书写yaml文件

vim memory-constraints-default.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-min-max-demo-lr
  namespace: mem-cpu
spec:
  limits:
  - max:
      memory: 1Gi
    min:
      memory: 500Mi
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: constraints-mem-demo
  namespace: mem-cpu
spec:
  containers:
  - name: constr

2、生成默认 最小和最大内存约束

kubectl  apply -f  memory-constraints-default.yaml

3、查看详细信息

  • 查看对名称空间下Pod的默认 最小和最大内存约束
kubectl  get limitranges  -n mem-cpu  mem-min-max-demo-lr && \
kubectl  describe limitranges  -n mem-cpu  mem-min-max-demo-lr

在这里插入图片描述
可以看到默认 最小和最大内存约束分别为 500Mi/1Gi ,其中默认内存请求/限制 分别为1Gi/1Gi ,接下来只需要查看Pod继承值

  • 查看Pod的详细信息
kubectl  get   po -n mem-cpu  constraints-mem-demo  -oyaml  |grep "    resources" -A4 && \
kubectl  describe  limitranges -n mem-cpu mem-min-max-demo-lr

在这里插入图片描述

4、设置指定一个容器的内存请求、限制值

vim memory-constraints-init.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-min-max-demo-lr
  namespace: mem-cpu
spec:
  limits:
  - max:
      memory: 1Gi
    min:
      memory: 500Mi
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: constraints-mem-demo
  namespace: mem-cpu
spec:
  containers:
  - name: constraints-mem-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "800Mi"
      requests:
        memory: "600Mi"
kubectl  apply -f memory-constraints-init.yaml && \
kubectl get  po -n mem-cpu constraints-mem-demo -o yaml |grep  "    resources" -A4 && \
kubectl  describe limitranges  -n mem-cpu mem-min-max-demo-lr

在这里插入图片描述
设置默认内存 请求/限制Pod资源,如果符合最大与最小范围值,可以修改默认的请求与限制资源的值

5、设置指定容器不满足最小内存请求

vim memory-constraints-requests.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-min-max-demo-lr
  namespace: mem-cpu
spec:
  limits:
  - max:
      memory: 1Gi
    min:
      memory: 500Mi
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: constraints-mem-demo
  namespace: mem-cpu
spec:
  containers:
  - name: constraints-mem-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "800Mi"
      requests:
        memory: "100Mi"
kubectl  delete -f memory-constraints-init.yaml  && \
kubectl  apply -f memory-constraints-requests.yaml  && \
kubectl get  po -n mem-cpu constraints-mem-demo -o yaml |grep  "    resources" -A4 && \
kubectl  describe limitranges  -n mem-cpu mem-min-max-demo-lr

在这里插入图片描述

6、设置指定容器超过最大内存限制的 Pod

vim  memory-constraints-limits.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-min-max-demo-lr
  namespace: mem-cpu
spec:
  limits:
  - max:
      memory: 1Gi
    min:
      memory: 500Mi
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: constraints-mem-demo
  namespace: mem-cpu
spec:
  containers:
  - name: constraints-mem-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "1.5Gi"
      requests:
        memory: "600Mi"
kubectl  delete -f memory-constraints-requests.yaml  && \
kubectl  apply -f memory-constraints-limits.yaml  && \
kubectl  describe limitranges  -n mem-cpu mem-min-max-demo-lr

在这里插入图片描述

总结:
1、若Pod不设置请求值与限制值,Pod容器内存的请求与限制值为最大约束值
2、设置 请求小于默认值,Pod容器内存的请求为最小值但限制值依旧为默认限制值
3、设置 限制超过默认值,Pod容器内存的请求和限制值都为超过值

四、为命名空间配置最小和最大 CPU 约束

简介: 命名空间中的容器和 Pod 使用的 CPU 资源设置最小值和最大值。在LimitRange 对象中指定最小和最大 CPU 值 。如果 Pod 不满足 LimitRange 施加的约束,则无法在命名空间中创建它

1、书写yaml文件

vim cpu-constraints-default.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-min-max-demo-lr
  namespace: mem-cpu
spec:
  limits:
  - max:
      cpu: "800m"
    min:
      cpu: "200m"
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: constraints-cpu-demo
  namespace: mem-cpu
spec:
  containers:
  - name: constraints-cpu-demo-ctr
    image: nginx

2、生成默认 最小和最大 CPU 约束

kubectl  apply -f   cpu-constraints-default.yaml

3、查看详细信息

  • 查看对名称空间下Pod的默认 最小和最大 CPU 约束
kubectl  get limitranges  -n mem-cpu  cpu-min-max-demo-lr && \
kubectl  describe limitranges  -n mem-cpu cpu-min-max-demo-lr

在这里插入图片描述
可以看到默认 最小和最大CPU 约束分别为 200m/800m ,其中默认内存请求/限制 分别为800m/800m ,接下来只需要查看Pod继承值

  • 查看Pod的详细信息
kubectl  get   po -n mem-cpu  constraints-cpu-demo  -oyaml  |grep "    resources" -A4 && \
kubectl  describe  limitranges -n mem-cpu cpu-min-max-demo-lr

在这里插入图片描述
Pod继承值了名称空间设定的限制请求、限制值

4、设置指定一个容器的CPU请求、限制值

vim cpu-constraints-init.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-min-max-demo-lr
  namespace: mem-cpu
spec:
  limits:
  - max:
      cpu: "800m"
    min:
      cpu: "200m"
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: constraints-cpu-demo
  namespace: mem-cpu
spec:
  containers:
  - name: constraints-cpu-demo-ctr
    image: nginx
    resources:
      limits:
        cpu: "800m"
      requests:
        cpu: "500m"
kubectl  delete  -f cpu-constraints-default.yaml &&  \
kubectl  apply  -f cpu-constraints-init.yaml &&  \
kubectl  get  po -n mem-cpu  constraints-cpu-demo  -o yaml |grep  "    resources" -A4 && \
kubectl  describe  limitranges -n mem-cpu cpu-min-max-demo-lr

在这里插入图片描述

设置默认CPU 请求/限制Pod资源,如果符合最大与最小范围值,可以修改默认的请求与限制资源的值

5、设置指定容器不满足最小CPU请求

vim cpu-constraints-requests.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-min-max-demo-lr
  namespace: mem-cpu
spec:
  limits:
  - max:
      cpu: "800m"
    min:
      cpu: "200m"
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: constraints-cpu-demo
  namespace: mem-cpu
spec:
  containers:
  - name: constraints-cpu-demo-ctr
    image: nginx
    resources:
      limits:
        cpu: "800m"
      requests:
        cpu: "100m"  #小于
kubectl  delete  -f  cpu-constraints-init.yaml && \
kubectl apply -f cpu-constraints-requests.yaml

在这里插入图片描述

6、设置指定容器超过最大CPU 限制的 Pod

vim cpu-constraints-limits.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-min-max-demo-lr
  namespace: mem-cpu
spec:
  limits:
  - max:
      cpu: "800m"
    min:
      cpu: "200m"
    type: Container
---
apiVersion: v1
kind: Pod
metadata:
  name: constraints-cpu-demo
  namespace: mem-cpu
spec:
  containers:
  - name: constraints-cpu-demo-ctr
    image: nginx
    resources:
      limits:
        cpu: "1.5"
      requests:
        cpu: "500m"
kubectl  delete  -f cpu-constraints-requests.yaml  
kubectl  apply -f cpu-constraints-limits.yaml

在这里插入图片描述

总结:
1、若Pod不设置请求值与限制值,Pod容器CPU的请求与限制值为最大约束值
2、设置 请求小于默认值,Pod容器CPU的请求为最小值但限制值依旧为默认限制值
3、设置 限制超过默认值,Pod容器CPU的请求和限制值都为超过值

如上测试可以总结 容器设定的请求值、限制值,当符合对名称空间下的资源最大到最小的范围值,不过当多个设定的资源设定也有个上限,对此可以对名称空间做资源的限定。 接下来引入新的概念对命名空间内存和 CPU 配额。

五、为命名空间配置内存和 CPU 配额

vim quota-mem-cpu.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
  namespace: mem-cpu
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: quota-mem-cpu-demo
  namespace: mem-cpu
spec:
  containers:
  - name: quota-mem-cpu-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m"
      requests:
        memory: "600Mi"
        cpu: "400m"
kubectl  get resourcequotas  -n mem-cpu

在这里插入图片描述
计算下剩下的资源:

 requests.cpu:     600m
 requests.memory:   400Mi
 limits.cpu:       1200m
 limits.memory:    1200Mi

创建第二个 Pod

vim quota-mem-cpu2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: quota-mem-cpu-demo-2
  namespace: mem-cpu
spec:
  containers:
  - name: quota-mem-cpu-demo-2-ctr
    image: redis
    resources:
      limits:
        memory: "1Gi"
        cpu: "800m"
      requests:
        memory: "700Mi"
        cpu: "400m"
kubectl  apply -f quota-mem-cpu2.yaml

在这里插入图片描述

创建第三个 Pod

vim quota-mem-cpu2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: quota-mem-cpu-demo-2
  namespace: mem-cpu
spec:
  containers:
  - name: quota-mem-cpu-demo-2-ctr
    image: redis
    resources:
      limits:
        memory: "2Gi"
        cpu: "800m"
      requests:
        memory: "400Mi"
        cpu: "400m"

在这里插入图片描述

总结:
1、设置了名称空间的资源配,当请求内存、CPU 或者 限制内存、CPU 超过指定的配额,将无法分配资源空间给相应的Pod,造成Pod无法创建
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值