You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Ansible和Helm在Azure Kubernetes中部署微服务到多环境?

多环境微服务部署Ansible+Helm配置方案

1. 目录结构规范

先做全局目录拆分,变量按环境隔离,避免不同环境配置混淆,参考结构如下:

.
├── ansible
│   ├── inventories/          # 不同环境的Ansible inventory
│   │   ├── dev/
│   │   │   ├── hosts         # dev环境集群接入信息
│   │   │   └── group_vars/
│   │   │       └── all.yml   # dev环境全局变量
│   │   └── qa/
│   │       ├── hosts         # QA环境集群接入信息
│   │       └── group_vars/
│   │           └── all.yml   # QA环境全局变量
│   ├── playbooks/            # 部署playbook
│   └── roles/                # 通用部署角色
└── helm
    ├── base/                 # 微服务通用Helm模板,不绑定环境
    │   ├── payment/
    │   └── order/
    └── overrides/            # 各环境的差异化配置
        ├── dev/
        │   ├── payment.yaml
        │   └── order.yaml
        └── qa/
            ├── payment.yaml
            └── order.yaml

2. Helm 部分配置

  • 通用模板(base目录下的各微服务Chart)只写所有环境通用的配置,比如Deployment的结构、Service的端口定义、HPA的基础规则,所有差异化字段用.Values变量占位,比如环境域名、副本数、资源配额、数据库地址、镜像标签等。
  • 各环境的overrides文件只填差异化值,比如dev环境的payment服务配置可以写:
# helm/overrides/dev/payment.yaml
replicaCount: 1
resources:
  limits:
    cpu: 500m
    memory: 512Mi
env:
  DB_HOST: dev-db.internal
  DOMAIN: dev.example.com
image:
  tag: latest

QA环境对应的配置直接替换为实际的环境值即可,不需要重复编写通用配置。

3. Ansible 部分配置

3.1 环境inventory配置

每个环境的hosts文件里配置对应K8s集群的接入信息,比如dev环境的hosts:

[dev]
localhost ansible_connection=local

[k8s_cluster:children]
dev

[k8s_cluster:vars]
k8s_context=dev-cluster-context
env=dev

3.2 部署Playbook编写

直接调用Ansible的helm模块完成部署,示例playbook(ansible/playbooks/deploy_service.yaml)如下:

---
- name: 部署微服务到指定K8s集群
  hosts: k8s_cluster
  gather_facts: no
  vars:
    service_name: "{{ service | default('payment') }}"
  tasks:
    - name: 检查对应环境的Helm覆盖配置是否存在
      stat:
        path: "../helm/overrides/{{ env }}/{{ service_name }}.yaml"
      register: override_file
      failed_when: not override_file.stat.exists

    - name: 使用Helm部署微服务
      community.kubernetes.helm:
        name: "{{ service_name }}"
        chart_ref: "../helm/base/{{ service_name }}"
        release_namespace: "{{ service_name }}-ns"
        create_namespace: true
        kube_context: "{{ k8s_context }}"
        values_files:
          - "{{ override_file.stat.path }}"
        state: present

3.3 部署命令

部署时只需要指定环境和服务名即可,比如部署dev环境的payment服务:

ansible-playbook -i inventories/dev playbooks/deploy_service.yaml -e "service=payment"

部署QA环境的order服务:

ansible-playbook -i inventories/qa playbooks/deploy_service.yaml -e "service=order"

4. 注意事项

  • 所有敏感配置(比如数据库密码、API密钥)不要明文写在变量文件里,可以用Ansible Vault加密存储,部署时传入解密密码即可。
  • 每次部署前可以加helm diff的前置校验步骤,对比当前集群运行配置和待部署配置的差异,避免误操作。
  • K8s的context可以提前在执行部署的机器上通过kubectl config get-contexts确认正确性,避免串到其他环境。

内容的提问来源于stack exchange,提问作者Debugger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:48:04