Linux下ansible自动化运维工具(1)

一、ansible的介绍
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
二、ansible的优点
1.跨平台支持
2.人类可读自动化: ansible提供linux,Windows,unix和网络设备的无代理支持,适用于物理、虚拟、云和容器环境
3.完美描述应用:playbook
4.轻松管理版本控制:playbook是纯文本,可视作源代码(yaml代码)
5.支持动态清单
6.编排可与其他系统轻松集成:puppet、jenkins
7.基础架构即代码
8.减少人为错误
任务、play和playbook设计为具有幂等性,所以在运行playbook时,如果目标主机处于正确状态,则不会进行任何更改
三、安装 ansible
3.1在rhel8_node1上安装 ansible,充当控制节点

[root@workstation  mnt]# yum install -y ansible-2.8.0-1.el8ae.noarch.rpm 
[root@workstation  mnt]# yum install -y sshpass-1.06-3.el8ae.x86_64.rpm
[root@workstation  mnt]# yum install -y python3-jinja2-2.10.1-2.el8_0.noarch.rpm

在这里插入图片描述

3.2使用setup模块验证Python

[root@workstation  ~]# ansible -m setup localhost | grep ansible_python_version
        "ansible_python_version": "3.6.8",

四、部署ansible工具
4.1构建ansible清单
清单的含义——>定义ansible将要管理的一批主机
4.1.1静态清单和嵌套组
一台主机可以存在于多个主机组当中

在这里插入图片描述
4.1.2通过范围简化主机规格
可以通过指定主机名称或ip或字母和数字设置范围
语法[START:END]
如下所示

ip范围
172.25.[0:4].[0:254]  
172.25.1.0/24
172.25.2.0/24
172.25.2.0/24
172.25.3.0/24
172.25.4.0/24
 主机名范围
servers[01:10].example.com
servers01.example.com........servers10.example.com
不匹配servers1.example.com
字母范围
rhel8_nodeservers[01:10].example.com[a:c]
a.example.com....cexample.comc

4.1.3验证清单
在这里插入图片描述
默认清单位置:/etc/ansible/hosts 一般不使用默认的位置,都是新建
动态清单可以从开源社区的脚本中获得
5、ansible使用
在这里插入图片描述
在这里插入图片描述
5.1自定义清单
在这里插入图片描述
六、管理ansible配置文件
1.配置 ansible
配置文件:

1. /etc/ansible/ansible.cfg   基本配置文件,如果找不到其他配置文件,使用此文件;
2.  ~/.ansible.cfg   如果存在此配置并且当前工作目录中也没有 ansible.cfg,此文件代/etc/ansible/ansible.cfg ;
3. 清单目录中的ansible.cfg存在 执行 ansible 命令的目录中如果有 ansible.cfg 优先使用此文件,不会去使用上面两个(推荐使用此文件,上面两个配置文件不常用);

显示使用的配置文件
在这里插入图片描述
在这里插入图片描述
2.管理配置文件中的设置

[root@workstation deploy-inventory]# vim ansible.cfg 

在这里插入图片描述
3.使用sudo进行权利下方

[root@workstation deploy-inventory]# vim /etc/sudoers.d/student

在这里插入图片描述
七、运行临时命令
使用临时命令可以快速测试和更改ansible,无需编写 playbook

ansible host-pattern -m module [-a 'module arguments'] [-i inventory]
host:主机名称     -m:指定模块   -a: 模块参数   -i:清单路径

2.检查能否在受管主机上运行 python 模块
在这里插入图片描述
3.使用临时命令通过模块执行任务

[root@workstation ~]# ansible-doc -l     列出所有模块
[root@workstation ~]# ansible-doc ping   查看ping模块帮助文档

3.1ansible 模块

3.1.1文件模块:
 -copy: 将本地文件复制到受管主机
-file:  设置文件的权限和其他属性
-lineinfile: 确保特定行是否在文件中
-synchronize:使用 rsync 同步内容
3.1.2系统模块:
 -firewalld:使用 firewalld 管理任意端口和服务
-reboot:重启 -service:管理服务 -user:添加、删除和管理用户账户
3.1.2:Net Tools 模块:
 -get_url:通过 http、https、或者 ftp 下载文件
-nmcli:   管理网络 -uri:与 web 服务交互

四、实验
4.1使用 user 模块确保 student 用户存在于 servera.lab.example.com 且 uid 为 1000;

[root@workstation ~]# ansible -m user -a 'name=student uid=1000 state=present' servera.lab.example.com

在这里插入图片描述

[root@workstation ~]# ansible webservers -m command -a /usr/bin/hostname
[root@workstation ~]# ansible webservers -m command -a /usr/bin/hostname -o 
使用-o参数一行显示输出,方便统计

在这里插入图片描述
注意:command 模块允许执行远程命令,但这些命令不是 shell 处理,所以无法访问 shell 环 境变量,所以不能执行重定向、传送等操作。
4.2使用 shell 和 command 的区别

在这里插入图片描述
4.3使用command模块执行临时命令

[root@workstation ~]# mkdir deploy-adhoc
[root@workstation deploy-adhoc]# cat inventory 
[control_node]
serverb.lab.example.com

[web]
servera.lab.example.com

在这里插入图片描述

4.4使用 copy 模块
1.首先使用 student 用户,因为 student 用户没有写权限,所以会失败;
在这里插入图片描述
2.使用特权升级
注意:需在受管主机上进行权利下放(student用户增加权利)

[root@servera ~]# vim /etc/sudoers.d/student
[root@servera ~]# cat /etc/sudoers.d/student 
student   ALL=(ALL)    NOPASSWD: ALL
[root@serverb ~]# vim /etc/sudoers.d/student
[root@serverb ~]# cat /etc/sudoers.d/student 
student   ALL=(ALL)   NOPASSWD: ALL
[root@workstation ~]# cat /etc/sudoers.d/student 
student  ALL=(ALL)    NOPASSWD: ALL

参数解释:-m:指定模块;-a:指定块命令,content=" "指定添加信息\n换行, dest=/etc/motd添加信息路径,-u:指定受管主机登录时的用户身份,-k:表示输入密码(已经做过免密登录的可以不适用此参数);–become:超级用户身份登录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了46 篇原创文章 · 获赞 6 · 访问量 1340

猜你喜欢

转载自blog.csdn.net/qq_46089299/article/details/105291600