公司大概有200多云主机须要进行管理,可是若是经过手工管理费时还累最终结果也容易出错,因此考虑经过自动化的方式来管理云主机,目前开源的自动化工具,你们用的比较多的有Ansible和Saltstack这两种,其实还有其余的只是相对于来讲已经没有这两个那么经常使用,我这边最先接触到的是ansible因此公司采用了ansible来管理主机,下面咱们介绍下ansible的安装配置。python
1、环境的准备git
1.Python2.6+:Ansible 是基于Python开发,因此咱们控制主机须要安装Python2.6以上版本;github
2.Jinja2:定义模板的时候使用Jinja2,而Jinja2是Python的现代模板语言;服务器
3.PyYAML:写Playbook时候定义的文件类型是ymal,而PyYAML是Python 的一个 YAML 编码/反编码函数库,;ssh
4.paramiko:Ansible 默认是基于SSH协议通讯,而paramiko纯 Python 编写的 SSHv2 协议函数库;函数
5.httplib2:一个功能全面的 HTTP 客户端函数库;工具
2、Ansible 安装测试
Ansible 默认基于SSH协议通讯,安装Ansible之后控制主机不须要启动或者后台运行任何的Ansible进行,只须要在控制主机安装Ansible,这样能够经过Ansible来管理任何一个被控节点,同时被控节点不须要安装任何客户端软件;ui
1.源码安装编码
# git clone git://github.com/ansible/ansible.git --recursive # cd ./ansible # source ./hacking/env-setup
2.yum/apt 安装
yum install ansible apt-get install ansible
3.pip安装
pip install ansible
4.检查下ansible 是否安装成功
ansible --version
返回ansbile 版本信息
ansible 2.4.2.0 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.6/site-packages/ansible executable location = /usr/bin/ansible python version = 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]
5.Ansible 命令集
ansible # 定义ansible 单任务 ansible-config # 查看、编辑、管理Ansible配置 ansible-doc # 文档查看工具 ansible-galaxy # 共享、下载roles的工具 ansible-inventory # 查看Inventory主机信息 ansible-playbook # 执行playbook ansible-pull # 仓库中拉去playbook ansible-vault # 文件加密、解密工具 ansible-console # ansible 控制台
3、配置运行环境
1.配置Ansible的环境
运行Ansible命令时,命令将按照预先设定的顺序前后查找配置文件
I.首先Ansible 会检查环境变量是否设置ANSIBLE_CONFIG,以及检查变量指向文件的路径; II.检查当前目录下是否包含ansible.cfg配置文件; III.再次检查当前用户的主目录是否包含ansible.cfg配置文件; IV.最后检查/etc/ansible 目录下是否包含ansible.cfg配置文件,通常经过软件管理包(yum/apt)安装时会自动在etc目录下生成配置文件;
注意:
经过pip安装时候,不会生成完成的ansible.cfg配置文件,此时咱们须要从github仓库中examples目录下拷贝ansible.cfg配置文件;
2.Ansible 主要配置文件
1 /etc/ansible/ansible.cfg #Ansible 配置文件 2 /etc/ansible/hosts #主机清单 3 /etc/ansible/roles/ #角色路径
4、Ansible Inventory
实际过程当中咱们须要管理不一样业务,不一样环境中的各类服务器资源,这些服务器的信息主要存储在Inventory 组件里面,ansible.cfg中默认定义配置文件的路径/etc/ansible/hosts;
1.定义主机和主机组
下面咱们来/etc/ansible/hosts 文件中定义主机和主机组
# Ex 1: 定义主机 192.168.100.10 # Ex 2:定义 'WebServers' 主机组 [WebServers] 10.172.139.53 10.30.49.72 10.30.49.[1:10] # 一组相似IP地址简写模式
说明:
方括号[]中表示的组名字,主要用于不一样类别的系统进行分类,便于对同一类的服务器资源进行管理;
2.主机和主机组变量
# 定义主机变量 10.30.49.72 ansible_port='61821' #定义ssh远程端口 # 定义主机组变量 # 下面的变量属于整个WebServers组 [WebServers:vars] ansible_ssh_pass='ansible' ansible_ssh_port='61821'
3.Inventory 经常使用参数说明
ansible_ssh_host # 链接的远程主机名. ansible_ssh_port # SSH远程链接端口,非标准端口设置. ansible_ssh_user # SSH远程链接用户名 ansible_ssh_pass # SSH远程链接帐号对应密码 (这种方式并容易泄露密码信息,建议使用 --ask-pass或者SSH认证) ansible_sudo_pass # sudo用户密码(这种方式并容易泄露密码信息,烈建议使用 --ask-sudo-pass)
5、编写第一个Ansible 程序
Ansible 安装完成之后,咱们基本的了解了Ansible的配置方式,下来咱们编写下第一个Ansible 程序
示例1:测试WebServers 服务器组连通讯
ansible WebServers -m ping -o 主机/主机组 模块
返回结果: 39.105.0.244 | SUCCESS => {"changed": false, "ping": "pong"} 47.104.149.180 | SUCCESS => {"changed": false, "ping": "pong"}
示例2:WebServers /opt 目录下建立ansible.txt文件
ansible 47.104.149.180 -m file -a "owner=root group=root mode=644 path=/opt/ansible.txt state=touch" -o 主机/主机组 模块 参数 返回结果: 47.104.149.180 | SUCCESS => {"changed": true, "dest": "/opt/ansible.txt", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "size": 0, "state": "file", "uid": 0}
经过以上的例子,咱们大概了了解了经过Ansible的命令来管理服务器,具体的模块信息和参数后面介绍,这里咱们只是来体会下Ansible的便捷性,这样咱们完成了Ansible的安装和配置。