2024-05-15
ansible
00
请注意,本文编写于 142 天前,最后修改于 66 天前,其中某些信息可能已经过时。

目录

ansible 及 ansible playbook 介绍
ansible简介
ansible playbook简介
ansible 环境准备
环境拓扑
ansible host 准备
ansbile 准备
ansible semaphore 准备
ansible 远程主机准备
ansible semaphore 操作
Key Store
Repositories
Inventory
Task Templates
执行任务
查看任务状态

WX20240608-103705@2x.png


ansible 及 ansible playbook 介绍

ansible简介

ansible是一个用python编写的用户自动化操作的工具。基于ssh远程服务。常用于集群环境的自动化部署等。可以大大节省部署时间,提高部署的可重复操作性。
ansible playbook 是将很多常见的任务单独做成一个一个的role,实现代码复用。并将变量和模板等元素单独分离,可以简化复杂的ansible项目的复杂度。

ansible playbook简介

ansible palybook 结构主要包括以下要素:

  1. inventory: 待部署服务的服务器列表信息
  2. role: 单独的院子任务,如重命名文件,设置dns,设置hostname等
  3. task: 在目标服务器上要执行的具体任务,任务由role 或role组合构成
  4. vars: 变量,包括group变量和任务变量等

本文以ansible semaphore v2.9.64 版本为例,简单介绍如实使用 semaphore 进行一个简单的slurm集群部署。

ansible 环境准备

环境拓扑

为了测试更清晰,没有使用基于docker的快速镜像部署,而使用手动部署,ansible host 外加两台 远程主机(用于执行集群部署),一共三台主机,主机的拓扑图如下:

主机名ip操作系统(版本)
ansible10.211.55.5ubuntu server 22.04
slurmmaster10.211.55.8ubuntu server 22.04
slurmworker10.211.55.9ubuntu server 22.04

ansible host 准备

ansbile 准备

# 在root下安装ansible pip3 install ansible

注意此处是在root环境下执行安装ansible,在普通用户下安装ansible可能会遇到semaphore执行任务的时候提示找不到 'ansible' 模块而需要单独配置python path的问题。更多ansible部署方式请参考ansible官方文档

bash
10:35:49 AM Task 2147483601 added to queue 10:35:50 AM Started: 2147483601 10:35:50 AM Run TaskRunner with template: slurm_install 10:35:50 AM Preparing: 2147483601 10:35:50 AM No collections/requirements.yml file found. Skip galaxy install process. 10:35:50 AM No roles/requirements.yml file found. Skip galaxy install process. 10:35:50 AM ['/home/whsasf/.local/bin', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages'] 10:35:50 AM Traceback (most recent call last): 10:35:50 AM File "/home/whsasf/.local/bin/ansible-playbook", line 6, in 10:35:50 AM from ansible.cli.playbook import main 10:35:50 AM ModuleNotFoundError: No module named 'ansible' 10:35:50 AM Running playbook failed: exit status 1

ansible semaphore 准备

bash
wget https://github.com/semaphoreui/semaphore/releases/download/v2.9.64/semaphore_2.9.64_linux_amd64.tar.gz tar xf semaphore_2.9.64_linux_amd64.tar.gz ./semaphore setup ./semaphore server --config=./config.json # 之后在浏览器中打开 semaphore即可 # http://10.211.55.5:3000/

更多部署详情,请参考ansible semaphore 官方文档

ansible 远程主机准备

ansible远程主机准备非常简单:

  1. 只要启动了ssh服务且可连接
  2. 再有一个具备sudo权限的普通用户即可。本环境的普通用户:密码为: whsasf:123456

ansible semaphore 操作

本示例是利用一段已经准备好的slurm集群部署的ansible playbook。所有的部署脚本在ansible host本地,可以直接引用。
semaphore开始使用时需要创建project才能使用。sepaphore包含很多配置项,如下图所示,我们在这次示例中会用到

  1. key Store: 配置整个执行过程中会用到的远程主机 1. 登录用户名和密码 2 远程用户的 sudo密码
  2. Repositories: 整个ansible playbook 执行脚本目录
  3. Inventory: ansible playbook 项目的host信息
  4. Task Template: 整个ansible playbook 项目的运行配置信息,包括项目的入口执行yaml文件,以及上面定义的key,repository 和 inventory。

image.png

Key Store

创建的key可能会在 inventory 和 repository 中使用。本示例需要用到两个key

  1. 远程主机的ssh连接信息key

image.png

  1. 远程主机用户(whsasf)的sudo密码,不需要账号

image.png

Repositories

本示例使用已经写好的slurm 集群部署脚本,存放在 ansible 目录: /home/whsasf/Downloads/slurm_ansible_without_gpu。 且不需要accesskey。如果repo存放在远程地址或git上,一般需要accesskey。

image.png

Inventory

本示例使用已经写好的slurm 集群部署脚本,存放在ansible 主机。直接使用里面的inventory文件即可,文件路径: /home/whsasf/Downloads/slurm_ansible_without_gpu/inventory。inventory 需要用到 在key store 汇总定义的用于ssh访问的key 和 sudo key。选择相应的key即可。


inventory文件内容如下:

bash
[slurm_controller] slurmm ansible_ssh_host=10.211.55.8 ansible_ssh_user=whsasf [slurm_dbd] slurmm ansible_ssh_host=10.211.55.8 ansible_ssh_user=whsasf [slurm_restd] slurmm ansible_ssh_host=10.211.55.8 ansible_ssh_user=whsasf [slurm_worker] slurmm ansible_ssh_host=10.211.55.8 ansible_ssh_user=whsasf slurmn ansible_ssh_host=10.211.55.9 ansible_ssh_user=whsasf

Task Templates

本示例只演示task的配置和执行,build 和 deploy 类似,具体可以参考 ansiblesemaphore的官方文档。
其中: playbook filename 就是整个执行脚本的入口文件,semaphore 会在 定义的repository的根路径下去寻找。inventory 和 repository就是上面定义的。次处不需要额外的environment,所以选择空即可。

执行任务

在 task template 下面新创建的任务,点击RUN按钮,就可执行。可以按照需要选择时候打开debug模式查看更多输出。

image.png

image.png

一段正在执行任务的截图如下, 可以看到就是典型的ansible的任务执行过程。可以随时点击右下角的stop按钮停止执行。

image.png

查看任务状态

Dashboard 中可以查看所有任务的执行状态,和输出详情,所有历史任务执行过程中的输出都被自动保存在了数据库中(有点费空间奥)。

image.png

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:王海生

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!