概述
Ansible 是一个基于Python开发的自动化运维管理工具,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、部署、运行命令等功能。
架构
Ansible架构Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架、主要包括:
(1)connection plugins:连接插件,负责和被监控端实现通信;
(2)host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)各种模块核心模块、command模块、自定义模块;
(4)借助于插件完成记录日志邮件等功能;
(5)playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
Ansible 安装要求及步骤
1. 系统centos7以上
2. 服务器安装python2.6或者python2.7
3. 安装epel源
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum clean all //安装完epel源清除一下缓存
yum install ansible -y //安装ansible
4. 配置免密
ssh-keygen -t rsa #此处回车三次
cd .ssh/
ssh-copy-id root@192.168.2.134 #设置免密的ip,password后面写的是密码
5. 验证是否免密成功
配置ip地址
vim /etc/ansible/hosts #里面添加你做完免密的ip
[web] //[web]只是一个被调用的名字
192.168.2.134
ping一下
[root@ke-cloud ansible]# ansible web -m ping
192.168.2.134 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
6. 非免密设置
vi /etc/ansible/ansible.cfg
host_key_checking = False
使用
- 常用参数
-m:要执行的模块,默认为command
-a:指定模块的参数
-i:指定hosts文件路径,默认default=/etc/ansible/hosts
-u:ssh连接的用户名,默认用root,ansible.cfg中可以配置
-b,--become:变成那个用户身份,不提示密码
-k:提示输入ssh登录密码,当使用密码验证的时候用
-s:sudo运行
-U:sudo到哪个用户,默认为root
-K:提示输入sudo密码,当不是NOPASSWD模式时使用
-C:只是测试一下会改变什么内容,不会真正去执行
-c:连接类型(default=smart)
-f:fork多少进程并发处理,默认为5个
-I:指定pattern,对已匹配的主机中再过滤一次
-list-host:只打印有哪些主机会执行这个命令,不会实际执行
-M:要执行的模块路径,默认为/usr/share/ansible
-o:压缩输出,摘要输出
--private-key:私钥路径
-T:ssh连接超时时间,默认是10秒
-t:日志输出到该目录,日志文件名以主机命名
-v:显示详细日志
- 常用
ansible server1 -m setup #产看指定主机server1上的facts变量信息
ansible * -m setup #查看指定的所有主机上的facts变量信息
ansible-doc -l #列出有哪些可用的模块,按q退出
ansible-doc -l | wc -l #列出有多少个可用的模块
ansible-doc -l | grep user #列出与user有关的模块
ansible-doc user #查看user模块的帮助文档,按q退出。也可以在最后一行输入/passwd,来过滤与passwd有关的内容
ansible test -a 'df -h' 在test组执行df -h命令
1.ping命令
上面验证时已经用过ping命令,那么现在重新配置一下其他测试节点,把用户名和密码都配置上去。
vim /etc/ansible/hosts
[test]
192.168.2.191
192.168.2.192
192.168.2.193
[test:vars]
ansible_ssh_user="root"
ansible_ssh_pass="123456"
- 测试验证
[root@ke-cloud ansible]# ansible test -m ping
192.168.2.193 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.2.192 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.2.191 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
- 查所有机器的版本型号
[root@ke-cloud ansible]# ansible test -m setup -a "filter=ansible_lsb"
192.168.2.192 | SUCCESS => {
"ansible_facts": {
"ansible_lsb": {},
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
192.168.2.191 | SUCCESS => {
"ansible_facts": {
"ansible_lsb": {},
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
192.168.2.193 | SUCCESS => {
"ansible_facts": {
"ansible_lsb": {},
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
- 类似常用命令filter
ansible test -m setup -a "filter=ansible_all_ipv4_addresses" //仅显示ipv4的信息
ansible test -m setup -a "filter=ansible_devices" //仅显示磁盘设备信息
ansible test -m setup -a "filter=ansible_distribution" //显示是什么系统,例:centos,suse等
ansible test -m setup -a "filter=ansible_distribution_major_version" //显示是系统主版本
ansible test -m setup -a "filter=ansible_machine" //显示系统类型,例:32位,还是64位
ansible test -m setup -a "filter=ansible_eth0" //仅显示eth0的信息
ansible test -m setup -a "filter=ansible_hostname" //仅显示主机名
ansible test -m setup -a "filter=ansible_kernel" //仅显示内核版本
ansible test -m setup -a "filter=ansible_lvm" //显示lvm相关信息
ansible test -m setup -a "filter=ansible_memtotal_mb" //显示系统总内存
ansible test -m setup -a "filter=ansible_memfree_mb" //显示可用系统内存
ansible test -m setup -a "filter=ansible_memory_mb" //详细显示内存情况
ansible test -m setup -a "filter=ansible_swaptotal_mb" //显示总的swap内存
ansible test -m setup -a "filter=ansible_swapfree_mb" //显示swap内存的可用内存
ansible test -m setup -a "filter=ansible_mounts" //显示系统磁盘挂载情况
ansible test -m setup -a "filter=ansible_processor" //显示cpu个数(具体显示每个cpu的型号)
ansible test -m setup -a "filter=ansible_processor_vcpus" //显示cpu个数(只显示总的个数)
ansible test -m setup -a "filter=ansible_python_version" //显示python版本
1. shell命令
- 采集内存
[root@ke-cloud ansible]# ansible web -m shell -a "free -h"
192.168.2.134 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 7.6G 428M 6.6G 8.8M 647M 7.0G
Swap: 0B 0B 0B
2. 脚本
- 创建脚本
vi net.sh
#!/bin/bash
date
hostname
- 执行脚本
[root@ke-cloud ansible]# ansible web -m script -a "./net.sh"
192.168.2.134 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.2.134 closed.\r\n",
"stderr_lines": [
"Shared connection to 192.168.2.134 closed."
],
"stdout": "Tue Mar 30 04:19:26 EDT 2021\r\ncentos7_9-mod\r\n",
"stdout_lines": [
"Tue Mar 30 04:19:26 EDT 2021",
"centos7_9-mod"
]
}
网友评论