此文档仅张聪明同学个人笔记;新负责KTH-RPL Cluster GPU的漫漫学习长路English Docs:中文相关文档:请注意下面有引用框的 均为这些参考文档中的话语,相关图片也由他们而来,不再在文中单独说明测试学习阶段 请不要运行危险的指令,比如 rm -rf * 当然你没有sudo的话 删的只是自己用户下的 问题不大,切记管理人员 不要运行 自己直接copy过来看都没看的script 或者 指令! 建议以下学习时,就打印打印信息Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。 它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。 它使用SSH来和节点进行通信。 Ansible基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令执行操作。主要呢 可以通过这幅图看出来,也就是东西是装在你自己的主机上的:所以ansible 是安装在自己电脑上的 [没错 我一开始以为每个node server都得装 hhhh 理解没到位当然因为本身是Python 代码 可以通过pip install或者是conda install进行library的安装,建议感兴趣的可以看 官方文档的 这个部分安装完后 第一件事! 所有的工具类 安装完后都可以试着运行 —help 去快速了解指令常用指令开头为 截取至 官方文档 建议都再次 –help :根据上面简要介绍中内容,我们首先确定一下 ansible 知道的host 应该是什么? 才能去连接到各个节点进行指令运行根据官方文档 我们得知 应该要写一个 /etc/ansible/hosts 内容大概长这样然后我们回到自己电脑上可以看到 有一个这样的文件 打开虽然都注释掉了 但也能理解对于服务器的话 因为之前我们有写在 ~/.ssh/config 大概一个config长这样:如果是给是我之前那样的设置的话 我会把 ``/etc/ansible/hosts` 写成这样:然后 设置完成后,保存退出,在终端输入:比如我的设置完 服务器的所有节点:首先我们测试几个点,然后再仔细解释一下 即更进阶的版本小试一下 连通这些节点 :可以看到 server3 不能被连通 其他的都可那么我们再试一下 读取所有服务器上的的gpu 状态好了,是时候要解释一下了 【再次提醒 –help 是个好东西】:ansible 使用的工具名字cluster 我对host里面的命名,比如上面举例 ansible-inventory –graph –vars 这个运行完后 能看到 graph是从cluster 这个名字打开的,所以 也就是在cluster组的所有节点上都运行-m command -m 是 ansible的参数,从第一次安装完 我们打印了 –help 里面有提到这个command 的意思就是 我自己会给指令让他运行-m ping 因为ping是ansible里面内置的module名字 所以 -m 带上 ping就是测试这个组的所有节点是否连通-a “nvidia-smi” 一般 -a 跟着的是 -m command 或者 是没有(因为默认是command) 因为一般只有自己输入特定指令需要给这个参数ok 随堂测试 这条指令干什么 【可以自己试试】:实际上到这里 普通用户用来 看看 server的状态 就差不多了,进阶呢 就是把command -a 后面的 搞成一个yaml文件,这样就不用输入一系列长的指令了主要 适用人员 就是对node节点要干些什么,不是单纯的打印信息了;比如统一升级某个包、统一添加一个用户、统一卸载什么东西 等等等首先介绍一下ansible 的模块command:也就是上面我们介绍过了的 常见命令都可以使用,但是执行不是通过shell的 所以 < > | and & 等操作 nopeshell :默认/bin/sh执行,所以终端输入的命令都可以使用可以看到 -m 后面跟的是shell! 然后我们还接了一个 &&当然看到这里,确实shell 是可以把自己的scripts 先 cp 过去,然后再运行,但是呢 这样需要调用两次ansible 第一次 cp 第二次 run而下面介绍的scripts 和 playbook 就不需要了scripts:在本地写一个脚本,在远程服务器上执行首先这个 我们需要写好一个脚本,举个例子写个echo_test.sh 就打印一下显卡和 echo Hello然后运行:终于到大头了 看到这里还记得第一幅图的东西吗?所有的部分基本快速过了一遍 还差一个playbook! 关于ansible自己文档的介绍 在这里那么为什么上面的script不够用呢? 可以停下想想因为 在你运行上面scripts 的时候 没法说 node B执行这段,node B执行第二段;或者是不同的用户属性不同操作等等 【官方的答案还有几个点 感兴趣可以点上面的link;这么一看 playbook这个名字取得真不错 按照剧本 演】好 进入正题,先给一个参考博客里的 playbooks 样子:解释一下:其中include 的playbook 长这样:这是官方的一个示例是不是大概看懂了?【反正我第一次是没看懂 一堆admin 也不敢运行 所以还是 祖传!检查disk space 是不是剩余okvim 完了 可以试一下check,这个check mode只是一个模拟 不会输入任务的output,但是是一个非常适合验证这个playbook在一个节点上 运行的一些配置管理操作【当然 我们上面只是判断一下 硬盘还有存储空间如果只想在一个node上运行可以 加 –limit node_name 比如:实际的运行指令很简单,直接跟yaml即可:意犹未尽?ansible 自己官方给了很多很多 examples,欢迎去探索:https://github.com/ansible/ansible-examples然后这个 文档 真的是一个特别特别特别简单的入门 了解 尝试,也是张聪明同学第一次学的时候 边学边写的… 有错误很正常 或者是随时间 万一指令不对了 过时了 大家都看官方文档为主哈赠人点赞 手有余香 😆;正向回馈 才能更好开放记录 hhh