通过 Helm 与 Golang 结合实现多环境部署,采用 charts/ 存放公共模板,environments/ 下分 dev、staging、prod 配置文件,利用 --values 指定不同环境变量并注入容器环境变量,Golang 程序通过 os.Getenv 读取配置,结合 CI/CD 根据分支或标签自动部署至对应环境,提升发布安全性与可维护性。

在使用 Go 语言开发 Kubernetes 应用时,常配合 Helm 进行应用打包与部署。面对多环境(如 dev、staging、prod)的发布需求,如何通过 Helm 实现配置隔离与灵活管理成为关键。下面是一个基于 Golang 项目结合 Helm 实现多环境部署的实用示例。
项目结构设计
合理的目录结构有助于清晰管理不同环境的 Helm 配置。
- charts/
- myapp/
- Chart.yaml
- values.yaml # 默认值
- templates/ # 模板文件
- deployment.yaml
- service.yaml
- ingress.yaml
- environments/
- dev/values.yaml
- staging/values.yaml
- prod/values.yaml
- main.go # Golang 示例服务
- Dockerfile
这种结构将公共模板放在 charts/myapp 中,各环境特有配置放入 environments/{env} 目录,便于维护和 CI/CD 集成。
Helm 多环境部署命令
通过 --values 参数指定不同环境的配置文件进行部署。
立即学习“go语言免费学习笔记(深入)”;
# 部署到开发环境 helm upgrade --install myapp ./charts/myapp \ --values environments/dev/values.yaml \ --namespace dev部署到预发环境
helm upgrade --install myapp ./charts/myapp \ --values environments/staging/values.yaml \ --namespace staging
部署到生产环境
helm upgrade --install myapp ./charts/myapp \ --values environments/prod/values.yaml \ --namespace prod --timeout 10m
每个 values.yaml 文件可覆盖镜像标签、副本数、资源限制、日志级别等参数。例如:
CRMEB打通版是一款全开源支持免费商用的PHP 多语言商城系统;CRMEB技术团队历经6年时间匠心之作!系统采用前后端分离技术,基于TP6+Uni-app框架开发;客户移动端采用uni-app开发,管理后台前端使用iviewUI开发。系统支持微信公众号端、微信小程序端、H5端、PC端多端账号同步,可快速打包生成APP;赋能开发者,减少重复造轮子;系统支持自动检查安装环境一键安装部署,使用简单方便
# environments/prod/values.yaml replicaCount: 3 image: repository: myregistry/myapp tag: v1.2.0 pullPolicy: IfNotPresentresources: requests: memory: "512Mi" cpu: "200m" limits: memory: "1Gi" cpu: "500m"
env: LOG_LEVEL: "error" DB_HOST: "prod-db.cluster-xxx.rds.amazonaws.com"
Golang 服务与配置联动
Golang 程序可通过环境变量接收 Helm 注入的配置。
func main() {
logLevel := os.Getenv("LOG_LEVEL")
if logLevel == "" {
logLevel = "info"
}
logger := initLogger(logLevel)
dbHost := os.Getenv("DB_HOST")
db, err := connectDB(dbHost)
if err != nil {
log.Fatal(err)
}
// 启动 HTTP 服务
http.ListenAndServe(":8080", router)}
对应的 Helm template 将环境变量写入 Deployment:
# charts/myapp/templates/deployment.yaml
env:
{{- range $key, $value := .Values.env }}
- name: {{ $key }}
value: "{{ $value }}"
{{- end }}
CI/CD 自动化集成建议
在 GitHub Actions 或 GitLab CI 中,根据分支自动部署对应环境。
- 推送至 feature/* 分支 → 部署到 dev
- 合并至 main 分支 → 部署到 staging
- 打 git tag v* → 部署到 prod
示例 GitLab CI 片段:
deploy_prod:
stage: deploy
script:
- helm upgrade --install myapp ./charts/myapp \
--values environments/prod/values.yaml \
--namespace prod
only:
- tags
基本上就这些。通过合理组织 Helm 目录结构,结合 Golang 的环境变量读取机制,可以高效实现多环境部署管理,提升发布安全性和可维护性。









