抽空研究下自动运维神器 ,ansible ,基于SSH的管理,不需要agent

运维神器 ansible 安装部署_第1张图片

  • 核心:ansible
  • 核心模块(Core Modules):这些都是ansible自带的模块 
  • 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
  • 插件(Plugins):完成模块功能的补充
  • 剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
  • 连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件
  • 主机群(Host Inventory):定义ansible管理的主机


原理图

运维神器 ansible 安装部署_第2张图片

运维神器 ansible 安装部署_第3张图片

安装完ansible后,发现ansible一共为我们提供了七个指令:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault 。这里我们只查看usage部分,详细部分可以通过 “指令 -h” 的方式获取。

实验机的centos python有些问题,即便是更新了EPEL 用的还是2.4.0的,用github的30M一直下不来,换成ubuntu继续试验,不过实验结束之后发现centos yum不支持python 2.7 而ansible又需要这个库,所以免费的软件后期维护成本比较大

$ sudo apt-get install software-properties-common

$ sudo apt-add-repository ppa:ansible/ansible

$ sudo apt-get update

$ sudo apt-get install ansible

运维神器 ansible 安装部署_第4张图片

运维神器 ansible 安装部署_第5张图片

ansible all -m shell -a "hostname" --ask-pass -i /etc/ansible/hosts

运维神器 ansible 安装部署_第6张图片

新的2台服务器没有key

第一次链接的时候会提示

运维神器 ansible 安装部署_第7张图片

ubuntu 的编辑器有些怪,让我先修一下

sudo apt-get remove vim-common sudo apt-get install vim

sudo vi /etc/ansible/ansible.cfg

#ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s

ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no

运维神器 ansible 安装部署_第8张图片

sudo vi /etc/ansible/ansible.cfg

host key 检查改为false

运维神器 ansible 安装部署_第9张图片

居然拒绝了

e41b22e49aeb4d378638d986da7aedee

我先生成个key

ssh-keygen

运维神器 ansible 安装部署_第10张图片

ssh-copy-id pcdog@ansible2

运维神器 ansible 安装部署_第11张图片

ansible 192.168.209.146 -a 'uptime'

7e8fdca2f8834c74bf170b9ce67eecb6

可以看到受控机器的启动时间

ansible -m ping all

运维神器 ansible 安装部署_第12张图片

可以看到2台机器都已经可以ping通了

在/etc/ansible/hosts中把2台服务器合并到一个lab组中


310f53ed1c764269b1debf70f1d73b57

一组相似的 hostname , 可简写如下:

[webservers] www[01:50].example.com

数字的简写模式中,01:50 也可写为 1:50,意义相同.你还可以定义字母范围的简写模式:

[databases] db-[a:f].example.com


ansible lab -m command -a ls

运维神器 ansible 安装部署_第13张图片

同时可以列目录了

ansible有Patterns的规则

ansible -m -a

换成命令

ansible webservers -m service -a "name=httpd state=restarted"

可以同时对一个组执行某些服务的启动

具体的看官方文档。。。。

http://docs.ansible.com/ansible/latest/intro_patterns.html


相对来说ansible 管理起来还是比较简单,应用搭建过程不超过6个小时,大部分的维护命令需要写在playbook里面,我就不一一具体介绍了

http://docs.ansible.com/ansible/latest/playbooks.html