通过 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,避免资源残留
相关推荐
民乐团扒谱机24 分钟前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
물の韜1 小时前
ZYNQ/FMQL系列Linux之I2C开发实战
linux·arm开发·嵌入式硬件·设备树·iic·zynq
qq_371802111 小时前
Ubuntu Linux中安装WorkBuddy
linux·运维·服务器·ubuntu
无足鸟ICT1 小时前
【RHCA+】iptraf-ng(网络监控分析)
linux·网络
独隅1 小时前
WebStorm 在 Linux 环境下的实战安装与高效开发指南
linux·ide·webstorm
逃逸线LOF2 小时前
服务网关Gateway
java·运维·gateway
坤坤子吖3 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
分布式存储与RustFS3 小时前
OpenSearch 的索引快照别只留本地:用 repository-s3 存进 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
阡陌数智3 小时前
Claude API新版本重大变更与安全升级指南
java·linux·安全