ansible-for-devops实战详解:16章内容深度解析
项目概述
ansible-for-devops是Jeffrey Geerling编写的一系列Ansible角色和剧本集合,旨在展示如何使用Ansible进行DevOps自动化运维工作,包括服务器配置、应用部署等内容。本文将深入解析项目16章内容,帮助读者快速掌握Ansible在实际工作中的应用。
章节内容解析
第2章:Ansible初体验
本章通过first-ansible-playbook示例展示了最基础的Ansible剧本,该剧本在CentOS系统上安装chronyd并确保其运行。
快速启动步骤:
- 安装VirtualBox、Vagrant和Ansible
- 下载项目并进入目录
- 执行
vagrant up启动虚拟机
这个简单的示例展示了Ansible的基本工作流程,让读者对Ansible有一个直观的认识。
第3章:多服务器编排
orchestration目录提供了一个多VM的Vagrant配置和Ansible清单,用于测试多服务器编排。通过ansible临时命令,用户可以体验在多个服务器上执行命令的便捷性。
主要功能:
- 配置三个虚拟机:app1、app2和db
- 提供Ansible清单文件
- 支持多服务器命令执行测试
第4章:应用部署实战
本章通过多个示例展示了不同应用的部署方法:
drupal目录包含一个单文件剧本,用于配置LAMP堆栈并安装Drupal。剧本主要完成以下任务:
- 安装Apache、MySQL、PHP等依赖
- 配置Apache虚拟主机
- 创建MySQL数据库和用户
- 安装Composer和Drupal
关键代码示例:
- name: Create a MySQL database for Drupal.
mysql_db: "db={{ domain }} state=present"
- name: Create a MySQL user for Drupal.
mysql_user:
name: "{{ domain }}"
password: "1234"
priv: "{{ domain }}.*:ALL"
host: localhost
state: present
nodejs目录则展示了如何部署Node.js应用,而solr目录则演示了Apache Solr的安装配置。
第6章:Ansible角色开发
nodejs-role示例将Node.js相关功能封装为Ansible角色,展示了如何使用角色来组织复杂的Ansible代码。角色代码结构如下:
- name: Install Node.js (npm plus all its dependencies).
dnf: name=npm state=present enablerepo=epel
- name: Install forever module (to run our Node.js app).
npm: name=forever global=yes state=present
通过角色封装,可以使Ansible代码更加模块化和可重用。
第8章:动态 inventory
dynamic-inventory目录提供了两个动态inventory脚本(PHP和Python版本),展示了如何根据实际环境动态生成主机清单。
Python版本inventory示例代码:
def example_inventory(self):
return {
'group': {
'hosts': ['192.168.56.71', '192.168.56.72'],
'vars': {
'ansible_user': 'vagrant',
'ansible_ssh_private_key_file':
'~/.vagrant.d/insecure_private_key',
'ansible_python_interpreter':
'/usr/bin/python3',
'example_variable': 'value'
}
},
'_meta': {
'hostvars': {
'192.168.56.71': {
'host_specific_var': 'foo'
},
'192.168.56.72': {
'host_specific_var': 'bar'
}
}
}
}
第9章:基础设施自动化
本章通过多个示例展示了复杂基础设施的自动化配置:
lamp-infrastructure目录提供了一个基于LAMP的高可用性Web应用基础设施配置。数据库服务器配置示例:
- hosts: lamp_db
become: yes
vars_files:
- vars.yml
pre_tasks:
- name: Create dynamic MySQL variables.
set_fact:
mysql_users:
- name: mycompany_user
host: "{{ groups['lamp_www'][0] }}"
password: secret
priv: "*.*:SELECT"
- name: mycompany_user
host: "{{ groups['lamp_www'][1] }}"
password: secret
priv: "*.*:SELECT"
mysql_replication_master: "{{ groups['a4d.lamp.db.1'][0] }}"
roles:
- geerlingguy.firewall
- geerlingguy.mysql
elk目录展示了Elasticsearch-Logstash-Kibana堆栈的配置,而gluster则演示了如何构建基于Gluster的网络存储。
第10章:应用部署策略
本章介绍了多种应用部署策略,包括:
deployments:部署Ruby on Rails应用到Passenger和Nginx环境
deployments-balancer:通过HAProxy负载均衡器实现零停机部署
deployments-rolling:演示Node.js应用的滚动部署,关键代码:
- name: Stop all running instances of the app.
command: "forever stopall"
when: app_updated.changed
- name: Ensure Node.js API app dependencies are present.
npm: "path={{ app_directory }}"
when: app_updated.changed
- name: Run Node.js API app tests.
command: "npm test chdir={{ app_directory }}"
when: app_updated.changed
- name: Ensure Node.js API app is started.
command: "forever start {{ app_directory }}/app.js"
when: "forever_list.stdout.find('app.js') == -1"
第11章:安全自动化
security目录包含多个安全自动化任务,展示了Ansible在系统安全加固中的应用:
- name: Update SSH configuration to be more secure.
lineinfile:
dest: /etc/ssh/sshd_config
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
state: present
validate: 'sshd -t -f %s'
with_items:
- regexp: "^PasswordAuthentication"
line: "PasswordAuthentication no"
- regexp: "^PermitRootLogin"
line: "PermitRootLogin no"
- regexp: "^Port"
line: "Port 2849"
notify: restart ssh
安全加固措施还包括:
- 移除未使用的软件包
- 配置文件权限
- 自动更新
- 防火墙配置
- SELinux配置
第16章:Kubernetes编排
kubernetes目录展示了如何使用Ansible配置Kubernetes集群:
- hosts: k8s
become: yes
vars_files:
- vars/main.yml
pre_tasks:
- name: Copy Flannel manifest tailored for Vagrant.
copy:
src: files/manifests/kube-system/kube-flannel-vagrant.yml
dest: "~/kube-flannel-vagrant.yml"
roles:
- role: geerlingguy.swap
tags: ['swap', 'kubernetes']
- role: geerlingguy.docker
tags: ['docker']
- role: geerlingguy.kubernetes
tags: ['kubernetes']
总结与展望
ansible-for-devops项目通过丰富的示例展示了Ansible在DevOps实践中的强大能力。从简单的单服务器配置到复杂的多服务器编排,从基础应用部署到安全加固,项目覆盖了DevOps工作流的各个方面。
通过学习这些示例,读者可以快速掌握Ansible的核心概念和最佳实践,并将其应用到实际工作中。建议读者结合官方文档进一步深入学习,探索更多高级功能。
相关资源
- 项目教程:README.md
- 测试脚本:tests/
- 角色示例:nodejs-role/roles/
- 动态Inventory:dynamic-inventory/
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



