用一份 Helm Chart + 多份 values 文件,即可在任意命名空间中一键部署 Nginx,并通过不同域名区分环境。
这正是 Helm 的核心价值:标准化、参数化、可复用的应用交付。
✅ 一、创建 Helm Chart
创建名为 nginx-app 的 Helm Chart
helm create nginx-app
进入目录并清理不需要的模板(可选)
cd nginx-app
rm -f templates/httproute.yaml templates/gateway.yaml templates/hpa.yaml templates/serviceaccount.yaml
📌 新版 Helm 会生成 Gateway API 相关文件(如 httproute.yaml),若未使用 Gateway,请删除以避免报错。或者在values.yaml中加上:
httpRoute:
enabled: false
✅ 二、配置 values.yaml(基础模板)
编辑 nginx-app/values.yaml,定义通用配置:
replicaCount: 2
image:
repository: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx
tag: "1.14.1-8.6"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
targetPort: 80
ingress:
enabled: true
className: nginx
hosts:
- host: CHANGEME.nginx.local # 后续按环境替换
paths:
- path: /
pathType: Prefix
podAnnotations:
prometheus.io/scrape: "true"
prometheus.io/port: "80"
resources: {}
⚠️ 不要在此设置 namespace,命名空间由 --namespace 参数控制。
✅ 三、为不同环境创建 values 文件
dev 环境
cp values.yaml dev-values.yaml
sed -i 's/CHANGEME/dev/g' dev-values.yaml
pre 环境
cp values.yaml pre-values.yaml
sed -i 's/CHANGEME/pre/g' pre-values.yaml
test 环境(或保留原 values.yaml 用于 test)
cp values.yaml test-values.yaml
sed -i 's/CHANGEME/test/g' test-values.yaml
结果:
- dev-values.yaml → host: dev.nginx.local
- pre-values.yaml → host: pre.nginx.local
- test-values.yaml → host: test.nginx.local
✅ 四、部署到各环境
部署到 test
helm install nginx-test ./nginx-app -f test-values.yaml --namespace test --create-namespace
部署到 dev
helm install nginx-dev ./nginx-app -f dev-values.yaml --namespace dev --create-namespace
部署到 pre
helm install nginx-pre ./nginx-app -f pre-values.yaml --namespace pre --create-namespace
✅ --create-namespace 自动创建命名空间(如果不存在)。
✅ 五、验证部署
查看资源
kubectl get pods,svc,ingress -n test
kubectl get pods,svc,ingress -n dev
kubectl get pods,svc,ingress -n pre
查看 Helm release
helm list -n test
helm list -n dev
helm list -n pre
✅ 六、访问应用
- 获取 Ingress Controller IP:
kubectl get svc -n ingress-nginx # 或你使用的 Ingress 控制器命名空间
-
在本地 /etc/hosts 添加解析(测试用):
test.nginx.local dev.nginx.local pre.nginx.local
-
浏览器访问:
- http://test.nginx.local - http://dev.nginx.local - http://pre.nginx.local
✅ 七、后续管理
升级
helm upgrade nginx-dev ./nginx-app -f dev-values.yaml -n dev
回滚
helm rollback nginx-dev 1 -n dev
查看配置
helm get values nginx-dev -n dev
卸载
helm uninstall nginx-dev -n dev
删除命名空间
kubectl delete ns dev
✅ 八、最佳实践
- ✅ 一个 Chart,多套 values:实现环境隔离与复用
- ✅ 命名规范:Release 名 = -,Values 文件 = -values.yaml
- ✅ Git 管理:将 Chart 和 values 文件纳入版本控制
- ✅ 监控集成:通过 podAnnotations 自动接入 Prometheus
- ✅ 安全清理:不用时及时 helm uninstall,避免资源残留