# maas-ansible **Repository Path**: acaiblog/maas-ansible ## Basic Information - **Project Name**: maas-ansible - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-31 - **Last Updated**: 2026-05-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # maas-ansible 基于 Ansible 的中间件离线部署工具,支持多套中间件的一键部署与初始化。 ## 环境要求 | 项目 | 要求 | |------|------| | OS | Euler OS / BigCloud Enterprise Linux / CentOS 7+ | | Python | 3.6+ | | Ansible | 4.10.0(离线包自带) | | 目标机认证 | SSH key(推荐)或 sshpass | ## 支持的中间件 | 中间件 | 版本 | 部署模式 | 说明 | |---------|--------|----------|------| | ClickHouse | 最新稳定版 | 集群 + ZooKeeper | 依赖 ZooKeeper | | Redis | 7.4.7 | slave / cluster | `redis_type` 切换 | | Elasticsearch | 8.12.2 | 集群 | | | Kafka | 2.12-3.9.1 | KRaft 模式(无 ZooKeeper) | | | MySQL | 8.0.37 | 主从复制 | 支持多主多从 | | MinIO | RELEASE.2025-09-07T16-13-09Z | 分布式集群 | | | Harbor | v2.13.0 | 单点 / 高可用 | 依赖 Docker | | K8s | v1.25.16 | 集群 | 依赖 Containerd | | Docker | 20.10.24 | 单点 | | | Keepalived | - | 高可用 VIP | | | ZooKeeper | 3.8.4 | 集群 | 供 ClickHouse 使用 | ## 快速开始 ### 1. 配置 inventory 编辑 `inventory/hosts`,填写主机名(**不要写真实 IP**): ```ini [k8s-master] k8s-master-1 k8s-master-2 k8s-master-3 [k8s-worker] k8s-worker-1 k8s-worker-2 [harbor] harbor-1 [redis] redis-1 redis-2 redis-3 [mysql] mysql-1 [clickhouse] clickhouse-1 clickhouse-2 clickhouse-3 [kafka] kafka-1 kafka-2 kafka-3 [minio] minio-1 minio-2 minio-3 [elasticsearch] es-1 es-2 es-3 [keepalived] keepalived-1 keepalived-2 [all:vars] ansible_ssh_user=root # ansible_ssh_pass="" # ansible_become_pass="" ``` **主机名解析配置:** **控制节点 `/etc/hosts`**(推荐) ```bash # 在运行 Ansible 的机器上编辑 /etc/hosts 192.168.1.101 k8s-master-1 192.168.1.102 k8s-master-2 192.168.1.103 k8s-master-3 192.168.1.111 k8s-worker-1 192.168.1.112 k8s-worker-2 192.168.1.200 harbor-1 192.168.1.211 clickhouse-1 # ... 按实际 IP 填写 ``` ### 2. 配置变量 **`group_vars/all`** — 系统级配置: ```yaml # LVM 磁盘管理 enable_lvm: yes lvm_device: /dev/vdb install_directory: /apps # 网络接口(用于获取 IP) api_interface: eth1 deploy_node_ip: 192.168.138.132 # Keepalived keepalived_vip: 192.168.138.132 keepalived_virtual_router_id: 5 # Docker / Harbor docker_version: 20.10.24 harbor_version: v2.13.0 harbor_domain: mirror.cd.kunlun.com harbor_port: 40112 ``` ### 3. 初始化环境(仅首次执行) 在**部署控制节点**(能连目标机的机器)上执行: ```bash # 需要 root 权限(或普通用户有 sudo) python3 maas.py --action init ``` 此步骤会: - 解压离线 yum 源到 `/opt` - 安装 `sshpass` 到 `/usr/local/bin` - 安装 Ansible 4.10.0(离线) - 创建 `/etc/ansible/ansible.cfg` - 创建 facts 缓存目录 `/tmp/facts_cache` ### 4. 生成部署密码 部署前需要为各中间件生成随机密码,使用 `gen_passwords.py` 自动生成并写入 `group_vars/password.yaml`: ```bash # 自动为 password.yaml 中所有空值字段生成 12 位随机密码(覆盖原文件) python3 gen_passwords.py # 仅预览,不写入文件 python3 gen_passwords.py --dry-run ``` **说明:** - 仅当 `password.yaml` 中某个 key 的值为空时,才生成新密码;已有值的 key 保持不变 - 密码规则:12 位,包含大小写字母 + 数字 + `!@%^*`,排除 `$#&` - 生成后建议使用 `ansible-vault` 加密:`ansible-vault encrypt group_vars/password.yaml` ### 5. 执行部署 ```bash # 部署所有(按 site.yml 中的 play 顺序) python3 maas.py --action deploy # 只部署指定组件(用 tag) ansible-playbook -i inventory/hosts site.yml -t redis,mysql,harbor # 指定 password 文件(已内置在 maas.py 中) # -e @group_vars/password.yaml -e @group_vars/middleware.yml ``` ## 启用 / 禁用组件 `group_vars/all` 中的 `enable_*` 开关当前为预留,实际启用通过 `inventory/hosts` 分组控制。 在 `site.yml` 中,可通过 `--tags` 选择部署哪些组件: ```bash # 只部署 Redis + MySQL ansible-playbook -i inventory/hosts site.yml -t redis,mysql ``` 可用 tag 列表: | tag | 组件 | |-----|------| | `common` | 系统初始化(LVM、内核参数、关 swap、关防火墙) | | `docker` | Docker 安装 | | `k8s` | K8s 集群部署 | | `keepalived` | Keepalived VIP | | `harbor` | Harbor 镜像仓库 | | `elasticsearch` | Elasticsearch 集群 | | `zookeeper` | ZooKeeper 集群 | | `kafka` | Kafka(KRaft 模式) | | `redis` | Redis(slave 或 cluster) | | `mysql` | MySQL 主从 | | `minio` | MinIO 分布式存储 | | `clickhouse` | ClickHouse + ZooKeeper | ## 项目结构 ``` maas-ansible/ ├── maas.py # 入口脚本(init / deploy) ├── site.yml # 主 playbook 入口 ├── ansible.cfg # Ansible 配置(fact 缓存、pipelining 等) ├── inventory/ │ └── hosts # 主机清单(按组分) ├── group_vars/ │ ├── all # 系统级变量 │ ├── middleware.yml # 中间件版本配置 │ └── password.yaml # 密码(部署前填写) ├── roles/ │ ├── common/ # 系统初始化 │ ├── docker/ # Docker │ ├── k8s/ # K8s │ ├── keepalived/ # Keepalived │ ├── harbor/ # Harbor │ ├── elasticsearch/ # Elasticsearch │ ├── zookeeper/ # ZooKeeper │ ├── kafka/ # Kafka │ ├── redis/ # Redis │ ├── mysql/ # MySQL │ ├── minio/ # MinIO │ └── clickhouse/ # ClickHouse ├── library/ # 自定义 Ansible 模块 ├── files/ # 离线安装包 └── chronyd.yaml # 时间同步 playbook(独立) ``` ## 注意事项 - **密码安全**:`group_vars/password.yaml` 建议用 `ansible-vault` 加密,不要明文提交到 Git - **SSH key**:推荐配置 SSH 免密登录,避免明文密码 - **LVM**:`enable_lvm: yes` 时需要确保 `lvm_device` 指向正确的裸盘 - **内核参数**:`common` role 会自动优化 `ip_local_port_range`、`vm.swappiness`、`net.core.somaxconn` 等,适用于高并发中间件场景 - **MinIO 节点数**:建议 ≥ 4 节点(或 3 节点 × 2 盘),否则纠删码无容错能力 ## 常见问题 **Q: pip3 install 太慢?** A: 离线包已内置在 `files/repo-euler-*.tar`,`init` 阶段会自动使用。 **Q: MySQL 初始化失败?** A: 检查 `group_vars/password.yaml` 中 `mysql_root_password` 已填写,且目标机 `/tmp` 有足够空间。 **Q: ClickHouse 部署后连不上 ZooKeeper?** A: 确认 `group_vars/middleware.yml` 中 `zookeeper_version` 正确,且 `[zookeeper]` 组主机可达。 **Q: Redis cluster 模式如何指定节点?** A: 在 `roles/redis/tasks/cluster.yml` 中通过 `groups['redis']` 自动发现,确保 `inventory/hosts` 的 `[redis]` 组填写正确。