ansible是开源工具,底层是用python写的
ansible也有web界面,可以直接鼠标点就可以,但是web界面收费
所以大部分企业不会用web界面
Ansible:Ansible的核心程序
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通信使用
Ansible的优点:
- Stupied Simple ,上手简单,学习曲线平滑
- SSH by default ,安全,无需安装客户端
- 配置简单、功能强大、扩展性强
- 支持API及自定义模块,可通过Python轻松扩展
- 通过Playbooks来定制强大的配置、状态管理
- 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台
- 幂等性:同样的操作不会重复执行,只会将改变了的再次执行。
Ansible的环境搭建:
需要2+台虚拟机,我是用三台虚拟机为大家讲解;
一台为ansible端,其余为client,测试使用。
前提关闭防火墙,在一个网段,可以互相ping通。
ansible端:
1.安装扩展软件包源和ansible软件包:
# yum -y install epel-release
# yum clean all
# yum makecache
# yum -y install ansible
2.编辑ansible配置文件:(设置无密码登录)
3.在三台虚拟机上执行创建密钥命令
# ssh-keygen
会生成两个文件,公钥和私钥
4.然后将公钥文件拷贝在测试机上并指定路径(路径是规定,就得这么写)
# scp id_rsa.pub root@192.168.29.138:/root/.ssh/authorized_keys
测试:ssh连接客户机ip,不需要输入密码就成功!
# ssh 客户机ip
# ssh 192.168.29.139
5.配置文件:/etc/ansible/hosts:记载着需要管理的主机的信息
添加组:
[xxxx] ——可以随意命名,但是后期要调用,尽量有象征性的命名;
192.168.29.137 ——需要管理的客户机的IP(也可以写域名)
192.168.29.138 ——需要管理的客户机的IP
6.测试:查看管理的两个主机通不通
# ansible group -m ping
7.ansible的简单命令使用:
·ansible-doc -l #查看支持的模块(命令)
·ansible-doc -s yum #查看yum模块用法
·nsible命令应用基础
ansible <host-pattern> [options]
-f forks:启动并发线程数
-m model_name:要使用的模块
-a args:特有的参数
·查看client端是否正常ping通
ansible all -m ping
·查看客户端信息
ansible group -m setup
格式:ansible 组名/all -m 指定模块 -a '操作'
·copy服务器的1.sh文件到cient端的指定路径下
ansible group -m copy -a 'src=/root/1.sh dest=/root/test'
·创建test用户
ansible group -m user -a "name=test state=present"
·删除test用户
ansible group -m user -a "name=test state=absent"
·yum安装
ansible group -m yum -a 'name=tree state=latest'
·停止httpd服务
ansible group -m service -a 'name=httpd state=stopped enabled=no'
·运行脚本
ansible group -m script -a '/tmp/test.sh'
·查看时间,是ansible默认模块,可以不指定模块。
ansible group -m command -a 'date'
playbook剧本:
playbook是运用ansible的一种非常强大的方式,是由多个play组成。
简单来说,playbooks 是一种简单的配置管理系统与多机器部署系统的基础.与现有的其他系统有不同之处,且非常适合于复杂应用的部署.
一下范例中的格式必须严格遵守,必须的必。
例一:基础
例二:变量
定义变量: vars
变量名=变量
调用变量:{{ 变量名 }}
例三:迭代
whith_item:要写在当前name的最下面
例四:触发器notify
例五:模板文件templates
先复制一个httpd.conf文件在主server任意目录下,
修改配置文件,调用变量,将端口号改为 {{ port }}
修改配置文件:/etc/ansible/hosts,指定两个客户机的端口
在两个客户端 ss -tnl 查看端口:
例六:单个任务执行tags
调用:ansible xxx.yml tags='add_user'
例七:角色roles:代码复用
mkdir -pv ansible_playbooks/roles/{webservers,dbservers}/{tasks,files,templates,meta,handlers,vars}
拓展:epel源 EPEL 是yum的一个软件源,里面包含了许多基本源里没有的软件了,但在我们在使用epel时是需要安装它才可以了,EPEL,即Extra Packages for Enterprise Linux的简称,是为企业级Linux提供的一组高质量的额外软件包,
安装之前:yum repolist
安装后:软件包多了很多