前言
之前发布的文章已经介绍过了在Hi168云平台部署openEuler学习环境,那么既然能部署openEuler了,其他的各类学习环境自然也就可以部署了。
Ansible简介
Ansible 是一个运维自动化工具,可以通过 SSH 协议对远程主机进行管理,对远程主机执行批量操作,包括:文件复制、软件包安装、服务的启动重启等。
Ansible 解决了如何大批量、自动化的实现系统配置、应用部署、命令和服务操作的问题。其脚本具有灵活、可重入的特性,可以极大地减少运维人员的重复劳动,提高了运维效率。
架构
Ansible 与远程主机通过 SSH 协议相连,被管理主机需要配置并启动 SSH 服务,除此之外不需要其他任何软件。
Ansible 可以同时管理 Linux 操作系统的不同发行版本以及 Windows 系统等。
涉及的一些专业术语
Control node:控制节点,安装了 Ansible 服务的主机,主要用来发布任务、调用功能模块,对其他节点进行批量操作。
Managed nodes:受控节点,被 Ansible 服务所管理的主机,是模块命令的被执行对象。
Inventory:主机清单,受控节点列表,可以是 IP 地址、主机名或域名。
Modules:模块,特定功能代码,默认有上千款功能模块。
Task:任务,Ansible 受控节点上将要被执行的操作。
Playbook:剧本,使用 YAML 语言编写的可重复执行的任务列表,也可称之为脚本,通常把常用操作写道剧本文件中,下次可以重复执行一遍。
Roles:角色,用于结构化的组织 Playbook,通过调用角色实现一连串的功能。
组网介绍
Ansible学习环境至少需要部署两台及以上主机,一台作为控制节点,剩下的作为受控节点,受控节点多点呢,就可完成更多的学习项目,这里以一个控制节点,三个受控节点为例。
需要注意的是在Hi168平台上这些节点需要部署在同一个命名空间中。
操作开始
安装openEuler环境可以直接查看上一篇文章,这里就不再赘述了。
创建应用
双击打开桌面图标“我的模板”。
在我的模板中,找到之前已经创建好的openEuler的模板,点击“部署”。
填写好相关信息。
重复上述两个步骤,再创建三个应用。
这时候在桌面上就可以看到创建好的四个应用图标了。
配置受控节点
点击打开名为“ansible-node1”的应用,完成接下来的配置。剩下的“ansible-node2”和“ansible-node3”也是同样的操作方式,这里以“ansible-node1”为例。
修改主机名
双击桌面图标“ansible-node1”。
输入账号密码,登录openEuler操作系统。
执行命令修改主机名,修改完主机名以后需要退出重新登录一下才生效。
hostnamectl set-hostname node1
配置网络
网络由Hi168平台自动下发,不需要进行修改,但是一旦应用重启,IP地址将会改变,因此需要创建一个“服务端口”获得一个固定的vip地址。
点击“服务端口”图标,点击“添加服务”。
按下图,填写好相关信息。
此时,就可以看到VIP地址和外部端口了,可以记录下来,留待后面备用。
关闭SELinux
临时关闭。
setenforce 0
修改配置文件,永久关闭。
vi /etc/selinux/config
# 将 “SELinux” 的值修改为 “disabled”。
关闭防火墙并设置防火墙为开机不启动。
systemctl stop firewalld
systemctl disable firewalld
开启SSH服务,并允许root用户远程登录,openEuler操作系统该功能默认启动,无需操作修改。
以上所有配置均需在 node1~node3 节点操作。关闭防火墙、SELinux的操作可以在制作应用模板的时候就关闭,作为学习环境,等学习到了这两个功能再开启就行。
node2配置修改
Node3配置修改
配置控制节点
修改主机名
hostnamectl set-hostname control
配置网络
和受控节点一样的配置步骤。
修改软件源(可选)
openEuler默认是官方在线源,如果觉得安装软件的速度慢,可以修改为华为云或阿里云的软件源地址。
sed -i "s@http://repo.openeuler.org/openEuler-24.03-LTS-SP1/@https://mirrors.aliyun.com/openeuler/openEuler-24.03-LTS-SP1/@g" /etc/yum.repos.d/openEuler.repo
dnf clean all
dnf makecache
安装Ansible服务
dnf install -y ansible
安装完成以后,Ansible服务默认已经启动,可以执行 ansible --version
命令查看 Ansible 服务的版本及配置信息。
配置主机hosts
文件
使用vim编辑器,编辑/etc/hosts
文件。
vim /etc/hosts
写入如下内容,IP地址为三个应用的VIP地址。
10.106.49.158 node1
10.101.241.146 node2
10.100.163.224 node3
配置控制节点和受控节点连接
生成ssh密钥对,所有应答全部回车即可。
ssh-keygen
将公钥拷贝至各个受控节点,需要输入受控节点的密码。
-p 后面指定的端口号,要修改为网络配置步骤中的“外部端口”。
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2163 root@node1
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2117 root@node2
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2165 root@node3
配置受控主机清单
将受控节点的IP地址写入到主机清单文件中,控制节点就可以基于清单对主机进行管理,还可以在清单中对主机进行分类。
我这里将 node1 和 node2 归类到 [web]
类中,node3 归类到 [db]
类中,以便更加贴近实际的业务情况进行分类,分类名称可以自定义。
使用vim编辑器编辑主机清单配置文件/etc/ansible/hosts
。
vim /etc/ansible/hosts
写入如下内容,文件里面会有一些实例配置可以删除,也可以保留直接添加到文末就可以。
[web]
node1 ansible_port=2163
node2 ansible_port=2117
[db]
node3 ansible_port=2165
使用ansible-inventory --graph
命令查看受控节点的信息。
至此一个满足基本学习条件的Ansible环境就搭建好了。
测试一下
检查所有受控节点能否访问百度,可以看到每个节点都是可以访问百度的。
ansible all -m raw -a "ping -c 1 baidu.com"
在所有的受控节点/root/hello.txt
文件中写入"Hello Ansible"。
ansible all -m shell -a "echo 'Hello Ansible' > /root/hello.txt"
警告信息可以暂时忽略不管,这是因为 Ansible 检测到目标主机的 Python 解释器路径为
/usr/bin/python3
,但未明确指定解释器路径,因此提示 未来可能因系统环境变化(如安装其他 Python 版本)导致 Ansible 执行失败。
检查一下文件文件有没有创建成功。
删除“[web]”组中创建的“hello.txt”文件。
ansible web -m file -a "path=/root/hello.txt state=absent"
查看所有受控主机“/root”目录中的文件,对比发现node1和node2中就没有了hello.txt文件。
ansible all -m shell -a "ls /root/"