Ansible集群运维
1、工具使用背景
公司是一家医疗健康企业,部门研究方向是AI人工智能诊断,服务器是租用的华为云服务器所搭建的集群。由于很多家医院选择使用我们提供的云服务器,公司搭建了一个集群。但在之后的维护过程中给遇到了小问题,因为采用分布式的架构。所以如果要更新一个小模块需要整体集群替换,但一台服务器一台服务器的换法就显得很”笨“。查阅了一些资料,根据自己的需求,成功搭建。
2、工具简介
大家既然能搜索到ansible这个关键词想必已经知道这个是干什么的了,我也就不多说了。
首先需要安装这个工具在集群当中的一台上:
sudo apt update
sudo apt install ansible
接下来就可以使用了,在这台服务器/etc/ansible目录下,会有两个文件:
1、一个叫ansible.cfg:
这个配置文件是用来将主机列表inventory.ini中的所有服务器以何种身份进行操作
举个简单的例子可以这样写:
[defaults]
inventory = /etc/ansible/inventory.ini
remote user = root
become = yes
become method = sudo
become user = root
host key checking = False
log path=/etc/ansible/log/ansible.log
#log日志记录地址
2、另一个叫做inventory.ini:
一目了然,分别是服务器ip、用户名、密码
[hosts]
ip1 ansible_user='用户名' ansible_ssh_pass='密码'
ip2 ansible_user='用户名' ansible_ssh_pass='密码'
ip3 ansible_user='用户名' ansible_ssh_pass='密码'
ip4 ansible_user='用户名' ansible_ssh_pass='密码'
ip5 ansible_user='用户名' ansible_ssh_pass='密码'
ip6 ansible_user='用户名' ansible_ssh_pass='密码'
ip7 ansible_user='用户名' ansible_ssh_pass='密码'
3、工具使用:
这个工具的核心就是需要编写一个playbook文件,实际上就是一个yaml配置文件。这个配置文件学习Java开发一定会接触过。
举个简单的例子,现一台服务器中的一个服务叫作store-server,是用来接受存储医学dicom图像的。现需要将其他服务器中的store-server服务替换。该服务使用Java开发,该服务包中包含启动脚本、jar包、yaml配置文件等。
该playbook文件可以这样编写:
起名为platform_update.yaml
---
- name: 替换整个文件夹
hosts: all
tasks:
- name: 同步文件到远程主机
remote_user: root
synchronize:
#本地路径
src: /data/app/store-server
#目标主机路径
dest: /data/app/store-server
#如果目标路径中有和本地路径中一样的文件会被删除
delete: yes
#递归同步,将本地路径中的所有文件都同步,包括子文件夹中
recursive: yes
接下来是一个执行命令:
ansible-playbook platform_update.yaml --ask-vault-pass
执行后,就会发现其他服务器中的都更换了。
4、扩展部分:
这个工具很强大,不仅仅可以对宿主机中文件夹进行操作,还可以对docker容器内进行同步操作,甚至可以同步拉取镜像。
例如同步删除docker内:
当然以下都需要写在playbook文件中。
sudo docker exec -it my_container rm -rf /data/app/AI_analysis.py
同步替换docker内:
sudo docker cp /home/src/AI/py_model my_container:/home/src/AI/py_model
还有很多的用法,以及场景。因本人还没接触到,所以暂不赘述。