Ansible 学习
一、Ansible 概述
1.什么是Ansible
Ansible是一个自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复性的工作和维护成本,可以提高工作效率。
2.自动化工具
1. puppet 学习难,安装ruby环境难,没有远程执行功能
2. ansible 轻量级,大规模环境下只通过ssh会很慢,串行的,也会有小量的并行。
3. saltstack 一般选择salt会使用C/S结构的模式,salt-master和salt-minion,并行的,大规模批量操作的情况下,会比Ansible速度快一些,底层使用的是zero-MQ消息队列
1.` 下载saltstack源
yum install -y https://repo.saltstack.com/py3/redhat/salt-py3-repo-latest.el7.noarch.rpm
2.` 服务端下载
yum install salt-master -y
2.` 服务端下载
yum install salt-minion -y
'ansible与saltstack的差别。'
3.自动化运维相较于手动运维
1.提高工作效率
2.提高了工作的准确度
3.减少人员成本
4.减少了重复的工作
'例如公司要你用源码安装100台nginx,如果一台一台安装,就太麻烦了。如果用了ansible,就可以用一条命令,让让100台服务器执行源码安装'
4.Ansible的功能及优点
1.远程执行
批量执行远程命令,可以对多台主机进行远程操作
2.配置管理
批量配置软件服务,可以进行自动化方式配置,服务的统一配置管理,和启停
3.事件驱动
通过Ansible的模块,对服务进行不同的事件驱动
比如:
1)修改配置后重启
2)只修改配置文件,不重启
3)修改配置文件后,重新加载
4)远程启停服务管理
4.管理公有云
通过API接口的方式管理公有云,不过这方面做的不如saltstack.
saltstack本身可以通过saltcloud管理各大云厂商的云平台。
5.二次开发
因为语法是Python,所以便于运维进行二次开发。
6.任务编排
可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套架构的部署
7.跨平台,跨系统
几乎不受到平台和系统的限制,比如安装apache和启动服务
在Ubuntu上安装apache服务名字叫apache2
在CentOS上安装apache服务名字叫httpd
在CentOS6上启动服务器使用命令:/etc/init.d/nginx start
在CentOS7上启动服务器使用命令:systemctl start nginx
二、Ansible 构成
1.组成部分
1.连接插件connection plugins用于连接主机 用来连接被管理端
2.核心模块core modules连接主机实现操作, 它依赖于具体的模块来做具体的事情
3.自定义模块custom modules根据自己的需求编写具体的模块
4.插件plugins完成模块功能的补充
5.剧本playbookansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
6.主机清单inventor定义ansible需要操作主机的范围
最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块
2.Ansible执行流程
1.Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些任务。
2.首先Ansible通过主机清单找到要执行的主机,然后调用具体的模块。
3.其次Ansible会通过连接插件连接对应的主机并推送对应的任务列表。
4.最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行。
三、Ansible使用
1.环境准备
主机 外网IP 内网IP 身份 m01 10.0.0.61 172.16.1.61 控制端 web01 10.0.0.7 172.16.1.7 受控端 web02 10.0.0.8 172.16.1.8 受控端
2.控制端安装ansible
[ root@m01 ~]
[ root@m01 ~]
3.ansible参数
--version
-v
-i
-k
-C
-T
-m
-a
--syntax-check
[ root@m01 ~]
ansible 2.9.15
config file = /etc/ansible/ansible.cfg
configured module search path = [ u'/root/.ansible/plugins/modules' , u'/usr/share/ansible/plugins/modules' ]
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 ( default, Oct 30 2018, 23:45:53) [ GCC 4.8.5 20150623 ( Red Hat 4.8.5-36) ]
4.ansible配置文件
[ root@m01 ~]
[ root@m01 ~]
[ root@m01 ~]
For a full list check \fI\%https://docs.ansible.com/\fP\& . or use the \fIansible\-config\fP command.
/etc/ansible/ansible.cfg \-\- Config file, used if present
~/.ansible.cfg \-\- User config file, overrides the default config if present
\& ./ansible.cfg \-\- Local config file ( in current working directory) assumed to be \( aqproject specific\( aq and overrides the rest if present.
As mentioned above, the ANSIBLE_CONFIG environment variable will override all others.
5.ansible配置文件解释
[ root@m01 ~]
host_key_checking = False
log_path = /var/log/ansible.log
[ privilege_escalation]
四、主机清单配置
1.基于密码的方式
1)单主机配置
[ root@m01 ~]
[ web01]
10.0.0.7 ansible_ssh_user= root ansible_ssh_port= 22 ansible_ssh_pass= '1'
[ web02]
10.0.0.8 ansible_ssh_user= root ansible_ssh_port= 22 ansible_ssh_pass= '1'
[ root@m01 ~]
10.0.0.7 | SUCCESS = > {
"ansible_facts" : {
"discovered_interpreter_python" : "/usr/bin/python"
} ,
"changed" : false,
"ping" : "pong"
}
[ root@m01 ~]
[ web01]
10.0.0.7 ansible_ssh_pass= '1'
[ web02]
10.0.0.8 ansible_ssh_pass= '1'
[ root@m01 ~]
10.0.0.8 | SUCCESS = > {
"ansible_facts" : {
"discovered_interpreter_python" : "/usr/bin/python"
} ,
"changed" : false,
"ping" : "pong"
}
2)多主机配置
[ root@m01 ~]
[ web_group]
10.0.0.7 ansible_ssh_pass= '1'
10.0.0.8 ansible_ssh_pass= '1'
[ root@m01 ~]
10.0.0.8 | SUCCESS = > {
"ansible_facts" : {
"discovered_interpreter_python" : "/usr/bin/python"
} ,
"changed" : false,
"ping" : "pong"
}
10.0.0.7 | SUCCESS = > {
"ansible_facts" : {
"discovered_interpreter_python" : "/usr/bin/python"
} ,
"changed" : false,
"ping" : "pong"
}
2.基于秘钥的方式
1)生成密钥对
1.` 生成密钥对
[ root@m01 ~] # ssh-keygen
2.` 推送公钥,不用在主机清单,对应的主机IP,配密码,
[ root@m01 ~]
[ root@m01 ~]
3.` 配置主机清单
[ root@m01 ~] # vim /etc/ansible/hosts
# 珍贵的说明
'这时候,执行ansible的命令,可以对于' ` [ web_group] ` '的成员,都可以成功,但是,针对' ` [ web_group] ` '下的某一个成员执行命令,会比较麻烦。虽然可以成功,但是容易记错。所以可以在 管理端的/etc/hosts文件,配上成员的名字+对应的IP。但是注意,配置的组名不要和管理端的 /etc/hosts 文件名字重名 ,不然ansible识别不了,会冲突。
[ web_group]
10.0.0.7
10.0.0.8
4.` 配置hosts
[ root@m01 ~]
10.0.0.7 web01
10.0.0.8 web02
5.` 修改hosts配置主机清单
[ root@m01 ~] # vim /etc/ansible/hosts
[ web_group]
web01
web02
6.` #测试
[ root@m01 ~] # ansible 'web_group' -m ping
[ root@m01 ~]
3.定义整合组
1)定义整合组
`整合组:
[ root@m01 ~]
[ web_group]
web01
web02
[ nfs_server]
nfs ansible_ssh_pass= '1'
[ rsync_server]
backup ansible_ssh_pass= '1'
[ db_server]
db01 ansible_ssh_pass= '1'
[ www:children]
web_group
nfs_server
rsync_server
[ root@m01 ~]
10.0.0.7 web01
10.0.0.8 web02
10.0.0.31 nfs
10.0.0.41 backup
10.0.0.51 db01
2)查看整合组下面的主机组
[ root@m01 ~]
hosts ( 4) :
web01
web02
nfs
backup
4.测试
` 测试某个的组单个主机
[ root@m01 ~] # ansible 'web01' -m ping
` 测试所有主机
[ root@m01 ~]
` 测试所有主机
[ root@m01 ~] # ansible 'all' -m ping
` 测试主机组
[ root@m01 ~]
`测试组合组
[ root@m01 ~]
Ansible ad-hoc
一、ad-hoc概述
1.` 什么是ad-hoc
ad-hoc简而言之就是"远程临时命令" ,执行完即结束,并不会保存
2.` 使用场景
比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等
临时使用的命令,一次使用
3.ad-hoc模式的命令使用
` 查看 web01 主机的硬盘使用率
[ root@m01 ~] # ansible web01 -m command -a 'df -h'
web01 | CHANGED | rc= 0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.6G 17G 9% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 127M 888M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
` 查看 web_group 组所有成员的硬盘使用率
[ root@m01 ~]
web01 | CHANGED | rc= 0 >>
total used free shared buff/cache available
Mem: 972 128 481 7 362 658
Swap: 1023 0 1023
web02 | CHANGED | rc= 0 >>
total used free shared buff/cache available
Mem: 972 111 551 7 309 691
Swap: 1023 0 1023
4.ad-hoc结果返回颜色
`绿色: 代表被管理端主机没有被修改
'红色: 代表出现了故障,注意查看提示
5.ad-hoc常用模块
command
shell
scripts
yum_repository
yum
copy
file
service
systemd
mount
cron
get_url
firewalld
selinux
setup
6.ansible帮助
[ root@m01 ~]
[ root@m01 ~]
[ root@m01 ~]
二、Ansible ad-hoc命令模块
1.command 模块(不识别特殊符号)
[ root@m01 ~]
web01 | CHANGED | rc= 0 >>
total used free shared buff/cache available
Mem: 972 128 480 7 363 658
Swap: 1023 0 1023
[ root@m01 ~]
web01 | FAILED | rc= 1 >>
error: garbage option
Usage:
ps [ options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps( 1) .non-zero return code
2.shell 模块
[ root@m01 ~]
web01 | CHANGED | rc= 0 >>
root 12680 12675 0 17:51 pts/0 00:00:00 /bin/sh -c ps -ef | grep nginx
root 12682 12680 0 17:51 pts/0 00:00:00 grep nginx
[ root@m01 ~]
web01 | CHANGED | rc= 0 >>
inet 10.0.0.7 netmask 255.255.255.0 broadcast 10.0.0.255
[ root@m01 ~]
web01 | CHANGED | rc= 0 >>
10.0.0.7
[ root@m01 ~]