运维SRE-15 自动化批量管理-ansible1

时间:2024-02-23 11:16:44
## 1.什么是自动化批量管理
重复性工作与内容: 思考如何自动化完成.
部署环境,批量查看信息,批量检查:自动化
一般步骤:
	1.如何手动实现
	2.如何自动化管理工具,批量实现
	3.注意事项:想要自动化一定要先标准化(所有环境,软件,目录一致)
	4.注意事项:尽量进行分组(比如:所有web服务器是1组)

2.自动化工具选择

自动化批量管理工具
Ansible 基于python语言编写,使用极其简单,不需要客户端
Saltstack 基于python语言编写,需要安装客户端
TereForm 批量管理平台,批量创建阿里云服务器,批量创建aws服务器
Fabric python使用它
Chef 了解即可
puppet 古老一些的批量管理工具

3.Ansible架构

在这里插入图片描述

4.Ansible极速使用指南

4.1 环境准备

ansible环境
ansible管理端 m01,10.0.0.210
被管理机器 web01 10.0.0.7
被管理机器 backup 10.0.0.41
被管理机器 nfs01 10.0.0.31
被管理机器 db01 10.0.0.51
sh /server/scripts/ssh_check.sh hostname

4.2 ansible部署

m01

yum install -y ansible
#epel源中的软件包

4.3 初步配置主机清单(inventory)

root@m01 /etc/ansible]# cat hosts 
[hbinz]
172.16.1.7
172.16.1.31
172.16.1.41
172.16.1.51

4.4与ansible的第一次接触

ansible hbinz -m ping
#第一次会提示yes/no

在这里插入图片描述

4.5 小结

1.密钥认证
2.环境准备,部署ansible
3.修改ansible 主机清单
4.测试,ansible hbinz -m ping
ansible命令格式
ansible 主机分组 -m指定模块
ansible 主机分组 -m指定模块 -a 指定模块中的选项
module action

5.ansible配置文件

ansible.cfg   #ansible配置文件
#71:host_key_checking = False  主机校验关掉
hosts			#ansible默认的主机清单		

6.ansible主机清单

6.1 基本格式

[root@m01 /etc/ansible]# cat hosts 
[hbinz]  #[组的名字]
172.16.1.7
172.16.1.31
172.16.1.41
172.16.1.51

[web]
172.16.1.7
[db]
172.16.1.51
[nfs]
172.16.1.31
[backup]
172.16.1.41

6.2指定用户名,密码,端口

主机清单中指定信息
连接的ssh端口 ansible_ssh_root=22
连接的ssh端口 ansible_ssh_user=root
连接的ssh端口 ansible_ssh_pass=‘thinker’
[web]
172.16.1.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
[db]
172.16.1.51
[nfs]
172.16.1.31
[backup]
172.16.1.41

6.3 子组

我想把多个主机分组进行合并,比如把db,nfs,backup合并成一个组叫data组.
[web]
172.16.1.7
[db]
172.16.1.51
[nfs]
172.16.1.31
[backup]
172.16.1.41

[data:children] #data:children表示data是创建的子组,组里面包含 db,nfs,backup3个组.
db
nfs
backup

6.4主机清单案例

1)案例1:查看与使用指定的子组 data
ansible data -m command -a 'hostname'
2)案例2:查看指定的组db
ansible db -m command -a 'hostname'
3)案例3:查看所有主机情况
ansible all -m command -a 'hostname'
4)案例4:查看某一机器
ansible 172.16.1.7 -m command -a 'hostname'

7.ansible核心模块

7.1模块概述

模块分类
命令和脚本模块 command模块,默认的模块,执行简单命令,不支持特殊符号
shell模块,执行命令,支持特殊符号
script模块,分发脚本并执行
文件 file,创建目录,文件,软链接
copy,远程分发文件,修改权限,所有者,备份
服务 systemd服务管理
service服务管理(了解)
软件包 yum源,yum repository
yum命令
get_url下载软件
系统管理 mount模块,挂载
cron模块,定时任务
用户管理 group模块,管理用户组
user模块,管理用户
其他可以研究 压缩解压(unarchive),rsync模块(synchronize),数据库模块(mysql_db,mysql_user)…
其他 ansible管理docker k8s zabbix grafana…
用于调试模块 ping 模块检查,ansible与其他节点连通性
debug模块,检查/显示变量

7.2如何查询帮助

通过命令: ansible-doc -s command
查看官网:

传送门

7.3ansible命令与脚本类模块

1)command模块

仅支持简单命令,不支持特殊符号,管道....
⚠ 这个模块是默认模块,ansible不加上模块,默认就使用这个模块.
ansible all -m command -a '命令'
ansible all -a 'hostname' #相当于省略 -m command

2)shell模块

与command类似,shell模块支持特殊符号,执行脚本...
ansible all -m shell -a 'ip a s eth0|sed -n 3p' #command不支持特殊符号
  • ansible颜色
    • 绿色表示正常
    • 黄色表示执行正常,状态变化
    • 红色表示错误,输出错误信息
    • 紫色表示警告,建议

3)script模块-传输脚本到被管理端并执行脚本

传输脚本
执行脚本
安装ipvsadm
cat /server/scripts/yum.sh
yum install -y ipvsadm

#安装
ansible db -m script -a '/server/scripts/yum.sh'
#检查
ansible db -m shell -a 'rpm -qa|grep ipvsadm'
[root@m01 /etc/ansible]# ansible db -m shell -a 'rpm -qa|grep ipvsadm'
[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because yum, dnf or zypper is insufficient you can add 'warn: false' to this command task
or set 'command_warnings=False' in ansible.cfg to get rid of this message.
172.16.1.51 | CHANGED | rc=0 >>
ipvsadm-1.27-8.el7.x86_64

4)命令与脚本模块

模块 含义 应用
command模块 执行命令 简单命令,不含特殊符号,默认的模块ansible all -a 'hostname'
shell模块 执行命令或脚本 执行含有特殊符号:管道,反引号,{}的命令,运行脚本(脚本在管理端).
script模块 先传输脚本,然后运行脚本 一般用于执行脚本

7.4ansible-文件与目录管理模块

  • file 创建文件,目录
  • copy 远程传输文件,目录,类似于scp

1)file模块
管理文件或目录,软链接

file模块中的选项
path 路径(目录,文件)必须要写
src(source源) 源文件一般用于link(创建软链接模式)用于指定源文件
state (状态)(模式)state=directory 创建目录state=file (默认)更新文件,如果文件不存在也不创建state=link 创建软链接state=touch 创建文件state=absent 删除

案例01-创建目录/hbinz/目录

ansible all -m file -a 'path=/hbinz state=directory'

案例02-创建文件/hbinz/hbinz.txt文件

ansible all -m file -a 'path=/hbinz/hbinz.txt state=touch'
ansible all -a 'ls -l /hbinz'

案例03-创建软链接 /hbinz/hbinz.txt到/tmp/hbinz.txt.soft

ansible all -m file -a 'src=/hbinz/hbinz.txt path=/tmp/hbinz.txt.soft state=link'

ansible all -a 'ls -l /tmp/hbinz.txt.soft'

案例04-删除文件、目录、软链接

ansible all -m file -a 'path=/hbinz/hbinz.txt state=absent'
ansible all -m file -a 'path=/hbinz state=absent'
ansible all -m file -a 'path=/tmp/hbinz.txt.soft state=absent'

案例05-创建文件/tmp/hbinz.txt,所有者root,用户组root,权限755

ansible all -m file -a 'path=/tmp/hbinz.txt owner=root group=root mode=755 state=touch'
ansible all -a 'ls -l /tmp/oldboy.txt'

2)copy远程传输模块

copy模块
src source源文件
dest destination目标
backup backup=yes 则会在覆盖前备份
mode 修改权限
owner 修改为指定所有者
group 修改为指定用户组

案例01-传输/etc/hosts文件到/etc/hosts

ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts'

案例02–传输/etc/hosts文件到/etc/hosts-先备份然后修改

ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts backup=yes'

3)文件传输小结

文件管理与传输 含义
file 创建/删除 文件/目录,软链接
copy 远程分发文件/目录,软件包,压缩包…

7.5ansible-服务管理模块

就是用了systemctl 命令
启动/关闭/重启服务
开机自启动/开机不自启动

1)systemd

systemd
name 用于指定服务名称
enabled 控制服务的开机自启动 enabled=yes /enable=no
state 表示服务开,关,重启…state=started 开启state=stopped 关闭state=reloaded 重读配置文件(服务支持的情况下sshd nfs nginx)state=restarted 重启(关闭再开启)
daemon-reload yes是否重新加载对应的服务的管理配置文件(讲解了systemctl配置文件.)
案例01-关闭firewalld
ansible all -m systemd -a 'name=firewalld enabled=no state=stopped'
ansible all -a 'systemctl state firewalld'

案例02-开启sshd服务

ansible all -m systemd -a 'name=sshd enabled=yes stat=started'
ansible all -a 'systemctl state sshd'

案例03-重启backup这台机器上面的rsync服务

ansible backup -m systemd -a 'name=rsyncd state=restarted'

2)service

服务管理模块 systemd模块 service模块
开机自启动 enabled enabled
服务名称 name name
服务开关重启 state state
运行级别 runlevel(运行级别)
重启加载systemctl配置 daemon_reload=yes systemctl daemon-reload

3)服务管理模块小结

模块
systemd 管理linux 红帽7以上推荐使用,ubuntu…
service 6及一下