kubernetes之创建基于名称空间的内存和cpu限额示例

系列目录

首先我们创建一个名称空间

kubectl create namespace quota-mem-cpu-example

创建资源配额

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi

通过命令创建它

kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu.yaml --namespace=quota-mem-cpu-example

查看它的详细信息:

kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml

资源配额对名称空间quota-mem-cpu-example增加了以下限制:

  • 每一个pod都必须内存申请/限制,cpu申请/限制

这里是针对上面的示例来说的,因为示例中配额同时配置了这4个选项,因此pod必须声明这四个选项

  • 所有容器内存申请总和不得超过1G

  • 所有内存限制不得超过2g

  • 所有容器申请的cpu不得超过1

  • 所有容器限制的cpu不得超过2

下面创建一个pod

apiVersion: v1
kind: Pod
metadata:
  name: quota-mem-cpu-demo
spec:
  containers:
  - name: quota-mem-cpu-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m" 
      requests:
        memory: "600Mi"
        cpu: "400m"
      

创建它

kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu-pod.yaml --namespace=quota-mem-cpu-example

查看配额详细信息

kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
status:
  hard:
    limits.cpu: "2"
    limits.memory: 2Gi
    requests.cpu: "1"
    requests.memory: 1Gi
  used:
    limits.cpu: 800m
    limits.memory: 800Mi
    requests.cpu: 400m
    requests.memory: 600Mi

通过输出信息可以看到资源的配额值和已经使用的值,可以看到pod的申请和限制均没有超限

尝试再创建一个pod

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

通过配置文件可以看到,pod申请的内存为700M,请注意已使用的申请内存和新请求的和已经超限.

600M+700M>1G

尝试创建pod

kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu-pod-2.yaml --namespace=quota-mem-cpu-example

输出信息

Error from server (Forbidden): error when creating "examples/admin/resource/quota-mem-cpu-pod-2.yaml":
pods "quota-mem-cpu-demo-2" is forbidden: exceeded quota: mem-cpu-demo,
requested: requests.memory=700Mi,used: requests.memory=600Mi, limited: requests.memory=1Gi

从输出信息可以看到,创建这个pod将会导致内存申请超限,因此第二个pod不会创建成功

如果想要对pod的资源进行限制,则可以使用LimitRange,使用了LimitRange后,超过LimitRange限制资源的pod将不会创建,并且如果容器没有指定申请或者限制,会被赋以LimitRange的默认值.

posted @ 2019-06-17 21:20  周国通  阅读(1313)  评论(0编辑  收藏  举报