一、初识 Ansible
介绍:
使用 来定义配置任务。模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等。Ansible 剧本(YAML 语言编写)角色映射到 节点 / 虚拟机上,以对这些节点 / 虚拟机 进行编排有序的执行。Ansible 支持 ad-hoc 任务:管理任务(不必幂等)以在多个节点 / 虚拟机上执行。Ansible 具有无代理架构:你不需要在配置的节点 / 虚拟机上安装 Ansible(然而,这些节点必须安装 python 环境),Ansible 通过 SSH 或者通过 PowerShell(Windows 机器)从单个控制机器上配置管理节点 / 虚拟机,并且能够支持并行配置多个节点。Ansible 可以用来配置 类 unix 系统或 Windows 节点 / 虚拟机。
基本特点:
如图:
注:上图是从官方介绍视频中的截图。用户通过 ansible 自动化引擎, 使用 playbook ,插件、模块去去管理被控制主机。并可以结合 CMDB 管理系统。
二、Ansible 运行环境
1.ansible 的安装支持多种方式。
官方建议:
2. 控制机要求:
Ansible 可以运行在有 python 2.6 或者 2。7 环境的类 unix 环境。windows 暂不支持
3. 被控制节点要求
控制节点需要和 Ansible 被控制节点通信,通常使用 ssh 进行连接。另外也需要 python 环境。
三、Ansible 安装
1. 控制管理机安装(安装方式有多种,源码,pip 等方式),我们这里使用 git 源码安装方式进行部署
- [root@docker~]#git clone git: //github.com/ansible/ansible.git --recursive
- [root@docker~]#cd ansible /
进行源码安装
- [root@docker ansible]#make && make install
先安装 pip 包管理工具,然后安装 ansible 程序所使用的几个 python 模块
- [root@docker ansible]#easy_install pip[root@docker ansible]#pip install paramiko PyYAML Jinja2 httplib2 six
- [root@docker ansible]#ansible--version ansible 2.3.0 config file = configured module search path = Default w / o overrides
三、配置 Ansible 尝试下管理主机
1. 默认配置文件在你 git 下载源码的目录 ansible 目录中
- /root/ansible / bin / ansible
2. 创建 hosts 存放目录,并编写 hosts 文件
- [root@docker ansible]#mkdir - pv / etc / ansible / mkdir: created directory '/etc/ansible/'
从安装文件中,拷贝 hosts
- [root@docker ansible]#cp / root / ansible / examples / hosts / etc / ansible / .
编写 hosts 文件,添加 1 个主机
3. 创建俩 docker 容器吧
- [root@docker~]#docker run - d - it--name centos - 1 centos_sshd_1 b032a6c8b4014837181029059661104373db8a6190a1f854ae5ff701b961a546
- [root@docker~]#docker run - d - it--name centos - 2 centos_sshd_1 cc647f916437df70b54096bcf676804114d1558124234b7716aee68271414f27
容器创建完,默认已经启动了 sshd 服务开启 22 端口(这里可以查看后续我发的 Docker 自定义镜像的文章),我们查看下它们的 ip
- [root@docker~]#docker exec centos - 1 hostname - I 172.17.0.2[root@docker~]#docker exec centos - 2 hostname - I 172.17.0.3
4. 将上面 2 个被控制主机的 ip 添加到 hosts 文件中,并进行通信测试
打开 / etc/ansible/hosts 文件,在末尾按照以下格式添加。
- [cenots_group] 172.17.0.2 172.17.0.3
添加完成后,在控制主机上使用 ping 模块进行测试,如下:(约定:被控主机称为 client,控制主机称为 managent,以下类似)
所有主机:
- [root@docker~]#ansible '*' - m ping--ask - pass SSH password: 172.17.0.3 | SUCCESS = >{
- "changed": false,
- "ping": "pong"
- }
- 172.17.0.2 | SUCCESS = >{
- "changed": false,
- "ping": "pong"
- }
指定组的方式:
- [root@docker~]#ansible centos_group - m ping--ask - pass SSH password: 172.17.0.2 | SUCCESS = >{
- "changed": false,
- "ping": "pong"
- }
- 172.17.0.3 | SUCCESS = >{
- "changed": false,
- "ping": "pong"
- }
指定单个主机的方式:
- [root@docker~]#ansible '172.17.0.3' - m ping--ask - pass SSH password: 172.17.0.3 | SUCCESS = >{
- "changed": false,
- "ping": "pong"
- }
解释:ansible 命令后面,跟的第一个参数,也就是我们 hosts 文件里面的主机清单(可以指定单个主机 ip,也可以是组,也支持正则匹配); 第二个参数是使用 - m 指定模块,这里我们用了 ping 模块。 --ask-pass 这个是当我们使用主机密码来进行 ssh 认证时的参数,多次输入后,会感觉比较麻烦。推荐使用密钥的方式,安全又方便。下面说下如何用公钥
5. 使用密钥来进行 ssh 远程访问
先在 management 上生成公钥私钥对
- [root@docker~]#ssh - keygen - t rsa - C "management"
将公钥放到使用 ssh-copy-id 命令,上传到 client 上面去。
- [root@docker~]#ssh - copy - id - i / root / .ssh / id_rsa.pub root@172.17.0.2[root@docker~]#ssh - copy - id - i / root / .ssh / id_rsa.pub root@172.17.0.3
现在再试下管理命令,不用输入密码了
- [root@docker~]#ansible centos_group - a "/bin/echo Hello world"172.17.0.3 | SUCCESS | rc = 0 >> Hello world 172.17.0.2 | SUCCESS | rc = 0 >> Hello world
ok,等下一次学习 Inventory(资源清单)时,再来分享吧。
注:ansible 是第二次开始写的连载系列文章,如果喜欢可以关注哦。如果感觉有不好的地方,一定要不吝赐教哈。我会非常非常感激的。另外,如果你觉得本文对你有帮助,欢迎转载,但务必要注明出处啊。
参考链接:
http://docs.ansible.com/
来源: http://www.cnblogs.com/hanyifeng/p/6110926.html