Kubernetes中的资源限制!,为什么要限制中导


如果节点有足够的可用资源,容器就有可能使用更多资源。我们可以指定容器需要每种资源的数量。要指定的常见资源是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存储库,并安装。

  1. git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git  
  2. cd kubernetes-metrics-server / 

使用对象文件创建Metric Server。

  1. kubectl create -f 

图1. 安装Metric Server

等待一段时间以启动Metric Server。一段时间后,您可以执行以下命令来监测集群节点。

  1. kubectl top node 

图2. 验证节点度量

现在,创建一个有下列内容的pod定义文件,含有内存请求和限制。

  1. vim my-pod-with-memory.yml 
  2.  
  3. apiVersion: v1 
  4.  
  5. kind: Pod 
  6.  
  7. metadata: 
  8.  
  9. name: my-pod-memory-demo 
  10.  
  11. spec: 
  12.  
  13. containers: 
  14.  
  15. - name: my-container-memory-demo 
  16.  
  17. image: polinux/stress 
  18.  
  19. resources: 
  20.  
  21. limits: 
  22.  
  23. memory: "50Mi" 
  24.  
  25. requests: 
  26.  
  27. memory: "20Mi" 
  28.  
  29. command: ["stress"] 
  30.  
  31. args: ["--vm", "1", "--vm-bytes", "30M", "--vm-hang", "1"] 

图3. 我的pod内存演示

您可以找到“resources”属性,我们已将内存限制指定为50Mi、将内存请求指定为20Mi。

检查集群上的现有pod。

  1. kubectl get pods #Get pods from the default namespace 

使用上述步骤中创建的pod定义来创建pod。

  1. kubectl create -f my-pod-with-memory.yml #Create a pod  
  2. kubectl get pods 

图4. 创建一个有内存请求和限制的pod。

现在,如果您获得了Pod的详细信息,可以看到该Pod请求20Mi内存,内存限制为50Mi。

  1. kubectl get pods  
  2. kubectl describe pod my-pod-memory-demo #Describe the pod 

图5. 描述pod,并检查内存。

可以使用以下命令检查Pod的使用情况。

  1. kubectl top pods #Check resource consumption by the pod 

图6. 检查内存使用情况。

现在,创建附有CPU请求和限制的pod定义。

  1. vim my-pod-with-cpu.yml 
  2.  
  3. apiVersion: v1 
  4.  
  5. kind: Pod 
  6.  
  7. metadata: 
  8.  
  9. name: my-pod-cpu-demo 
  10.  
  11. spec: 
  12.  
  13. containers: 
  14.  
  15. - name: my-container-cpu-demo image: vish/stress 
  16.  
  17. resources: 
  18.  
  19. limits: cpu: "1" 
  20.  
  21. requests: 
  22.  
  23. cpu: "0.5" 
  24.  
  25. args: 
  26.  
  27. - -cpus 
  28.  
  29. - "2" 

图7. 我的pod CPU演示。

在上述文件中,您可以看到该定义的“resource”属性为CPU请求是0.5、限制是1。另外要注意,我们传递2个CPU作为我们的需求,这超出了限制。

现在,不妨使用以下命令创建附有CPU请求和限制的pod。

  1. kubectl apply -f my-pod-with-cpu.yml #Create a pod  
  2. kubectl get pods 

图8. 创建附有CPU请求和限制的pod。

获得我们创建的pod的详细信息。

  1. kubectl get pods  
  2. kubectl describe pod my-pod-cpu-demo 

图9. 描述pod,检查CPU。

您可以看到,Pod请求.5即500m CPU,限制为1个CPU。

想检查CPU使用情况,使用以下命令。

  1. 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

相关内容