ansible自动化运维学习(2)——基本环境的部署以及常用模块的使用(Inventory文件配置+ad-hoc指令)

本章对ansible的inventory文件的配置做了详解,让我们了解了如何定义主机、主机组、主机变量、主机组变量等配置。
你应该能:使用ansible ad-hoc指令,使用ansible常用模块

1.搭建实验环境

主机信息主机功能
server1(172.25.2.1 )主控端节点
server2(172.25.2.2)被控节点1
server3(172.25.2.3)被控节点2

(1)在真机中创建三个快照,并且开启
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)用真机连接三个实验节点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)在真机上搭建网络yum源,里面包括ansible以及一些依赖性关系的rpm包
在这里插入图片描述
在这里插入图片描述
(4)在server1上面编写yum配置文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.ansible基本环境的部署

(1)在server1上面安装ansible

下载ansible所需要的相关rpm包及其依赖包,进行安装
由于我在真机的网络yum源里面搭建了第三方仓库,因此这里直接安装,不需要处理依赖性关系
createrepo -v ansible的目录,这样就可以了

在这里插入图片描述
(2)查看一下安装的版本
在这里插入图片描述

(3)查看ansible的配置文件

/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
/etc/ansible/hosts 主机清单
/etc/ansible/roles/ 存放角色的目录

在这里插入图片描述
(4)编辑/etc/hosts文件,添加本地解析(因为ansible的连接是通过ssh)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(5)添加普通用户使用ansible,编辑ansible主配置文件

[devops@server1 ansible]$ vim ansible.cfg
[devops@server1 ansible]$ cat ansible.cfg 
[defaults]
inventory      = inventory		管理主机的清单

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(6)设置ansible主机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(7)设置ssh免密登陆
在这里插入图片描述
下面使用的密码为前面设置的devops密码
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
(8)给两个节点server2和server3同样添加devops用户,并且设置密码
在这里插入图片描述
在这里插入图片描述
(9)测试一下设置是否正确
在这里插入图片描述
手残将文件名写错了
测试所有的ansible节点是否可以ping通
在这里插入图片描述

3.ansible工具的常用参数及命令

参数功能
-m要执行的模块,默认为command
-a指定模块的参数
-ussh连接的用户名,默认用root,ansible.cfg中可以配置
-b,–become变成那个用户身份,不提示密码
-k提示输入ssh登录密码,当使用密码验证的时候用
-ssudo运行
-Usudo到哪个用户,默认为root
-K提示输入sudo密码,当不是NOPASSWD模式时使用
-C只是测试一下会改变什么内容,不会真正去执行
-c连接类型(default=smart)
-ffork多少进程并发处理,默认为5个
-i指定hosts文件路径,默认default=/etc/ansible/hosts
-I指定pattern,对已匹配的主机中再过滤一次
-list-host只打印有哪些主机会执行这个命令,不会实际执行
-M要执行的模块路径,默认为/usr/share/ansible
-o压缩输出,摘要输出
–private-key私钥路径
-Tssh连接超时时间,默认是10秒
-t日志输出到该目录,日志文件名以主机命名
-v显示详细日志

4.Inventory文件配置

其实命令和模块常常是结合在一起使用的

ansible命令示例

以bruce用户执行ping存活检测  # ansible all -m ping -u bruce  
以bruce sudo至root执行ping存活检测   ansible all -m ping -u bruce -b  
以bruce sudo至batman用户执行ping存活检测  # ansible all -m ping -u bruce -b --become-user batman 

ansible命令使用场景

非固化需求
临时一次性操作
二次开发接口调用

Inventory文件配置
Inventory是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在/etc/ansible/hosts

定义主机和组
# Inventory可以直接为IP地址  
172.25.0.2
# 端口号不是默认22端口时,可明确的表示为:
server2:2222
server2 ansible_port=2222 ansible_host=172.25.0.2
定义主机和组
# 中括号表示一个组,也可以表示一个范围
[webserver]
www[1:10].example.com
db-[a:f].example.com
定义主机变量
在playbook中使用时对主机进行个性化定制
[webserver]
web1 http_port=8080 maxRequestsPerChild=1024

定义组变量

[webserver]
server2
server3
[webserver:vars]
ntp_server=time1.aliyun.com
webserver组中的所有主机ntp_server值为time1.aliyun.com

定义组嵌套及组变量
组与组之间可以相互调用,并且可以向组中的主机指定变量。不过,这些变量只能在Ansible-playbook中使用,而Ansible不支持

[apache]  
server1
server2
[nginx]  
server3
server4   
[webservers:children]  
apache  
nginx 
[webservers:vars]  
ntp_server=time1.aliyun.com

在inventory 主文件中保存所有的变量并不是最佳的方式.还可以保存在独立的文件中

这些独立文件的格式为 YAML
/etc/ansible/group_vars/raleigh
/etc/ansible/group_vars/webservers
/etc/ansible/host_vars/foosball
当变量变得太多时,分文件定义变量更方便进行管理和组织
/etc/ansible/group_vars/raleigh/db_settings
/etc/ansible/group_vars/raleigh/cluster_settings

变量的检索位置

Inventory配置文件(默认/etc/ansible/hosts)
Playbook中vars定义的区域
Roles中vars目录下的文件
Roles同级目录group_vars和hosts_vars目录下的文件
大家设置变量时尽量沿用同一种方式,以方便维护人员管理。

Ansible与正则

匹配所有主机,all或*号功能相同。
ansible all –m ping  
ansible "*" -m ping 
ansible 172.25.0.* -m ping 
对多台主机或多个组同时执行,相互之间用冒号分隔即可
ansible "web1:web2" -m ping 
在webserver组但不在database组的主机,用感叹号表示
ansible 'webservers:!database' -m ping 
在webserver组和database组中同时存在的主机,用&符号表示
ansible "webservers:&database" -m ping
模糊匹配
*.example.com
www*.com:database 

5.Ansible Ad-Hoc命令集

(1)ad-hoc 使用场景
Ansible提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook
在学习了 playbooks 之后,你才能体会到 Ansible 真正的强大之处在哪里
ad-hoc更注重于解决一些简单或者平时工作中临时遇到的任务,相当于Linux系统命令行下的Shell命令
后者更适合于解决复杂或需固化下来的任务,相当于Linux系统的Shell Scripts。
使用场景
关闭所有不必要的服务器
临时更新Apache或Nginx的配置文件

(2)ansible命令执行流程
在这里插入图片描述

(3)Ansible的并发特性
Ansible和Ansible-playbook默认会fork 5个线程并发执行命令,如果同时操作的主机数比较多的话,可以调整到一个更大的值。

Ansible为我们提供了便捷的选项,-f指定线程数。
# ansible webserver -m ping -f 3 
ansible有许多模块,默认是 command,也就是命令模块,我们可以通过 -m 选项来指定不同的模块。

(4)Ansible-doc用法
ansible的模块非常之多,Ansible也提供了类似于man功能的help说明工具ansible-doc。
正式学习Ansible模块使用前,有必要先了解ansible-doc用法:

显示所有可用模块# ansible-doc -l
获取yum模块帮助# ansible-doc yum

(5)Ansible常用模块

copy模块
# ansible webservers -m copy -a "src=/etc/hosts   dest=/tmp/hosts"
file模块
# ansible webservers -m file -a "dest=/tmp/hosts mode=600 owner=root group=root"			#修改文件权限和属性
# ansible webservers -m file -a "dest=/tmp/dir1/dir2 mode=755 owner=root group=root state=directory"    #递归创建
# ansible webservers -m file -a "dest=/tmp/dir1/dir2 state=absent"
yum模块
# ansible webservers -m yum -a "name=httpd state=present"
# ansible server3 -m yum -a "name=http://172.25.0.250/rhel7.3/x86_64/dvd/Packages/vsftpd-3.0.2-21.el7.x86_64.rpm state=present"	#在线安装
# ansible server3 -m yum -a "name=/mnt/vsftpd-3.0.2-21.el7.x86_64.rpm state=present"			#本地安装
# ansible server3 -m yum -a "name=httpd state=absent"								#卸载软件
service模块
# ansible webservers -m service -a "name=httpd state=started"
# ansible webservers -m service -a "name=httpd state=restarted"
# ansible webservers -m service -a "name=httpd state=stopped"
user模块
# ansible all -m user -a "name=wxh password=<加密密码>"
# ansible all -m user -a "name=wxh state=absent remove=yes"
# ansibledb -m user -a "name=wxh shell=/bin/bash groups=users,wheel append=yes state=present" 
mysql_user模块
# ansible server3 -m mysql_user -a "name=wxh password=testpass priv=*.*:select host='%' state=present"
远程主机需要安装MySQL-python

(6)其余知识点

ansible server2 -m setup  		##查看指定主机server1上的facts变量信息
ansible all -m setup   			##查看指定的所有主机上的facts变量信息
ansible '*' -m setup			##同上
ansible-doc -l							##列出有哪些可用的模块,按q退出
ansible-doc -l | wc -l		##列出有多少个可用的模块
ansible-doc user			##查看user模块的帮助文档,按q退出。也可以在最后一行输入/passwd,来过滤与passwd有关的内容
ansible test -a 'df -h'  	##在test组执行df -h命令
(1)默认模块command
一般来说如果-m后面没有加模块则默认使用command模块
(2)copy模块
[devops@server1 ansible]$ ansible test -m copy -a 'src=/etc/passwd dest=/tmp/passwd'		
src为源地址(是ansible控制主机上的地址),dest为被控制节点主机的目标地址
查看是否将本机文件复制到server2上
(3)file模块
查看server2的/tmp下的文件权限(刚刚复制过去的文件)
查看权限
(4)yum模块
需要注意的是我们在使用yum的时候普通用户是要有sudo权限的
其实就是devops没有权限使用yum,只有sudo授权之后才有权限
因此先设置server2和server3中devops用户的sudo权限
[root@server2 ~]# vim /etc/sudoers	#保存退出时如果显示权力不够,则加wq!强制保存即可
[root@server3 ~]# vim /etc/sudoers
权限设置好以后,尝试在server2上安装httpd服务
[devops@server1 ansible]$ ansible test -m yum -a 'name=httpd state=present' -b	
##一定要加-b,指定sudo,否则回报错
查看是否下载成功
[devops@server1 ansible]$ ansible test -a 'rpm -q httpd'
当然如果不愿意加-b去特别指定的话,我们也可以修改主配置文件,给与sudo所需要的权限
[devops@server1 ansible]$ vim ansible.cfg 
[devops@server1 ansible]$ cat ansible.cfg 
[defaults]
inventory      = inventory
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
我们去尝试在server2和server3上都安装httpd,不加参数-b
[devops@server1 ansible]$ ansible webservers -m yum -a 'name=httpd state=present'
(5)service模块
启动db(server3)的httpd服务
[devops@server1 ansible]$ ansible db -m service -a 'name=httpd state=started'
我们给它写一个默认发布界面,方便我们测试
[devops@server1 ansible]$ ansible db -m copy -a 'content="hello world\n" dest=/var/www/html/index.html'
(6)firewalld防火墙模块
首先,开启防火墙
[devops@server1 ansible]$ ansible db -m service -a 'name=firewalld state=started enabled=true'
测试:
我们把httpd服务加入防火墙的白名单:
[devops@server1 ansible]$ ansible db -m firewalld -a 'service=http state=enabled permanent=yes immediate=yes'
关闭防火墙
[devops@server1 ansible]$ ansible db -m service -a 'name=firewalld state=stopped enabled=false'

6.常用命令和模块的练习

(1)ping一下远程主机组的所有主机

all表示所有远程的主机组,使用command模块,也是默认的模块,然后使用ping命令
可以看到server2和server3主机是可以ping通的

在这里插入图片描述

(2)使用devops的身份去检测

- u表示指定用户
可以看出以devops用户的身份去ping远程主机的devops用户是可以的
以devops用户的身份去ping远程主机的root用户是不可以的
记住:这里的用户指的都是远程主机的用户,拿谁家的钥匙开谁家的门

在这里插入图片描述
-b表示自动由devops用户转为root用户,因此还是不可以的
在这里插入图片描述
(3)copy模块
将本地的文件拷贝到远程主机(test组的主机)的tmp目录下面
这个是可以的,因为远程主机的devops用户对tmp目录有权限

在这里插入图片描述
在test组的server2主机上面查看一下是否拷贝成功
在这里插入图片描述
在server1主机上也可以直接查看,-a表示要执行的动作
在这里插入图片描述
也可以删除
在这里插入图片描述
删除完之后再次查看
在这里插入图片描述

将本地的文件拷贝到远程主机(test组的主机)的/mnt目录下面
这个是不可以的,因为server1和server2的 免密是devops用户的免密,devops用户对/mnt没有权限

在这里插入图片描述

在server2和server3上面授权,使devops具备root用户的权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

再次拷贝,发现就成功了

在这里插入图片描述

现在不想使用-b转换身份,想直接默认使用root身份
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
再次验证就成功了
在这里插入图片描述
(4)找出在test组里面但是不在prod组里面的主机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(5)找出既在test组又在prod组里面的所有主机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(6)找出所有组中的所有主机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(7)创建webserver组,批量检测
在这里插入图片描述
在这里插入图片描述
(8)yum模块

使用yum模块给webserver组里面的主机安装httpd服务
在这里插入图片描述
在这里插入图片描述
可以在server2上查看
在这里插入图片描述
也可以在server1上看是否给server2安装了
在这里插入图片描述
也可以查看webserver组里面的主机是否都安装了httpd服务
在这里插入图片描述
另外一种方法
在这里插入图片描述
关掉webserver组里面的刚才安装的httpd服务
在这里插入图片描述
在server2上面验证
在这里插入图片描述
再次验证
在这里插入图片描述
在这里插入图片描述

(9)给test组里面的主机安装httpd服务并且开启服务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关闭服务
在这里插入图片描述
在这里插入图片描述
(10)给test组的主机创建用户
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(11)查看主机的详细信息
在这里插入图片描述
(12)安装数据库
在这里插入图片描述
在这里插入图片描述
创建数据库用户并且授权

在这里插入图片描述
开启服务
在这里插入图片描述
远程登陆数据库
在这里插入图片描述
本机登陆数据库
在这里插入图片描述
创建用户的时候对用户密码加密
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值