【51CTO.com快译】
如果节点有足够的可用资源,容器就有可能使用更多资源。我们可以指定容器需要每种资源的数量。要指定的常见资源是CPU和内存。我们为Pod中的容器指定资源请求时,调度程序将决定将Pod放置在哪个节点上。我们为容器指定资源限制时,kubelet会处理限制,以便不允许运行中的容器使用的资源超过我们设置的限制。
比如说,如果我们为容器设置100 MiB的内存请求,该容器可能尝试使用更多的内存。但是如果我们为该容器设置了4GiB的内存限制,运行时环境会阻止容器使用超过配置限制的内存。
CPU和内存称为计算资源。
Pod的每个容器可以指定以下一项或多项:
- CPU方面的限制
- 内存方面的限制
- 大页面-<大小>方面的限制
- 对CPU的请求
- 对内存的请求
- 对大页面-<大小>的请求
想进一步了解Kubernetes中的资源,点击此处访问Kubernetes的官方文档。
在本文中,我们将看到资源限制以及CPU和内存请求的示例。我们还将使用Metric Server。 Metrics Server聚合了集群中的资源使用情况数据,默认情况下未部署在集群中。我们将使用该Metric Server查看Pod的资源使用情况。
先决条件
- 至少有1个worker节点的Kubernetes集群
如果您想了解创建Kubernetes集群,请点击此处。该指南将帮助您在AWS Ubuntu 18.04 EC2实例上创建有1个Master和2个节点的Kubernetes集群。
我们将做什么?
- 资源限制
资源限制
在创建资源需求指定的Pod之前,不妨先安装Metric Server。
使用以下命令克隆Metric Server Github存储库,并安装。
- git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git
- cd kubernetes-metrics-server /
使用对象文件创建Metric Server。
- kubectl create -f
图1. 安装Metric Server
等待一段时间以启动Metric Server。一段时间后,您可以执行以下命令来监测集群节点。
- kubectl top node
图2. 验证节点度量
现在,创建一个有下列内容的pod定义文件,含有内存请求和限制。
- vim my-pod-with-memory.yml
- apiVersion: v1
- kind: Pod
- metadata:
- name: my-pod-memory-demo
- spec:
- containers:
- - name: my-container-memory-demo
- image: polinux/stress
- resources:
- limits:
- memory: "50Mi"
- requests:
- memory: "20Mi"
- command: ["stress"]
- args: ["--vm", "1", "--vm-bytes", "30M", "--vm-hang", "1"]
图3. 我的pod内存演示
您可以找到“resources”属性,我们已将内存限制指定为50Mi、将内存请求指定为20Mi。
检查集群上的现有pod。
- kubectl get pods #Get pods from the default namespace
使用上述步骤中创建的pod定义来创建pod。
- kubectl create -f my-pod-with-memory.yml #Create a pod
- kubectl get pods
图4. 创建一个有内存请求和限制的pod。
现在,如果您获得了Pod的详细信息,可以看到该Pod请求20Mi内存,内存限制为50Mi。
- kubectl get pods
- kubectl describe pod my-pod-memory-demo #Describe the pod
图5. 描述pod,并检查内存。
可以使用以下命令检查Pod的使用情况。
- kubectl top pods #Check resource consumption by the pod
图6. 检查内存使用情况。
现在,创建附有CPU请求和限制的pod定义。
- vim my-pod-with-cpu.yml
- apiVersion: v1
- kind: Pod
- metadata:
- name: my-pod-cpu-demo
- spec:
- containers:
- - name: my-container-cpu-demo image: vish/stress
- resources:
- limits: cpu: "1"
- requests:
- cpu: "0.5"
- args:
- - -cpus
- - "2"
图7. 我的pod CPU演示。
在上述文件中,您可以看到该定义的“resource”属性为CPU请求是0.5、限制是1。另外要注意,我们传递2个CPU作为我们的需求,这超出了限制。
现在,不妨使用以下命令创建附有CPU请求和限制的pod。
- kubectl apply -f my-pod-with-cpu.yml #Create a pod
- kubectl get pods
图8. 创建附有CPU请求和限制的pod。
获得我们创建的pod的详细信息。
- kubectl get pods
- kubectl describe pod my-pod-cpu-demo
图9. 描述pod,检查CPU。
您可以看到,Pod请求.5即500m CPU,限制为1个CPU。
想检查CPU使用情况,使用以下命令。
- kubectl top pod #Check resource consumption by the pod
图10. 检查CPU使用情况。
在上述屏幕截图中,您可以看到在pod定义中传递2个CPU作为变量后,它无法使用超过限制(即1个CPU)的资源。这里pod“my-pod-cpu-demo”可能耗用999m CPU(相当于1个CPU),它不会增加耗用的资源。
结束语
我们在本文中看到了使用Metric Server在集群中进行监测的几个步骤,还看到了pod如何可以请求CPU和内存,并在不超出指定限制的情况下使用资源。
原文标题:Resource Limits in Kuberenetes
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】