ansible-for-devops实战指南:Jeff Geerling带你玩转Ansible
你是否还在为服务器配置和应用部署的繁琐流程而烦恼?是否希望找到一种简单高效的自动化运维工具?本文将带你深入了解Ansible,通过实战案例掌握其核心功能,让你轻松实现DevOps自动化运维。读完本文,你将能够编写基础的Ansible剧本、使用角色和集合管理复杂配置,并部署实际应用。
项目概述
ansible-for-devops是Jeffrey Geerling编写的一系列Ansible角色和剧本集合,旨在展示如何使用Ansible进行DevOps自动化运维工作,包括服务器配置、应用部署等内容。项目包含多个示例,对应《Ansible for DevOps》书籍的不同章节,从基础到高级,全面覆盖Ansible的使用场景。
快速入门:第一个Ansible剧本
基础剧本示例
first-ansible-playbook是一个非常基础的剧本,用于在CentOS上安装chronyd并确保其运行。以下是该剧本的核心内容:
---
- hosts: all
become: yes
tasks:
- name: Ensure chrony (for time synchronization) is installed.
dnf:
name: chrony
state: present
- name: Ensure chrony is running.
service:
name: chronyd
state: started
enabled: yes
这个剧本包含两个任务:安装chrony包和启动chronyd服务。通过dnf模块安装软件,service模块管理服务状态,简单直观地展示了Ansible的基本用法。
运行剧本
要运行这个剧本,首先需要进入first-ansible-playbook目录,然后执行以下命令:
ansible-playbook playbook.yml
该命令会根据剧本中的定义,在目标主机上执行相应的任务,完成时间同步服务的安装和启动。
多服务器编排
环境配置
orchestration目录提供了一个简单的多VM Vagrant配置和Ansible清单,允许使用ansible临时命令测试多服务器编排。通过Vagrant创建多个虚拟机,模拟真实的多服务器环境,方便进行Ansible的多节点管理测试。
临时命令示例
使用Ansible的临时命令可以快速在多个服务器上执行操作,例如检查所有服务器的内存使用情况:
ansible all -i inventory -m command -a "free -m"
这条命令会在清单中定义的所有服务器上执行free -m命令,返回内存使用信息,体现了Ansible批量管理服务器的便捷性。
应用部署实战
Drupal网站部署
drupal目录包含一个单文件剧本,用于配置LAMP堆栈并安装Drupal。剧本使用include语句将不同的配置部分拆分,使结构更清晰。以下是该剧本的主要任务:
- 安装Apache、MySQL、PHP等LAMP组件
- 配置数据库和用户
- 下载并安装Drupal
- 配置虚拟主机
通过这个示例,你可以学习如何使用Ansible整合多个服务,完成复杂应用的部署。
零停机部署
deployments-balancer提供了一个在HAProxy负载均衡器后面的Web服务器上处理零停机部署的剧本。部署命令如下:
ansible-playbook -i inventory playbooks/deploy.yml
该剧本通过逐步更新后端Web服务器,确保在部署过程中服务不中断,适用于对可用性要求较高的生产环境。
高级功能
角色和集合
nodejs-role示例将Node.js相关配置封装为角色,使剧本更加模块化和可复用。而collection则展示了Ansible内容集合的基本结构,便于组织和分享Ansible资产。
动态 inventory
dynamic-inventory包含两个动态inventory脚本(一个PHP,一个Python),用于从外部数据源获取主机信息。这对于管理云环境中的动态服务器非常有用,例如从云服务商获取主机列表。
安全与HTTPS配置
Let's Encrypt证书管理
https-letsencrypt剧本演示了使用Ansible和Let's Encrypt实现自动化证书管理。运行以下命令即可部署:
ansible-playbook -i inventory main.yml
该剧本会自动申请、安装和更新SSL证书,确保网站的HTTPS安全。
容器与云部署
Docker应用部署
docker-flask示例展示了如何使用Ansible部署Docker化的Flask应用,包括数据库、Web服务器等多个容器的编排。通过Ansible管理Docker容器,简化了应用的部署和扩展流程。
Kubernetes集群
kubernetes目录提供了构建三节点Kubernetes集群的剧本,以及部署Nginx等应用的示例。通过Ansible自动化Kubernetes集群的搭建和应用部署,降低了容器编排的复杂性。
总结与展望
通过本文的介绍,你已经了解了ansible-for-devops项目的主要内容和实战案例。从基础的剧本编写到高级的容器和云部署,Ansible提供了强大而灵活的自动化能力,帮助你简化DevOps流程,提高工作效率。
建议你进一步探索项目中的其他示例,如elk(Elasticsearch-Logstash-Kibana堆栈)、jenkins(CI/CD配置)等,深入学习Ansible在不同场景下的应用。通过不断实践,你将能够熟练运用Ansible解决实际的运维问题,成为一名高效的DevOps工程师。
官方文档:README.md 项目教程:first-ansible-playbook 角色示例:nodejs-role
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



