Kubernetes中的资源限制!

译文
系统 Linux
如果节点有足够的可用资源,容器就有可能使用更多资源。我们可以指定容器需要每种资源的数量。要指定的常见资源是CPU和内存。我们为Pod中的容器指定资源请求时,调度程序将决定将Pod放置在哪个节点上。

【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存储库,并安装。

 

  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

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

责任编辑:庞桂玉 来源: 51CTO
相关推荐

2022-03-24 08:04:50

Kubernetes资源限制

2022-06-21 08:03:49

RBAC 限制容器

2021-05-25 09:00:00

Kubernetes容器集群

2024-01-01 18:59:15

KubernetesCPU内存

2022-12-19 07:28:53

Kubernetes资源请求限制

2024-04-07 00:00:00

Linux控制资源

2019-01-03 15:10:40

JVM安全资源

2020-11-23 08:48:00

Kubernetes容器开发

2021-12-26 18:23:10

Kubernetes集群命令

2021-05-21 11:20:36

Linux命令文件

2020-09-09 07:00:00

Kubernetes集群容器

2022-06-27 10:25:55

Kubernetes调度CPU

2021-01-12 15:19:23

Kubernetes

2021-03-05 00:06:12

Docker容器内存

2020-09-01 08:06:54

Kubernetes资源

2021-07-29 06:37:55

KubernetesKubeLinter工具

2021-11-22 16:21:28

Kubernetes 运维开源

2022-09-29 08:03:20

​Kubernete容器共享池

2018-12-18 09:00:26

Kubernetes工作负载测试

2020-07-09 08:26:42

Kubernetes容器开发
点赞
收藏

51CTO技术栈公众号