Ansible自动化管理1:高效部署Linux系统
2026/6/28 21:46:58 网站建设 项目流程

ansible管理的设备有很多,是一个自动化工具,平常使用Linux命令使用的时候总要去执行重复的命名,ansible自动化用来除去重复的劳动力,使其工作效率更高。

ansible低层是python开发,实现批量的系统配置,程序的部署,运行命令。

目录

ansible安装

1.rpm包本地ios镜像文件

2.网络仓库安装(阿里云镜像站)

3.pip工具安装

4.ansible源码包安装

ansible架构

ansible配置文件

常用配置段

优先级顺序

ansible主机清单

定义主机清单的方式

1.自定义主机

2.自定义用户组

3.特殊的主机组

4.批量定义

5.主机组嵌套

主控节点和被控节点

1.用户名、密码

2.ssh密钥连接被控节点

在主设备执行被控制节点操作:

遇到过的问题

1.采用本地ios镜像文件安装ansible遇到的问题

问题解释说明

2.在使用pip工具安装ansible,查看ansible --version出现

问题解释说明

我使用的解决方法

3.ansible配置文件建立连接遇到的问题

问题解释说明

我使用的解决方法


1.rpm包本地ios镜像文件

我选择使用新建 RHEL9 阿里源的方式下载

1.vim /etc/yum.repos.d/aliyun-rhel9.repo 或者cat > /etc/yum.repos.d/aliyun-rhel9.repo <<EOF [BaseOS] name=BaseOS baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/ enabled=1 gpgcheck=0 [AppStream] name=AppStream baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/ enabled=1 gpgcheck=0 EOF 退出编辑执行 2.dnf clean all dnf makecache # 验证仓库是否正常,能列出仓库即成功 dnf repolist 3.#下载rpm包 wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm # rpm安装,这里用--nodeps没问题 rpm -ivh epel-release-latest-9.noarch.rpm --nodeps # 再次刷新缓存 dnf clean all && dnf makecache 4.dnf install ansible -y # 验证版本 ansible --version ansible localhost -m ping //通信测试

卸载方式

dnf remove ansible-core -y

2.网络仓库安装(阿里云镜像站)

https://mirrors.aliyun.com/epel-archive/9.3/Everything/x86_64/http://阿里云镜像站

3.pip工具安装

只需要一条命令,我个人使用的是pip工具安装,下载过程很慢时,可使用pip加速器

pip install ansible==2.9.0 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

卸载方式:

pip3 uninstall -y ansible

4.ansible源码包安装

不呈现

ansible架构

ansible 核心工具 inventory 记录ansible管理主机的信息,包括端口、密码、ip 主机清单 modules 又名“剧本” YAML格式的文件,多个任务定义在一个文件中,定义主机需要用那些模块来完成功能 core-modules 核心模块,操作通过调用核心来完成管理任务 costome-modules 自定义模块,完成核心模块无法完成的功能,支持多种语言 plugins 连接插件,ansible和hosts通信使用

ansible配置文件

当我们需要去找服务清单,怎么连接服务器,用什么权限执行任务时,就要书写相应的配置文件命令来满足需求

它的作用是控制执行环境,连接方式,插件路径,通过合理的配置让不同环境使用不同的设置,提高安全性,减少命令的重复输入,使自动化流程更加的流程。

核心配置文件ansible.cfg//控制ansible的基本行为,所有的ansible工具都会读取

ansible-navigator称为导航器//专门控制行为

不断的发展,ansible逐渐靠近容器,使用容器化的方式来执行ansible任务。

进入配置文件路径:

vim ansible.cfg

常用配置段

[defaults] inventory //主机清单位置 ask_pass //默认远程登录用户 remote_user //是否提示输入ssh密码 host_key_checking //首次连接是否检测主机key roles_path //角色搜索路径 collection_path //集合搜素路径 [privilege_escalation] //权限提升 become //是否启用sudo/su become_method //切换方式sudo/su become_user //切换后的用户(默认root) become_ask_pass //是否提示输入sudo密码

eg:

[defaults] inventory=/etc/ansible/hosts ask_pass=false remote_user=devops host_key_checking=false [privilege_escalation] become=true become_method=sudo become_user=root become_ask_pass=false

优先级顺序

ansible配置文件可以存到不同的地方

1. 环境变量:ANSIBLE_CONFIG
2. 当前目录下的ansible.cfg
3. 当前用户家目录下的.ansible.cfg
4. /etc/ansible/ansible.cfg

ansible主机清单

清单的书写格式:配置单文件时,需要指定主机组,使用[xxx] 中括号进行设置,中括号下的主机组来执行ansible命令。

定义主机清单的方式

1.自定义主机
vim /etc/ansible/hosts node1 node2 192.168.1.1 192.168.1.2
2.自定义用户组
[webservers] web1 web2
3.特殊的主机组
#ungroup实际上就是不属于任何主机组的主机,就相当于你直接定义主机 [ungroup] abc
4.批量定义
web[1:10].example.com 192.168.1.[1:10] //采用:数组的形式定义
5.主机组嵌套
[servers:children] webservers mysqlservers

主控节点和被控节点

主控节点(客户端、主设备),可以连接多个被控节点设备,服务于被控节点。主设备执行命令连接多个从设备后,可停留在主设备中执行命令。

如要删除rm -rf 删除从设备的文件,不用回到从设备(只用挂起),只要建立了ssh底层的连接,可直接在主设备中执行该命令。

被控节点(服务端、从设备)

远程连接被控节点两种方式

主机清单路径:

/etc/ansible/hosts

默认情况下/etc/ansible/hosts文件是空的,需要手动添加内容,使用

vim /etc/ansible/hosts

进入添加内容

1.用户名、密码

进入 /etc/ansible/hosts 设置

[node1] 192.168.108.129 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 192.168.108.130 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 #port端口 user用户 pass密码 退出编辑 执行ansible -i /etc/ansible/hosts node1 -m ping

2.ssh密钥连接被控节点

ssh分为公玥public和私玥private

在ansible设备上生成ssh密钥,把密钥发送给客户端

ssh - keygen

密钥生成后,把密钥发送给客户端,可使的ansible服务端(主控节点)使用密钥来服务客户端(被控节点)

ssh-copy-id devops@192.168.108.130 #devops是远程主机用户名 192.168.108.130是devops远程主机的IP地址,通过输入ipconfig查看主机上的ip地址 验证: ssh devops@192.168.108.130 //免密登录,不需要登录密码 登陆后退出执行 exit //退出

除了可以使用ip地址外,还可以使用域名,远程主机名,别名

在主设备执行被控制节点操作:

1. 创建devops用户并且设置密码

ansible all -m shell -a 'useradd devops' -uroot -k ansible all -m shell -a 'echo 1 | passwd --stdin devops' -uroot -k

2. 给devops用户配置sudo提权

ansible all -m shell -a 'echo "devops ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers' -uroot -k

3.使用输出内容echo redhat

ansible all -m shell -a 'echo redhat'
ansible all -m ping //测试通信 node2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }

遇到过的问题

1.采用本地ios镜像文件安装ansible遇到的问题

This system is not registered with an entitlement server. You can use subscription-manager to register. Error: There are no enabled repositories in "/etc/yum.repos.d", "/etc/yum/repos.d", "/etc/distro.repos.d".
问题解释说明

RHEL系统未注册订阅,自带官方YUM源禁用

没用可以启用的软件源文件,yum无法安装软件,因此我采用的是把RHEL切换到centos7镜像的方式

2.在使用pip工具安装ansible,查看ansible --version出现

[root@servera ~]# ansible --version -bash: /usr/bin/ansible: 没有那个文件或目录
问题解释说明

shell有限去/user/bin/ansible找

实际文件在/usr/local/bin/ansible 两边的路径对不上

我使用的解决方法
echo 'export PATH=$PATH:/usr/local/bin' >> /etc/profile source /etc/profile ansible --version

3.ansible配置文件建立连接遇到的问题

WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
问题解释说明

没有发现Inventory路径,hosts主机清单是空的,只有localhost可以利用 ,不能使用all,未建立连接

localhost是自带的隐藏式

我使用的解决方法
#配置主机清单 [node-group] //定义的主机清单用户组 servera ansible_hosts=192.168.108.130 #测试 ansible all --list-host //列出清单中的主机 ansible all -m ping #主控节点要生成密钥 ssh - keygen -t rsa -N "" -f /root/.ssh/id_rsa #推送公玥给被控节点 ssh-copy-id devops@192.168.108.130 ssh devops@192.168.108.130

--森bright

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询