Kubernetes 配置Pod和容器(三)给容器分配CPU和RAM资源

此页展示了如何给运行在Kubernetes Pod中的容器分配CPU和RAM资源。

开始之前

必须有一个Kubernets集群,和一个能和集群沟通的kubectl命令行工具。如果你还没有集群,你可以用Minikube建立一个集群。

给容器分配CPU和RAM资源

当创建一个Pod的时候,你可以为运行在Pod中的容器请求CPU和RAM资源。你还可以设置CPU和RAM资源的限制。请求CPU和RAM资源,在配置文件里面包含resources:rquests字段。设置CPU和RAM限制包含resource:limits字段。如果节点上具有足够的CPU和RAM资源可用于所有容器要求的CPU和RAM总和,Kubernetes将把Pod调度在上面。同样当容器运行在节点上时,Kubernetes不允许容器消耗的CPU和RAM资源超出指定的容器的限制。如果容器超出他的RAM限制,他将结束。如果CPU超出限制,他将成为CPU节流的候选者。

在本次练习,创建一个运行了一个容器的Pod。Pod的配置文件请求250milicpu和64 mebibytes RAM。同样设置上线为1cpu和128 mebibytes RAM。下面是这个Pod的配置文件:

apiVersion: v1
kind: Pod
metadata:
  name: cpu-ram-demo
spec:
  containers:
  - name: cpu-ram-demo-container
    image: gcr.io/google-samples/node-hello:1.0
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "1"

1.创建一个Pod基于YAML配置文件:

kubectl create -f http://k8s.io/docs/tasks/configure-pod-container/cpu-ram.yaml

2.显示pod信息:

kubectl describe pod cpu-ram-demo

输出类似于:

Name:   cpu-ram-demo
 ...
 Containers:
   cpu-ram-demo-container:
    ...
     Limits:
       cpu:  1
       memory: 128Mi
     Requests:
       cpu:    250m
       memory:   64Mi

了解CPU和RAM单元

CPU资源以cpus为单位。允许小数值。你可以用后缀m来表示mili。例如100m cpu等同于100 milicpu,意思是0.1cpu。

RAM资源以bytes为单位。你可以将RAM表示为纯整数或具有这些后缀之一的定点整数: E, P, T, G, M, K, Ei, Pi, Ti, Gi, Mi, Ki。例如,以下代表大约相同的数值:

128974848, 129e6, 129M , 123Mi

如果你不确定需要请求多少资源,首先你可以发布应用不指定资源,使用资源监控来确定合适的值。

如果容器超出他的RAM限制,它将从内存不足状态死亡。你可以指定比你期望稍高点的值来提高可靠性。

如果指定了请求(request),则保证了可以使用的资源。有关资源的限制和请求可以参考Resource QoS

如果你没有指定限制和请求

如果没有指定RAM限制,Kubernetes对于容器可以使用的RAM没有上线。容器可以使用所在机器所有的可用RAM资源。类似,如果没有指定CPU限制,Kubernetes对于CPU资源没有限制,容器可以使用所在机器所有的可用CPU资源。

默认的限制应用参照默认命名空间的限制范围。你可以使用kubectl describe limitrange limits来查看默认的限制。

关于为什么要指定限制的相信信息,参考 Setting Pod CPU and Memory Limits

关于如果没有指定CPU和RAM资源请求的发生情况,参考Resource Requests and Limits of Pod and Container

推荐阅读更多精彩内容