分享吧基于Ansible实现平台自动部署初探

Posted 大连飞创

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享吧基于Ansible实现平台自动部署初探相关的知识,希望对你有一定的参考价值。


Hi,大家好。今天跟大家聊一聊Ansible。

什么是Ansible?


Ansible是一个批量部署远程主机的工具。远程的主机可以是远程虚拟机,远程物理机,也可以是本地虚拟机, 本地主机。

Ansible能做什么?


Ansible通过SSH协议实现远程节点和管理节点之间的通信。理论上说,只要可以通过SSH登录到的主机上能做的操作,Ansible都可以做到。

类似的软件有哪些?


1.Saltstack

基于python开发,采用c/s架构(服务端和客户端),配置语法用的是YMAL。

2. Ansible

基于python开发,分布式,无需客户端,超轻量级,配置语法也用的是YMAL,使用SSH来管理客户端


【分享吧】基于Ansible实现平台自动部署初探

Ansible的工作原理


Ansible 在管理节点将 Ansible 模块通过 SSH 协议推送到被管理端执行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排。

我们要用Ansible做什么?

应对交易系统分布式多模块多终端的部署问题,我们现在来尝试使用Ansible加快部署以及快速配置。

【分享吧】基于Ansible实现平台自动部署初探

安装Ansible


这里以RedHat/CentOS系Linux为例,其他系统请参考ansible的官网。

   管理员的电脑上:



安裝Ansible软件

$> # Redhat/CentOS Linux上,Ansible目前放在的epel源中

$> # epel源中包含ansible,直接安装包既可

$> sudo yum install epel-release

$> sudo yum install ansible -y

   

配置Ansible管理节点和主机的连接

其实就是配置从管理节点到远程主机之间基于key(无密码的方式)的SSH连接:

$> # 生成ssh key

$> ssh-keygen

$> # 拷贝ssh key到远程主机,ssh的时候就不需要输入密码了

$>ssh-copy-id remoteuser@remoteserver

$> # ssh的时候不会提示是否保存key

$>ssh-keyscan remote_servers >>   ~/.ssh/known_hosts


验证SSH配置: 在管理节点执行下面的ssh命令,既不需要输入密码,也不会提醒你存储key,那就成功啦。

$> ssh remoteuser@remoteserver


   被管理的远程主机:


不需要安装特殊的包,只需要python>2.4,RedHat/CentOS Linux一般安装方式都是默认安装的。


配置Ansible


打开Ansible配置文件/etc/ansible/hosts

$> vim /etc/ansible/hosts


添加被控制组

[webhosts]

192.168.1.10 ansible_ssh_user=root ansible_ssh_pass=passwd

[tg_group]

192.168.2.10 ansible_ssh_user=root

192.168.2.11 ansible_ssh_user=root

[te_group]

192.168.3.11 ansible_ssh_user=root


解释

#ansible_ssh_user=root     是ssh登陆用户

#ansible_ssh_pass=passwd   是ssh登陆密码,如果设置免密钥登陆则可不填





测试各个模块


  注意每个模块的用法可以使用 ansible-doc MOD 来查看例如ansible-doc copy



现在ping 你的所有节点

  $> ansible   all -m ping


192.168.1.10| SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.2.10 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.2.11 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.2.10 | SUCCESS => {
"changed": false,
"ping": "pong"
}
   

哈,至此你已经可以与所有的节点通信啦。



下面我们试一试发布文件到某个结点

$> ansible te_group -m copy -a "src=/run.sh dest=/"


将服务端的run.sh拷贝至被控端的根目录下

192.168.3.11 | success >> {

   "changed": true,

 "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",

    "dest": "/run.sh",

    "gid": 0,

  "group": "root",  "md5sum":"d41d8cd98f00b204e9800998ecf8427e",

    "mode": "0644",

    "owner": "root", 

 "secontext": "system_u:object_r:etc_runtime_t:s0",

    "size": 0,

"src": "/root/.ansible/tmp/ansible-tmp1426517500.45-83590373054645/source",

    "state": "file",

    "uid": 0

   }



现在我们要执行他

$> ansible te_group -m copy -a "src=/run.sh dest=/"


192.168.3.11 | success >> {

    "changed": true,

    "rc": 0,

    "stderr": "",

    "stdout": ""

  }


怎么执行命令呢

$> ansible tg_group -m command -a "date"


192.168.2.10 | success | rc=0 >>

2017年 12月 16日 星期六 15:26:32 DST

 

192.168.2.11 | success | rc=0 >>

2017年 12月 16日 星期六 15:26:32 DST 


至此我们已经可以简单应用Ansible了。下面我们来使用playbook。



【分享吧】基于Ansible实现平台自动部署初探


什么是playbook

playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,计算机按照剧本表演安装,部署应用,提供对外服务,以及组织计算机处理等各种各样的事情。Ansible可以做的事情都可以用playbook写剧本。


playbook格式

playbook由YMAL语言编写。

YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。

YMAL语法请参考ansible的官网



一个playbook的实例


- hosts: webhosts
  sudo: yes
 
  tasks:
   - name: 安装Apache
     yum: name={{ item }} state=present
     with_items:
     - httpd
     - httpd-devel
   - name: 复制配置文件
     copy:
       src: "{{ item.src }}"
       dest: "{{ item.dest }}"
       owner: root
       group: root
       mode: 0644
     with_items:
     - {
       src: "/tmp/httpd.conf",
       dest: "/etc/httpd/conf/httpd.conf"
       }
     - {
       src: "/tmp/httpd-vhosts.conf",
       dest: "/etc/httpd/conf/httpd-vhosts.conf"
       }
   - name: 检查Apache运行状态,并设置开机启动
 service: name=httpd state=started enabled=yes



执行一下


$> ansible-book temp.yml


好了,现在我们就可以进行平台的自动化部署啦。



以上是关于分享吧基于Ansible实现平台自动部署初探的主要内容,如果未能解决你的问题,请参考以下文章

结合Ansible在AWS云计算平台上实现运维自动化

运维自动化之ansible

初创公司如何实现 Ansible 多机房自动部署发布 | 岂安低调分享

linux自动化运维平台ansible部署

ANSIBLE自动部署实践

自动化运维工具Ansible