通过 Helm 部署 Nginx 应用的完整标准化步骤

用一份 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

✅ 六、访问应用

  1. 获取 Ingress Controller IP:

kubectl get svc -n ingress-nginx # 或你使用的 Ingress 控制器命名空间

  1. 在本地 /etc/hosts 添加解析(测试用):

    test.nginx.local dev.nginx.local pre.nginx.local

  2. 浏览器访问:

    复制代码
    - 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,避免资源残留
相关推荐
哈基咪怎么可能是AI5 小时前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行1 天前
Linux和window共享文件夹
linux
木心月转码ing1 天前
WSL+Cpp开发环境配置
linux
蝎子莱莱爱打怪2 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀2 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应2 天前
vi编辑器使用
linux·后端·操作系统
何中应2 天前
Linux进程无法被kill
linux·后端·操作系统
何中应2 天前
rm-rf /命令操作介绍
linux·后端·操作系统
何中应2 天前
Nginx转发请求错误
前端·后端·nginx