You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Helm Chart按环境自定义Kubernetes CPU资源配置

问题描述

我在用于部署容器的Helm Chart的templates目录下存放了deployment.yaml和values.yaml文件。现在希望在流水线中定义并使用环境变量来配置Kubernetes的CPU资源,使得执行Helm部署时,能根据环境(dev、test、prod,其中开发和测试环境的资源配置少于生产环境)选择正确的资源值。请问如何实现这一需求,让Helm在部署应用时正确获取对应环境的资源配置?

现有文件内容

deployment.yaml 片段

# ...
resources:
  limits:
    cpu: {{ .Values.resources.limits.cpu }}
    memory: {{ .Values.resources.limits.memory }}
  requests:
    cpu: {{ .Values.resources.requests.cpu }}
    memory: {{ .Values.resources.requests.memory }}
# ...

values.yaml 片段

# ...
resources:
  limits:
    cpu: 900m
    memory: 500Mi
  requests:
    cpu: 600m
    memory: 300Mi
# ...

如何在执行Helm命令时根据环境从values.yaml中获取对应的CPU值?这是否可行?若可行,具体操作方法是什么?


可行方案及操作步骤

完全可行,以下是几种常用的实现方式:

方法一:使用多环境专用values文件(推荐)

这是Helm管理多环境配置的标准做法,结构清晰易维护。

  • 在Chart根目录下创建values-dev.yaml、values-test.yaml、values-prod.yaml三个文件,分别对应不同环境的资源配置:
    • values-dev.yaml:
      resources:
        limits:
          cpu: 400m
          memory: 250Mi
        requests:
          cpu: 200m
          memory: 150Mi
      
    • values-test.yaml(可与dev一致或略高):
      resources:
        limits:
          cpu: 500m
          memory: 300Mi
        requests:
          cpu: 300m
          memory: 200Mi
      
    • values-prod.yaml:
      resources:
        limits:
          cpu: 900m
          memory: 500Mi
        requests:
          cpu: 600m
          memory: 300Mi
      
  • 在流水线中,先定义环境变量(比如export ENV=dev),然后执行Helm命令时通过-f参数加载对应环境的values文件:
    helm upgrade --install my-app ./my-chart -f values-${ENV}.yaml
    
    注:主values.yaml可保留默认配置,Helm会优先加载指定的环境values文件中的配置,覆盖主文件对应项。

方法二:在主values.yaml中按环境分组

如果不想维护多个values文件,可以把不同环境的配置都写在主values里,通过流水线传参指定环境:

  • 修改主values.yaml,按环境分组资源配置:
    environments:
      dev:
        resources:
          limits:
            cpu: 400m
            memory: 250Mi
          requests:
            cpu: 200m
            memory: 150Mi
      test:
        resources:
          limits:
            cpu: 500m
            memory: 300Mi
          requests:
            cpu: 300m
            memory: 200Mi
      prod:
        resources:
          limits:
            cpu: 900m
            memory: 500Mi
          requests:
            cpu: 600m
            memory: 300Mi
    # 设置默认环境,避免未指定时出错
    defaultEnv: prod
    
  • 修改deployment.yaml中的资源引用,根据传入的环境变量获取对应配置:
    # ...
    resources:
      limits:
        cpu: {{ index .Values.environments (default .Values.defaultEnv .Values.env) "resources" "limits" "cpu" }}
        memory: {{ index .Values.environments (default .Values.defaultEnv .Values.env) "resources" "limits" "memory" }}
      requests:
        cpu: {{ index .Values.environments (default .Values.defaultEnv .Values.env) "resources" "requests" "cpu" }}
        memory: {{ index .Values.environments (default .Values.defaultEnv .Values.env) "resources" "requests" "memory" }}
    # ...
    
  • 流水线执行Helm命令时,通过--set参数传入当前环境:
    # 假设流水线中已设置ENV变量为dev
    helm upgrade --install my-app ./my-chart --set env=${ENV}
    

方法三:直接通过--set覆盖资源配置(适合简单场景)

如果不需要维护复杂的环境配置,可以在流水线中直接通过--set参数覆盖values中的资源值:

# 根据环境变量设置不同的资源参数
if [ "$ENV" = "dev" ]; then
  helm upgrade --install my-app ./my-chart \
    --set resources.limits.cpu=400m \
    --set resources.limits.memory=250Mi \
    --set resources.requests.cpu=200m \
    --set resources.requests.memory=150Mi
elif [ "$ENV" = "test" ]; then
  helm upgrade --install my-app ./my-chart \
    --set resources.limits.cpu=500m \
    --set resources.limits.memory=300Mi \
    --set resources.requests.cpu=300m \
    --set resources.requests.memory=200Mi
else # 默认使用prod配置
  helm upgrade --install my-app ./my-chart
fi

内容的提问来源于stack exchange,提问作者Sri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:06:04