基于 Ansible 的容器集群自动化部署:从宿主机初始化到容器运行的全流程脚本
·
Ansible 容器集群自动化部署流程
宿主机初始化配置
确保宿主机满足以下条件:安装 Python 3、SSH 服务可用、root 或 sudo 权限。通过 Ansible 的 hosts 文件定义目标主机群组:
[container_hosts]
host1 ansible_host=192.168.1.10
host2 ansible_host=192.168.1.11
创建基础系统配置的 playbook base_setup.yml,包含时区设置、防火墙规则、必要工具安装(如 Docker 和容器运行时)。
容器运行时安装
使用 Ansible 模块安装 Docker 或 containerd。对于 Docker 部署示例:
- name: Install Docker
hosts: container_hosts
tasks:
- name: Add Docker GPG key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Add Docker repository
apt_repository:
repo: "deb https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
state: present
- name: Install Docker packages
apt:
name: docker-ce,docker-ce-cli,containerd.io
state: latest
update_cache: yes
集群网络配置
使用 community.docker 模块创建覆盖网络或桥接网络:
- name: Create overlay network
community.docker.docker_network:
name: cluster_net
driver: overlay
scope: global
容器编排部署
通过 Ansible 部署容器编排工具如 Docker Swarm 或 Kubernetes 基础组件。Swarm 初始化示例:
- name: Initialize Swarm
community.docker.docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address }}"
容器服务部署
定义容器服务模板 deploy_services.yml,使用变量文件动态配置镜像、端口等参数:
- name: Launch web service
community.docker.docker_stack:
name: web_app
state: present
compose:
- version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
networks:
- cluster_net
配置管理与机密存储
使用 Ansible Vault 加密敏感数据,并在 playbook 中引用:
- name: Load secrets
include_vars: secrets.yml
no_log: true
- name: Deploy with secrets
community.docker.docker_container:
name: db
image: postgres:13
env:
POSTGRES_PASSWORD: "{{ db_password }}"
健康检查与维护
添加定时任务检查容器状态,自动恢复异常服务:
- name: Monitor containers
community.docker.docker_container_info:
name: "{{ item }}"
register: container_status
loop: "{{ container_list }}"
- name: Restart failed containers
community.docker.docker_container:
name: "{{ item.item }}"
state: restarted
when: not item.exists or not item.Status.running
loop: "{{ container_status.results }}"
日志与监控集成
配置容器日志驱动并部署监控组件(如 Prometheus 导出器):
- name: Configure logging
community.docker.docker_container:
name: app
image: myapp:latest
log_driver: syslog
log_options:
syslog-address: "udp://logserver:514"
- name: Deploy monitoring
community.docker.docker_stack:
name: monitoring
compose:
- file: ./monitoring/docker-compose.yml
滚动更新策略
通过标签控制更新批次,实现零停机部署:
- name: Rolling update
community.docker.docker_service:
name: frontend
image: app:v2.0
update_config:
parallelism: 2
delay: 10s
labels:
- "traefik.enable=true"
关键注意事项
- 使用
ansible-playbook --limit参数分阶段执行不同环境 - 通过
group_vars/目录管理环境差异配置 - 对容器镜像使用固定版本标签避免不可控更新
- 在 playbook 中设置
serial参数控制并发节点数
完整实现需结合具体基础设施调整网络插件、存储驱动等参数。建议通过 CI/CD 管道触发 playbook 执行,实现从代码提交到生产部署的完整自动化。
更多推荐
所有评论(0)