Ansible Playbook初始化混合云环境的关键在于分层解耦、变量驱动和幂等执行:通过动态Inventory适配多云拓扑,统一注入公共变量,按os_hardening/runtime_setup/container_runtime分层编排,敏感信息加密,制品从私有库下载,配合serial/throttle与健康检查保障大规模落地。

用Ansible Playbook初始化大规模混合云生产基础环境,关键不在“写多少任务”,而在于分层解耦、变量驱动和幂等执行。控制节点只需一次触发,就能让跨公有云(AWS/Azure)、私有云(OpenStack)和物理机集群的数百节点,统一完成系统加固、运行时环境准备与网络策略就绪。
主机清单动态化:适配混合云拓扑
静态 hosts 文件无法应对多云环境频繁的IP变更和资源伸缩。应采用动态 Inventory 脚本:
- 为 AWS 使用 aws_ec2 插件,通过标签(如 env=prod、role=mycat-node)自动发现实例
- 为 Azure 配置 azure_rm 插件,按资源组和虚拟机规模集拉取清单
- 对 IDC 物理机或 OpenStack 实例,保留静态 inventory 分片(如 inventories/onprem/hosts),再通过 inventory_dir 参数合并加载
- 所有节点统一注入公共变量:ansible_user、ansible_ssh_private_key_file、cloud_provider(值为 aws/azure/onprem),供后续任务分支判断
基础环境分层编排:从OS到运行时
避免把所有操作堆在一个 playbook 里。推荐按职责拆分为三个 role:
- os_hardening:禁用 SELinux、关闭 firewalld、设置 ulimit、禁用 swap、同步时区(Asia/Shanghai)、配置 sysctl(fs.file-max、net.core.somaxconn 等)
- runtime_setup:根据 cloud_provider 和 node_role 变量选择安装项——例如 Mycat 节点装 JDK8+Python3.7+Maven;数据库节点额外装 MySQL 客户端+Percona Toolkit
- container_runtime:在需跑容器的节点上部署 Docker + docker-compose,并配置镜像加速器与 systemd 启动参数(如 ExecStart=/usr/bin/dockerd --insecure-registry=10.0.0.0/8)
敏感配置与版本管控:安全与可追溯
生产环境不允许明文密码或硬编码路径:
- 所有密钥、API Token、数据库连接串,统一用 ansible-vault encrypt_string 加密后写入 group_vars/all/vault.yml
- Java、Go、Node.js 等二进制包不内置 playbook,而是通过 get_url 模块从内部制品库(如 Nexus 或 S3 私有桶)下载,URL 和校验和(sha256sum)由变量控制
- 整个 playbook 仓库纳入 Git 管理,每个 tag 对应一次正式环境发布(如 v2.4.1-prod-init),CI 流水线中通过 --tags os_hardening 可单独验证某一层
执行策略与可观测性:面向大规模落地
百节点以上批量执行需防雪崩和失联:
- 在 playbook 顶层声明 serial: 10,每次只操作 10 台,配合 throttle: 3 限制单节点并发任务数
- 加入健康检查 task:执行前 ping 连通性,再用 wait_for_connection 等待 SSH 就绪,失败节点自动跳过并记录到 failed_hosts.log
- 启用 callback 插件(如 community.general.profile_tasks)输出各 task 耗时,便于识别瓶颈模块(如某个 region 的 S3 下载慢)

















