ansible是一个用python编写的用户自动化操作的工具。基于ssh远程服务。常用于集群环境的自动化部署等。可以大大节省部署时间,提高部署的可重复操作性。
ansible playbook 是将很多常见的任务单独做成一个一个的role,实现代码复用。并将变量和模板等元素单独分离,可以简化复杂的ansible项目的复杂度。
ansible palybook 结构主要包括以下要素:
本文以ansible semaphore v2.9.64 版本为例,简单介绍如实使用 semaphore 进行一个简单的slurm集群部署。
为了测试更清晰,没有使用基于docker的快速镜像部署,而使用手动部署,ansible host 外加两台 远程主机(用于执行集群部署),一共三台主机,主机的拓扑图如下:
主机名 | ip | 操作系统(版本) | |
---|---|---|---|
ansible | 10.211.55.5 | ubuntu server 22.04 | |
slurmmaster | 10.211.55.8 | ubuntu server 22.04 | |
slurmworker | 10.211.55.9 | ubuntu server 22.04 |
# 在root下安装ansible pip3 install ansible
注意此处是在root环境下执行安装ansible,在普通用户下安装ansible可能会遇到semaphore执行任务的时候提示找不到 'ansible' 模块而需要单独配置python path的问题。更多ansible部署方式请参考ansible官方文档
bash10: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
bashwget 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远程主机准备非常简单:
本示例是利用一段已经准备好的slurm集群部署的ansible playbook。所有的部署脚本在ansible host本地,可以直接引用。
semaphore开始使用时需要创建project才能使用。sepaphore包含很多配置项,如下图所示,我们在这次示例中会用到
创建的key可能会在 inventory 和 repository 中使用。本示例需要用到两个key
本示例使用已经写好的slurm 集群部署脚本,存放在 ansible 目录: /home/whsasf/Downloads/slurm_ansible_without_gpu。 且不需要accesskey。如果repo存放在远程地址或git上,一般需要accesskey。
本示例使用已经写好的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的配置和执行,build 和 deploy 类似,具体可以参考 ansiblesemaphore的官方文档。
其中: playbook filename 就是整个执行脚本的入口文件,semaphore 会在 定义的repository的根路径下去寻找。inventory 和 repository就是上面定义的。次处不需要额外的environment,所以选择空即可。
在 task template 下面新创建的任务,点击RUN按钮,就可执行。可以按照需要选择时候打开debug模式查看更多输出。
一段正在执行任务的截图如下, 可以看到就是典型的ansible的任务执行过程。可以随时点击右下角的stop按钮停止执行。
Dashboard 中可以查看所有任务的执行状态,和输出详情,所有历史任务执行过程中的输出都被自动保存在了数据库中(有点费空间奥)。
本文作者:王海生
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!