首页 > 解决方案 > Kubernetes 资源管理最佳实践

问题描述

我有一个集群,我在其中管理每个项目的命名空间。

每个命名空间都有一个资源配额对象,DevOps 定义每个部署的使用情况。

我面临的一个反复出现的问题是,Kubernetes 根据“已使用”限制与“硬”配额的非常基本的总和来调度 Pod。

我可能被迫设置相当高的数量,尤其是在 CPU 中,因为 pod 需要管理突发,但很少同时超过几个。

如果我有一个 10 个 pod 应用程序,每个都有可能爆发到 4 个核心,我需要定义 40 个核心的资源配额限制,即使它与应用程序的潜在使用完全无关,即使在压力下也是如此。

尤其如此,因为这些项目中的大多数都需要爆发来处理 pod 启动。

VPA 本来可以解决这个问题,但我主要关心的是 pod 启动,而 VPA 需要杀死 pod 以调整其资源使用情况,所以它有点死锁。

我不确定在 k8s 集群中管理资源使用的最佳实践是什么。

很明显,我的方法是失败的。

标签: kubernetes

解决方案


如果我有一个10 个 pod应用程序,每个都有可能爆发到4 个核心,我需要定义 40 个核心的资源配额限制,即使它与应用程序的潜在使用完全无关,即使在压力下也是如此。

您不需要定义 40 个内核。
在 K8S 中,您可以为您的对象定义最小和最大资源。

例如,如果您希望将资源限制为最多 4 个 CPU,您仍然可以从 0.5 CPU 开始,这意味着对于 10 个 Pod,您只需要 0.5*10=5CPU

apiVersion: v1
kind: Pod
metadata:
  name: ...
spec:
  containers:
  - name: app
    image: ...
    #
    # Here we limit our Object regarding resources consuming
    # 
    resources:
      # Minimum resources for starting   
      requests:
        memory: "64Mi"
        # m= mili, in this sample it will require 0.5CPU
        cpu: "500m"
      
      # Maximum resources consumption
      limits:
        memory: "128Mi"
        cpu: "4"

在此处输入图像描述


在此处输入图像描述


推荐阅读