一、初识Ansible
介绍:
Ansible 使用 模块(Modules)来定义配置任务。模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等。Ansible剧本(YAML语言编写)角色映射到 节点/虚拟机上,以对这些节点/虚拟机 进行编排有序的执行。Ansible支持ad-hoc任务:管理任务(不必幂等)以在多个节点/虚拟机上执行。Ansible具有无代理架构:你不需要在配置的节点/虚拟机上安装Ansible(然而,这些节点必须安装python环境),Ansible 通过SSH或者通过PowerShell(Windows机器)从单个控制机器上配置管理节点/虚拟机,并且能够支持并行配置多个节点。Ansible 可以用来配置 类unix系统或 Windows节点/虚拟机。
基本特点:
安装部署简单,支持多种方式安装(yum,git等)
支持分类过滤管理主机
轻量级,被管理端无需安装特定agent(需有python、ssh环境)
模块众多,可以满足我们的需要
开发社区活跃
Ansible playbook 剧本
支持各种公有云、私有云平台
基于Push推送方式,可以随时修改
幂等性(已经存在的修改后的状态,再次执行这个任务时,不会进行任何修改)
如图:
注:上图是从官方介绍视频中的截图。用户通过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
更新ansible 代码时用到的两条命令
[root@docker ansible]# git pull --rebase Current branch devel is up to date. [root@docker ansible]# git submodule update --init --recursive
2.检查验证
[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,以下类似)
所有主机: