1、Ansible简介
ansible基于python开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能。默认通过SSH协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署变得更加简单。可同时支持多台主机并进行管理,使得管理主机更加便捷。主版本大概每2个月发布一次。
2、核心组件说明
Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.Core Modules:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。Connection Plugins:连接插件,Ansible和Host通信使用
3、Ansible的优势
1.轻量级;
2.不需要安装客户端,通过sshd通信;
3.基于模块工作,配置更加简单,容易上手。
4.使用Python开发。
4、Ansible的安装和配置
4.1Ansible的安装
代码语言:javascript复制 [root@docker-02 ~]# yum install ansible
4.2Ansible的配置
代码语言:javascript复制 [root@docker-02 ~]# vim /etc/ansible/ansible.cfg
inventory =/etc/ansible/inventory
roles_path =/data/ansible/roles
remote_user =root
4.3创建文件夹
代码语言:javascript复制 [root@docker-02 ~]# mkdir -p /etc/ansible/inventory
[root@docker-02 ~]# mkdir -p /data/ansible/playbooks
[root@docker-02 ~]# mkdir -p /data/ansible/roles
[root@docker-02 ~]# rm -rf /etc/ansible/host
[root@docker-02 ~]# rm -rf /etc/ansible/roles
4.4配置inventory
代码语言:javascript复制 [root@docker-02 ~]# vim /etc/ansible/inventory/lvs_list
[group]
docker-03
4.5对group组,使用shell模块,执行hostname命令
代码语言:javascript复制 [root@docker-02 ~]# ansible group -m shell -a 'ip add'
The authenticity of host 'docker-01 (172.17.120.50)'can't be established.
ECDSA key fingerprint is SHA256:Lg vWQTiAsfgFUcr PGAWPUc2d4C1dzSjf25SSWYGho.
ECDSA key fingerprint is MD5:01:00:72:55:c9:5d:b5:e4:82:e7:3c:8f:60:fc:37:95.
Are you sure you want to continue connecting (yes/no)? docker-03 | CHANGED | rc=0>>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP group default qlen 1000
link/ether 02:00:38:b7:00:53 brd ff:ff:ff:ff:ff:ff
inet 172.17.120.52/24 brd 172.17.120.255 scope global noprefixroute dynamic eth0
valid_lft 2356288sec preferred_lft 2356288sec
5、执行Playbook
代码语言:javascript复制 [root@docker-02 playbooks]# vim /data/ansible/playbooks/centos-os-init.yml
---
-hosts: group
tasks:
-name: upgrade all packages
yum:
name: '*'
state: latest
[root@docker-02 playbooks]# ansible-playbook /data/ansible/playbooks/centos-os-init.yml
PLAY [group] *******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [docker-03]
ok: [172.17.1.151]
ok: [172.17.1.150]
采用playbook的配置方式可以更加方便地对管理主机进行部署,可以对任务进行分类,包括像新装主机的初始化配置、安装应用程序、拷贝文件,修改权限等等。一路配置下了感觉非常方便快捷,上手很容易,确实是运维的一大利器,比puppet什么的不知道高明到哪里去了, 虽然我们公司用的仍然是puppet,但感觉还是Ansible方便好用啊。