通过 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,避免资源残留
相关推荐
珠海西格电力科技8 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
A星空1239 小时前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
释怀不想释怀9 小时前
Linux环境变量
linux·运维·服务器
zzzsde9 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
凡人叶枫9 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
yuanmenghao9 小时前
Linux 性能实战 | 第 7 篇 CPU 核心负载与调度器概念
linux·网络·性能优化·unix
qq_2975746710 小时前
Linux 服务器 Java 开发环境搭建保姆级教程
java·linux·服务器
70asunflower10 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
聆风吟º10 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann