32.Ansible平台搭建
Ansible平台搭建
Ansible 通过 SSH 和简单易读的 YAML 脚本,实现了基础设施即代码,让运维工作变得自动化、标准化和可重复
主要用途
- 配置管理:像 Chef, Puppet 一样,确保服务器的配置一致且符合预期。
- 应用部署:自动将应用程序(代码)部署到测试、生产环境。
- 任务自动化:执行日常任务,如重启服务、采集日志、打包文件等。
- 编排:按照一定顺序在多个服务器上执行复杂的流程,例如先部署数据库,再部署应用服务器,最后更新负载均衡配置。
核心组件
- 控制节点:安装并运行 Ansible 的机器。
- 受管节点:被 Ansible 管理的服务器。
- Inventory:一个主机列表文件,定义了你的受管节点,并可以将它们分组(如
[web_servers]
,[db_servers]
)。 - Playbook:Ansible 的自动化脚本,由一个或多个Play组成,每个Play包含一系列Task。
- Module:Ansible 执行的独立功能单元(如上面例子中的
yum
和service
模块)。 - Task:调用一个模块并指定其参数,这就是一个任务。
- Role:一种更高级的组织形式,将变量、任务、文件等打包,便于共享和复用
Ansible的特点
- 无代理架构:这是它最大的亮点。传统的自动化工具需要在每台要管理的服务器上安装一个“客户端”软件。而 Ansible 不需要!它直接通过最常见的 SSH(管理 Linux/Unix)和 WinRM(管理 Windows)协议连接服务器并执行任务。这极大地简化了部署和维护。
- 简单易读:它的核心配置文件叫做 Playbook,采用 YAML 格式编写。YAML 非常接近自然语言和列表格式,几乎可以自我解释
Ansible的核心
Core Modules: ansible自带的模块
Custom Modules: 核心模块功能不足时,用户可以添加扩展模块
Plugins: 通过插件来实现记录日志,发送邮件或其他功能
Playbooks: 剧本,YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能
Connection Plugins: ansible基于连接插件连接到各个主机上,默认是使用ssh
Host Inventory: 记录由Ansible管理的主机信息,包括端口、密码、ip等
ad-hoc模式(点对点模式)
使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。
playbook模式(剧本模式)
是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件
工作流程是首先执行ansible命令,然后读取ansible的配置文件,配置文件里面会定义主机清单的位置,然后看主机清单去匹配,调用ansible的模块将命令打包成. py类型的脚本文件,然后通过ssh将脚本传输到受控主机对应执行用户的家目录,然后会自动给脚本文件加上x权限能够执行脚本,执行脚本之后不论成功失败,都会返回给ansible,然后删除脚本文件
ansible的部署
前置条件:1.安装rhel9版本的虚拟机
2.配置本地yum源
[root@ansible yum.repos.d]# vim server.repo
3.安装软件包
[root@ansible ~]# yum group install "Virtualization Client" "Virtualization Hypervisor" "Virtualization Tools" -y
4.重启libvirtd服务
[root@ansible ~]# systemctl restart libvirtd
[root@ansible ~]# systemctl enable libvirtd
5.通过filezilla将本地的rhel9.2的镜像上传到虚拟机
6.安装1台master主机,然后克隆5台名为node1,node2,node3,node4,node5的主机,配置6台主机的ip,master为192.168.122.100,其他为从10-50
[root@ansible ~]#virt-manager
7.ip配置完后编辑/etc/hosts,内容为所有主机的ip+主机名+别名
[root@master ~]# vim /etc/hosts
8.将/etc/exports下的内容转发给其他主机
[root@master ~]# for i in node{1..5}; do scp /etc/hosts root@$i:/etc/hosts ; done
9.配置主机的免密登录,root用户和student用户都需要配置(student用户为普通用户)
[root@master ~]# ssh-keygen
[root@master ~]# for i in node{1..5}; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$i; done
[root@master ~]# for i in node{1..5}; do ssh-copy-id -i ~/.ssh/id_rsa.pub student@$i; done
[satudent@master ~]# ssh-keygen
[student@master ~]# for i in node{1..5}; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$i; done
[student@master ~]# for i in node{1..5}; do ssh-copy-id -i ~/.ssh/id_rsa.pub student@$i; done
10.在ansible上配置本地yum仓库之后,安装httpd服务
[root@ansible ~]# yum install httpd -y
将需要的文件通过filezilla上传到/var/www/html的目录下,然后重启httpd服务,并且关闭防火墙和selinux
11.在master主机中部署yum仓库
[root@master ~]# vim /etc/yum.repos.d/server.repo
12.安装vim编辑器及相关软件
[root@master ~]# yum install vim bash-completion net-tools -y
13.给student用户提权
[root@master ~]# vim /etc/sudoers.d/student
然后发给其他主机
[root@master ~]# for i in node{1..5}; do scp /etc/sudoers.d/student root@$i:/etc/sudoers.d/; done
14.切换到student用户然后安装ansible
[student@master ~]$ sudo yum install ansible-core ansible-navigator
15.配置ansible目录
在student用户的加目录下创建ansible目录
在ansible目录下生成新的ansible配置文件
[student@master ansible]$ ansible-config init --disabled > ansible.cfg
配置相关文件
在ansible目录下编辑主机清单inventory,新建roles,collections
[student@master ansible]$ vim inventory
[student@master ansible]$ mkdir roles
[student@master ansible]$ mkdir collections
配置ssh登录不需要确认密钥
[student@master ansible]$ vim ansible.cfg
测试ansible命令能否ping 通所有主机
[student@master ansible]$ ansible all -m ping