本文用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在不同场景下的使用模式。



本文作者: 曲家富