Ansible部署应用
目录
- Ansible概述
- 1:什么是Ansible
- 2:Ansible的架构组成
- 3:Ansible与SaltStack的对比
- 安装部署Ansible服务
- 1:系统环境设置
- 2:安装Ansible(第一台)
- 2:配置主机清单
- 3:修改Ansible配置文件
- Ansible命令应用基础
- 1:command模块
- 2:shell模块
- 3:user模块
- 4:cron模块
- 5:group模块
- 6:copy模块
- 7:file模块
- 9:script模块
Ansible概述
1:什么是Ansible
Ansible 是基于 Python 开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能的自动化运维管理工具。默认通过 SSH 协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署,变得更加简单。可同时支持多台主机并行管理,使得管理主机更加便捷。
2:Ansible的架构组成
Ansible 可以看作是一种基于模块进行工作的框架结构, 批量部署能力就是由Ansible 所运行的模块实现的。简而言之 Ansible 是基于“模块”完成各种“任务”的。其基本框架结构如下图 所示。
由上图可以得出 Ansible 的基本架构由六大件构成。
Ansible core 核心引擎:即 Ansible 本身;
Host Inventory 主机清单: 用来定义 Ansible 所管理主机, 默认是在 Ansible 的 hosts 配置文件中定义被管理主机, 同时也支持自定义动态主机清单和指定其它配置文件的位置;
Connect plugin 连接插件:负责和被管理主机实现通信。除支持使用SSH连接被管理主机外,Ansible 还支持其它的连接方式,所以需要有连接插件将各个主机用连接插件连接到 Ansible;
Playbook( yaml, jinjia2) 剧本:用来集中定义 Ansible 任务的配置文件, 即将多个任务定义在一个剧本中由 Ansible自动执行, 可以由控制主机针对多台被管理主机同时运行多个任务;
Core modules 核心模块:是 Ansible 自带的模块,使用这些模块将资源分发到被管理主机使其执行特定任务或匹配特定的状态;
Custom modules 自定义模块:用于完成模块功能的补充,可借助相关插件完成记录日志、发送邮件等功能。
3:Ansible与SaltStack的对比
(1)Ansible 安装部署简单
默认情况下,Saltstack 需要安装客户端接收服务器发送过来的命令。Ansible 不需要在被控服务器上部署任何的客户端,直接使用ssh 通道进行远程命令的执行或者下发配置。
(2)Saltstack 响应速度快默认情况下,Ansible 使用 的是标准的 SSH协议,而 Saltstack 使用 ZeroMQ 进行通信和传输。因此,仅仅从响应速度来讲,Saltstack 比 Ansible 快很多,甚至快十几倍。在一般运维场景下,Ansible的响应速度完全可以满足需求
(3)Ansible 更安全
Ansible 使用标准的 SSH 连接传输数据,不需要在远程主机上启动守护进程。此外,标准的 SSH 数据传输本身就是加密传输,远程主机不易被攻击。
(4)对 Windows 的支持
Saltstack 对 windows 的支持比较友好,Ansible 从 1.7 版本开始加入了对 Windows 的支持。由于Windows 默认没有 SSH,而 Ansible 有依赖 SSH 进行通信,所以在 Windows下 Ansible 需要依赖PowerShell 来实现远程管理。Ansible 必须使用 Linux 系统运行控制端。
(5)Ansible 自身运维比较简单
Saltstack 需要在 Master 和 Minion 主机启动一个守护进程,自身需要检测守护进程的运行状态,增加了运维成本。Ansible 和服务器之间用 SSH 进行通信,服务器上值需要运行 SSH 进程就可以进行运维操作。因此,从工具本身的运维角度来说,Ansible 要比 Saltstack简单很多。
安装部署Ansible服务
Ansible 自动化运维环境由控制主机与被管理主机组成。由于 Ansible 是基于 SSH 协议进行通信的,所以控制主机安装 Ansible 软件后不需要重启或运行任何程序,被管理主机也不需要安装和运行任何代理程序。
资源清单
我现在将根据你提供的图片内容生成Markdown格式的表格。
操作系统 | 主机名 | IP地址 | 组 | 角色 |
---|---|---|---|---|
openEuler 24.03 | ansible-node1 | 192.168.10.101 | 管理节点 | |
openEuler 24.03 | ansible-node2 | 192.168.10.102 | web | 被管理主机 |
openEuler 24.03 | ansible-node3 | 192.168.10.103 | db | 被管理主机 |
1:系统环境设置
2:安装Ansible(第一台)
Ansible 可以使用源码方式进行安装,也可以使用操作系统中 YM 软件包管理工具进行安装。 YUM方式安装 Ansible,需要依赖第三方的 EPEL 源。
安装Ansible
注:需要时间同步否则安装不上,以下命令可以时间同步
dnf install chrony -y
systemctl enable --now chronyd
查看版本信息
查看安装目录
2:配置主机清单
/etc/ansible/hosts 文件中可以定义被管理主机,Ansible 通过读取/etc/ansible/hosts 文件内定义的主机清单批量做一些操作。比如定义一个 websrvs 组,包含一台主机,再定义一个 dbsrvs 组,包含另一台主机,内容如下:
3:修改Ansible配置文件
Ansible命令应用基础
Ansible 可以使用命令行的方式进行自动化管理。
Ansible 的命令行管理工具都是由一系列模块、参数组成的,使用某些模块或参数之前, 可以在命令后面加上-h 或–help 来获取帮助。例如,ansible-doc 工具可以使用 ansible-doc -h 或者ansible-doc --help 查看其帮助信息。
ansible-doc 工具用于査看模块帮助信息。主要选项包括:
-l 用来列出可使用的模块;
-s用来列出某个模块的描述信息和使用示列。
列出所有可用模块
列出yum模块的描述信息和操作动作
备注:
按q退出
Ansible 自带了很多模块,能够下发执行 Ansible 的各种管理任务。首先来了解下 Ansible常用的这些核心模块。
1:command模块
Ansible 管理工具使用-m 选项来指定所使用模块,默认使用 command 模块,即-m 选项省略时会运行此模块,用于在被管理主机上运行命令。例如在被管理主机上执行 date 命令,显示被管理主机时间。有三种执行命令的方式来管理写入主机清单中的主机。
使用IP地址查看被管理的主机日期
分别查看web组和db组的所有主机日期
查看所有被管理主机的日期
注意:
若省略-m 选项,默认运行 command 模块。
2:shell模块
Ansible 中的 shell 模块可以在被管理主机上运行命令,并支持像管道符等功能的复杂命令。
在被管理组 db 里所有主机创建用户 user1,uid 和 gid 都为 1001,用户家目录为/home/user1,shel1
为/bin/bash。
使用无交互模式给用户设置密码。
3:user模块
Ansible 中的 user 模块用于创建新用户和更改、删除已存在的用户。其中 name 选项用于指明创建的用户名称。主要包括两种状态(state):
present 表示添加(省略状态时默认使用);
absent 表示移除。
删除上述创建的用户 user1
4:cron模块
Ansible 中的 cron 模块用于定义任务计划。主要包括两种状态(state):
present 表示添加(省略状态时默认使用);
absent 表示移除。
添加任务计划,使得被管理组 db 里所有主机每十分钟输出 hello 字符串
移除任务计划
注意:出现
可以使用setenforce 0处理也可以安装
5:group模块
Ansible 中的 group模块用于对用户组进行管理。
被管理组 db里所有主机创建 mysql 组,gid 为 306
将被管理组 db 里所有主机的 mysql 用户添加到 mysql 组中
6:copy模块
Ansible 中的 copy 模块用于实现文件复制和批量下发文件。其中使用 src 来定义本地源
文件路径;使用 dest 定义被管理主机文件路径;使用 content 则是使用指定信息内容生成目标文件。
将本地文件/etc/fstab复制到被管理组db里的所有主机上的/tmp/fstab.ansible并将所有者设置为 root,权限设置为 640。
将”hello” 写入到被管理组 db 里所有主机上的/tmp/ test.ansible 文件中
7:file模块
Ansible 中使用 file 模块来设置文件属性。其中使用 path 指定文件路径;使用 src 定义源文件路径;使用 name 或 dest 来替换创建文件的符号链接。
设置被管理组 dbsrvs 里所有主机中/tmp/fstab.ansible 文件的所属主为 mysql,所属组为 mysq1,
权限为 644。
设置被管理组 dbsrvs 里的所有主机的/tmp/fstab.link 文件为/tmp/fstab.ansible 文件的链接文件。
9:script模块
Ansible 中的 script 模块可以将本地脚本复制到被管理主机上进行运行。需要注意的是使用相对路径指定脚本位置。
编辑一个本地脚本,复制到db里所有主机运行