如何确定Kubernetes Pod的最小/最大资源

81次阅读
没有评论

问题描述

在使用Kubernetes集群时,想知道如何确定Pod的最小和最大资源。他的集群有两个节点,每个节点有以下资源:
– 2个CPU,总共4个
– 2GB内存,总共4GB

他有4个Pod需要调度,目前还没有副本。其中一个主要的Pod将使用80%的资源,其他每个Pod将使用5%的资源。他想知道应该为这些Pod指定什么资源限制。

当前的使用情况统计如下:

# kubectl top pod --all-namespaces
NAMESPACE       NAME                        CPU(cores)   MEMORY(bytes)
default         pod1-64c455bcf8-mzxqc       1m           122Mi
default         pod2-6f7b44478b-pn4tt       1m           33Mi
default         pod3-867c956697-mf6zw       0m           48Mi
default         pod4-844bd559dd-z96fh       0m           35Mi

解决方案

请注意以下操作注意版本差异及修改前做好备份。
根据用户的需求,我们可以通过以下步骤来确定Pod的最小和最大资源。

  1. 开发人员可以最初指定任何请求/限制的值,但这些值与实际情况无关。
  2. 为了获取“真实”值,必须监控应用程序的实际资源使用情况。可以使用监控工具如Prometheus、Instana、Datadog等来实现。
  3. 例如,在Instana中,可以看到我为一个Pod的请求设置了512MB,限制为2GB,但该Pod目前只有一个容器,占用了57MB的内存。
  4. 但是现在不能将60MB作为一个值使用,需要对应用程序进行负载测试,观察在真实/压力情况下的行为。
  5. 然后,您可以根据这些值进行审查,并相应地调整请求/限制。

如果没有监控工具,可以使用一些kubectl命令来获取这些值。以下是一个示例:

$ kubectl describe pod -n gazelle gazelle-ws-0-0-1-6d67cffcf-lvlhk
    Limits:
      cpu:     2
      memory:  8Gi
    Requests:
      cpu:      250m
      memory:   4Gi
$ kubectl top pod gazelle-ws-0-0-1-6d67cffcf-lvlhk -n gazelle --containers
POD                                NAME         CPU(cores)   MEMORY(bytes)
gazelle-ws-0-0-1-6d67cffcf-lvlhk   gazelle-ws   5m           1198Mi

在上面的示例中,我们可以看到Pod的请求和限制的值。但是,真实的资源使用情况可能会有所不同,需要进行负载测试来确定真实的请求和限制值。

根据用户提供的信息,我们可以根据实际情况来确定Pod的最小和最大资源。根据当前的使用情况统计,我们可以看到Pod1使用了1m的CPU和122Mi的内存,Pod2使用了1m的CPU和33Mi的内存,Pod3使用了0m的CPU和48Mi的内存,Pod4使用了0m的CPU和35Mi的内存。

根据这些统计数据,我们可以推断出以下资源限制:
– Pod1的最小资源限制为1m的CPU和122Mi的内存,最大资源限制为2个CPU和4GB的内存。
– Pod2的最小资源限制为1m的CPU和33Mi的内存,最大资源限制为2个CPU和4GB的内存。
– Pod3的最小资源限制为0m的CPU和48Mi的内存,最大资源限制为2个CPU和4GB的内存。
– Pod4的最小资源限制为0m的CPU和35Mi的内存,最大资源限制为2个CPU和4GB的内存。

请注意,这些值仅供参考,实际的资源限制可能需要根据负载测试的结果进行调整。

正文完