Ansible 概览:
随着各种计算机虚拟技术的不断发展,云计算的工业化水平也日渐成熟。在新的形势下,IT运维面临着来自各个方面的挑战,维护的机器数量从数十个几百个到成千上万个,应用的结构变得越来越复杂,更新的速度也越来越快。各种自动化配置管理工具也在这种生态环境中应运而生,如puppet,saltstack,ansible。本文将用ansible来具体讨论其在不同场景下的使用方法,从而使运维和开发人员更加轻松的应对各种配置管理及应用部署需求。
本文用ansible部署为例,着重探讨ansible作为自动化工具在各种环境下的使用,包括如下几方面内容:
Ansible工具简介
配置管理和应用部署自动化
结合jenkins持续部署自动化
小结
1. Ansible工具简介
1.1. 简介
原引官方的说法“ansible是简单的自动化IT工具”。 其目的是:配置管理自动化,应用部署自动化,持续交付自动化等等。 究其根本和其他配置管理工具并没有本质区别,像个集成工具箱,可以远程发送命令给其他的服务器进行配置管理和应用部署,也可以随时通过各种编程语言进行模块扩展。它的显著特点是:
提供一个简单可编程的流程菜单,可以按照事先定义好的逻辑来执行相关的操作,自动完成部署需求
无需客户端或代理来远程管理服务器
基于paramiko(Python实现的ssh协议库)完成所有的部署任务
1.2. ansible和 ansible-playbook使用方式
Ansible命令是ansible提供的命令行工具,基于hosts清单来使用,具体如下:
ansible <host组名> [-f 并发数量] [-m 模块名字] [-a args] -i host清单名
默认的Host 清单配置文件在/etc/ansible/hosts,也可以定制新的路径。内容格式与window下的.ini文件类似。
#hosts
[web]
192.168.100.10
192.168.100.11
[db]
192.168.100.11
192.168.100.12
这里定义了俩个组,服务器可以是名字也可以是IP地址,同一个服务器可以属于不同的组。
用用户root向所有的服务器发ping命令,-k需要输入root密码,也可以现将所有服务器的密钥批量添加到本地,就可以无交互操作远程机器。
$ ansible all -m ping -u root -k -i hosts
SSH password:
192.168.100.10 | success >> {
"changed": false,
"ping": "pong"
}
192.168.100.11 | success >> {
"changed": false,
"ping": "pong"
}
192.168.100.12 | success >> {
"changed": false,
"ping": "pong"
}
默认不指定-m参数的时候使用的module只是执行命令,不会用一些shell下的environment变量等设置
copy|file--文件复制及文件属性设置
$ansible dbservers -m copy -a "src=/etc/hosts dest=/tmp/hosts"
$ansible webservers -m file -a "dest=/srv/foo/test.txt mode=600 owner=test group=test"
git--使用git指定服务器
$ansible webservers -m git -a "repo=git://test.example.org/repo.git dest=/srv/myapp version=HEAD"
service--对指定服务操作
ansible webservers -m service -a "name=httpd state=started"
命令行工具提供简单任务操作,实际部署应用常常需要很多操作。ansible-playbook则可以按照一定先后顺序和逻辑关系事先定义好所有操作,然后一次完成所有的部署任务。
如下例部署apache服务:
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running
service: name=httpd state=started
handlers:
- name: restart apache
service: name=httpd state=restarted
说明:在所有的webservers服务上以root身份按照最新的httpd,用httpd.j2做模板配置新的服务,配置之后重启httpd服务。
执行playbook命令即可完成所有部署,“-f 10”表示一次最多可同时在10个服务器上执行:
$ ansible-playbook playbook.yml -f 10
2. 配置管理和应用部署自动化
简单介绍之后,我们对ansible的使用方式有了大概的了解。接下来将用几个实例来具体展示ansible在不同场景下的使用模式。
2.1. 配置管理自动化
在一个典型的Web实际应用中,我们需要配置Web服务器和Mysql 数据库服务器,如图一所示
ansible目录结构如下:
-- hosts
-- site.yml
`-- roles
-- common
-- handlers
-- tasks
`-- templates
-- db
-- handlers
-- tasks
`-- templates
`-- web
-- handlers
-- tasks
`-- templates
具体hosts内容定义如下,web3作为web服务器,web2作为数据库服务器:
[webservers]
web3
[dbservers]
web2
site.yml中定义如下,对所有hosts中的服务器以root用户执行common角色的操作;对所有hosts中的服务器以root用户执行common角色的操作:
---
# This playbook deploys the whole application stack in this site.
- name: apply common configuration to all nodes
hosts: all
user: root
roles:
- common
- name: configure and deploy the webservers and application code
hosts: webservers
user: root
roles:
- web
- name: deploy MySQL and configure the databases
hosts: dbservers
user: root
roles:
- db
在对应role的目录下,需要组织针对不同的role准备相应的handler、task、template内容,比如时间服务器、mysql和apache的配置文件放到相应的templates目录下。详细的参考代码请参考附录的链接,这里就不再一一列举。所有准备就绪之后,执行如下命令,所有配置部署操作将由ansible自动完成:
#ansible-playbook -i hosts site.yml
2.2. 应用部署自动化
基础环境部署好之后,接下来我们可以在这个环境上部署web应用。通常情况下,web应用部署都是用命令远程同步到web服务器,然后重启服务。利用ansible,我们可以将这个步骤自动化,如下图所示:
在编译工具把代码编译成发布包以后,我们可以通过执行ansible-playbook将包部署到web服务器上,并自动重启服务。
比如下面deploy.yml
- hosts: webservers
user: root
pre_tasks:
- name: Stop web service
action: service name=httpd state=stopped
- name: Deploy the code from repository
git: repo=git://foosball.example.org/path/repo.git version=release-0.22 dest=/var/www/html/
post_tasks:
- name: Start web service
action: service name=httpd state=started
执行命令自动完成部署:
#ansible-playbook -i hosts deploy.yml
3. 结合jenkins持续部署
Jenkins作为一个持续集成的开源工具,一直在持续集成和持续部署领域被广泛使用。本例将结合jenkins讨论ansible在持续部署方面的使用方法。
如图三所示,将应用源代码和playbook及服务器配置文件存放在git服务器中,将需要部署的服务器在hosts中相应分成test,staging,production三个组。
部署的时候,运维人员在ansible服务器上用git从git服务器中取playbook并执行部署,可以一次部署三个环境,也可以选择指定的环境部署;在环境准备好后,开发人员通过jenkins工具取代码,build并构建部署任务。用jenkins调用ansible并执行相应的部署playbook进行自动应用部署,这里的playbook可以定义先判断在test环境是否部署正常,如正常则把当前应用部署到staging环境,否则将test环境回退到之前状态,同样情况在每次应用更新的时候也适用。具体详细的配置可以参照ansible官方文档,这里不一一列举。
利用这种方式,开发人员将专注于代码的开发设计而不用每次变更的时候要花时间关心在各种部署操作;运维人员也会将更多的精力投入到playbook及服务器配置模板的维护中来,而不是频繁忙于各种服务器的登陆,安装,部署中。
4. 小结
本文以具体实例介绍了ansible使用方法,并着重说明了ansible在不同场景下的自动化部署功能,也对持续部署进行了探索性讨论。旨在为开发和运维团队在面对越来越复杂的各种环境中,可以多一些便捷的选择方案。(作者简介:曲家富 任职于某大型外资IT企业,从事系统管理工作,专注于系统自动化部署。)
参考资料:
Ansible Official Site
http://www.ansible.com/home
Ansible example resource link
https://github.com/ansible/ansible-examples
Zero Downtime Application Updates with Ansible
http://radar.oreilly.com/2013/07/zero-downtime-application-updates-with-ansible.html
转载自: http://cio.it168.com/a2014/1014/1673/000001673109_all.shtml
相关推荐
概览OpenStack Ansible角色 地位 在主分支上 在开发部门 在Ansible Galaxy上 OpenStack Glance映像服务安装 在Ubuntu Precise(12.04)和Trusty(14.04)上进行了测试 要求 已经配置了用户和数据库的DBMS(如果适用...
**模块概览** 在解压后的"ansible-modules-dcos-1.0.6"目录中,我们可以找到一系列的Python脚本,每个脚本代表一个Ansible模块。这些模块可能包括: 1. **dcos_package**: 用于管理DC/OS中的包,如安装、卸载、...
### Ansible 学习知识点概览 #### 一、Ansible 概述与入门 - **定义**: Ansible 是一种开源的自动化运维管理工具,基于Python语言开发,使用SSH进行远程控制,无需在客户端安装软件即可实现自动化部署、配置管理和...
一、Ansible概览 Ansible是一款开源自动化工具,适用于系统配置管理、应用部署以及任务执行。它的核心特性包括幂等性、无代理操作和基于YAML的简单配置语言。通过SSH连接,Ansible能够轻松管理多台设备,使得大规模...
【内容概览】 这个项目可能涉及以下知识点: 1. **Ansible基础**:了解Ansible的角色、playbook、tasks、handlers等概念,以及如何编写YAML格式的剧本来自动化服务器配置。 2. **NethServer安装与配置**:学习如何...
#### 一、Ubuntu Server 概览 - **操作系统类型**:Ubuntu Server 是基于 Linux 的服务器操作系统。 - **适用范围**:适用于各种服务器环境,包括云服务、本地服务器等。 - **特点**:开源免费、稳定性强、安全性高...
### 课程内容概览 #### 基础篇:Python语言基础 1. **Python环境搭建**: - 软件安装与配置。 - 环境变量设置。 - IDE选择与使用技巧(如PyCharm)。 2. **Python基本语法**: - 数据类型(整型、浮点型、...
#### 一、YAML语言概览 YAML (YAML Ain’t Markup Language) 是一种用于人类可读的数据序列化的格式,常用于配置文件中。其特点包括: - **简洁性**:易于编写和阅读。 - **灵活性**:支持复杂的数据结构。 - **...
### 燕十八MongoDB视频教程全集21讲知识点概览 #### 第一部分:MongoDB基础篇 **第1讲:MongoDB介绍与安装** - MongoDB的历史背景和发展现状。 - MongoDB的特点及其与其他数据库系统的区别。 - 在Windows/Linux/...
以上是Python课程体系的主要内容与知识点概览,通过这些学习,学员将能够全面掌握Python编程的基本技能,包括但不限于基础语法、网络爬虫开发、数据分析与机器学习以及Web开发与自动化运维等方面的能力。这不仅有助...
这涵盖了互联网概述、OSI模型、客户端-服务器模型、网络协议栈以及对Python语言的概览。这部分为读者提供了网络协议和Python编程的基础知识。 2. 第二章专注于与网络设备的低层次交互。介绍了CLI(命令行接口)的挑战...
一、Ansible 架构概览 Ansible 的架构主要由三部分组成:控制机、Inventory 和 Modules。控制机是运行 Ansible 命令的服务器,Inventory 是定义目标主机和它们的组的配置文件,而 Modules 则是执行实际任务的代码...
### 知识点一:TCP/IP协议套件与Python语言概览 - **TCP/IP协议套件概述**:TCP/IP(传输控制协议/因特网互联协议)是互联网的基础通信协议,它定义了数据在网络中如何传输、路由以及在接收端如何重组。本章节将...
仪表板(The Dashboard)则是用户在登录后首先看到的界面,提供了对Ansible Tower状态的概览。 4. 组织与用户管理(Organizations & Users) 在组织与用户管理部分,文档会指导用户如何组织团队、管理用户以及用户...
OpenStack-train版操作手册,门户管理、角色管理、角色资源、资源概览、租户隔离、VPC与虚拟网络创建、网络创建、创建虚拟路由器、多网卡、DHCP分配实例IP、创建云主机、热迁移云主机、云主机备份、控制台灯