kubernetes之配置namespace的默认CPU请求和限制

简介

主要讲述如何给一个namespace中的容器配置默认的CPU请求数和CPU限制数。如果该命名空间中的容器创建时没有指定自定义的CPU策略,则会使用默认的CPU策略。

备注:此文档参考官方文档,并加以自己的理解。如有误导性的内容,请批评指正。

指定namespace中创建的pod配置默认的CPU请求大小和内存最大限额

创建一个namespace

# kubectl create namespace default-cpu-example

default-cpu-example命名空间中创建一个pod的LimitRange对象,设置默认CPU最大限制数为1,CPU默认请求数为0.5。文件名:cpu-defaults.yaml

apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
spec:
  limits:
  - default:
      cpu: 1
    defaultRequest:
      cpu: 0.5
    type: Container

创建资源对象

# kubectl apply -f /root/k8s-example/namespace/cpu-defaults.yaml --namespace=default-cpu-example

如果容器创建于default-cpu-example的namespace中,CPU请求数默认为0.5,最大限制数为1

例如,创建一个包含一个容器的pod,文件名为:cpu-defaults-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: default-cpu-demo
spec:
  containers:
  - name: default-cpu-demo-ctr
    image: nginx

创建pod

# kubectl apply -f /root/k8s-example/namespace/cpu-defaults-pod.yaml --namespace=default-cpu-example

查看pod资源详情:

# kubectl get pod default-cpu-demo --output=yaml --namespace=default-cpu-example

从下可以看到,容器default-cpu-demo中的CPU资源均为默认值

containers:
- image: nginx
  imagePullPolicy: Always
  name: default-cpu-demo-ctr
  resources:
    limits:
      cpu: "1"
    requests:
      cpu: 500m

定义容器的CPU限制数且限制数大于默认容器限制数,不定义CPU请求数

创建一个pod,自定义CPU最大限制数为1,CPU请求数不设置。文件名:cpu-defaults-pod-2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: default-cpu-demo-2
spec:
  containers:
  - name: default-cpu-demo-2-ctr
    image: nginx
    resources:
      limits:
        cpu: "1"
# kubectl apply -f /root/k8s-example/namespace/cpu-defaults-pod-2.yaml --namespace=default-cpu-example

查看该pod的资源信息:

# kubectl get pod default-cpu-demo-2 --output=yaml --namespace=default-cpu-example

在容器default-cpu-demo-2中,定义的CPU最大限制数是1,刚好等于默认的最大限制数1。从结果中看出,CPU的请求值是1,而不是默认的0.5

resources:
  limits:
    cpu: "1"
  requests:
    cpu: "1"

定义容器请求数,且容器请求数小于默认容器请求数,不定义限制数

创建一个包含一个容器的Pod,文件名:cpu-defaults-pod-3.yaml

apiVersion: v1
kind: Pod
metadata:
  name: default-cpu-demo-3
spec:
  containers:
  - name: default-cpu-demo-3-ctr
    image: nginx
    resources:
      requests:
        cpu: "0.75"
# kubectl apply -f /root/k8s-example/namespace/cpu-defaults-pod-3.yaml --namespace=default-cpu-example

在容器default-cpu-demo-3中,定义了CPU的请求是是0.75,大于默认的CPU请求数0.5。从结果看,容器default-cpu-demo-3中的CPU请求数等于自定义值,容器的限制数不变,为默认值1

resources:
  limits:
    cpu: "1"
  requests:
    cpu: 750m

实验完毕,删除namespace

# kubectl delete namespace default-cpu-example

总结

1、指定命名空间可以设置容器默认的CPU资源请求数(CPU requests)和CPU最大限制数(CPUlimits)

2、容器可以自定义自身的CPU资源请求数和CPU最大限制数:

  • 如果容器定义的CPU最大限制数大于或等于默认的CPU最大限制数,则容器的CPU最大限制数为自定义的值,此时,容器CPU资源请求数也将等于容器自定义的CPU最大限制数
  • 如果定义的CPU请求数大于默认的CPU请求数且小于默认最大CPU限制数,则容器的CPU请求数等于自定义的CPU请求数;如果定义的CPU请求数小于默认的CPU请求数,则容器的CPU请求数等于自定义的CPU请求数。总的来说,只要定义的容器CPU请求数小于默认最大CPU限制数,则自定义CPU请求数优先级更高,此时CPU请求数等于自定义的值。
posted @ 2020-01-19 16:13  McSiberiaWolf  阅读(1541)  评论(0编辑  收藏  举报