自动化部署

只支持Centos下的自动化部署。目前只迁移了JDK、Nginx、Redis、Nacos这四个应用。

请注意,自动化部署应用会比较依赖模型的推理能力,默认使用模型是GPT-4.0-1106版。

应用:

准备工作

自动化部署通过Agent执行部署脚本,建议自行安装Agent,一方面Agent部署在私有云上,可以在私有云执行自动化部署,另一方面可以在本地Agent设置敏感信息(比如密码之类的),无需在执行时提供用户名和密码避免泄露。

默认Agent:/devops/agent/sByKvIjTGZbR

Agent安装过程:

1、安装Docker。

安装:curl https://releases.rancher.com/install-docker/20.10.sh | sh
启动:service docker start

2、Pull镜像。

docker pull nexterachat/shenbing-agent:latest

3、运行Docker 镜像


1、创建一个目录用于和容器共享文件,用于存放主机清单
例如: mkdir /root/dockerfolder
2、运行镜像
docker run -d -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v /root/dockerfolder:/home/agent/share -e DEVOPS_AGENT_DEST=/devops/agent/1g5xn2t0xyz nexterachat/shenbing-agent:latest
注意:
-v /root/dockerfolder:/home/agent/share,这里的/root/dockerfolder是第1步创建的容器共享目录;
-e DEVOPS_AGENT_DEST=/devops/agent/1g5xn2t0xyz,这里的/devops/agent/1g5xn2t0xyz,1g5xn2t0xyz请随机生成,需确保全网唯一,远程执行时需根据该执行端点找到Agent。
3、在/root/dockerfolder创建hosts文件,文件内容如下,用于存储待部署主机的用户名、密码。部署完成后可以更改主机密码。
121.41.45.2 ansible_ssh_user=root ansible_ssh_pass=xxxxxx ansible_sudo_pass=xxxxxx
121.41.45.3 ansible_ssh_user=root ansible_ssh_pass=xxxxxx ansible_sudo_pass=xxxxxx

主机登录补充说明:

自动化部署是通过Ansible脚本在待部署主机执行脚本完成部署,目标主机无须安装客户端,Agent和目标主机之间的通讯是通过ssh进行的,如果执行时出现无法访问的情况,可以登录容器ssh进行网络上的验证。

1、用户密码方式。通常,自己搭建的虚拟主机或者从云服务商购买的虚拟主机,都会提供用户名、主机密码,此时,可以通过用户名、密码的方式访问。例如:

121.41.45.2 ansible_ssh_user=root ansible_ssh_pass=xxxxxx
121.41.45.3 ansible_ssh_user=root ansible_ssh_pass=xxxxxx

如果是拥有具备管理员权限的用户,并且该用户可以通过sudo提权,则:

121.41.45.2 ansible_ssh_user=sudouser ansible_ssh_pass=xxxxxx ansible_sudo_pass=xxxxxx
121.41.45.3 ansible_ssh_user=sudouser ansible_ssh_pass=xxxxxx ansible_sudo_pass=xxxxxx

2、密钥方式。如果提供的主机只能通过密钥的方式访问,并且所提供的用户未提供密码(该用户也未设密码,如果用户有密码,还是需要通过用户密码的方式连接)。可以通过密钥来执行:

执行前,先将各主机的私钥复制到容器里的共享目录里。

121.41.45.2 ansible_ssh_user=sudouser ansible_ssh_private_key_file=/home/agent/share/121.41.45.2.pem
121.41.45.3 ansible_ssh_user=sudouser ansible_ssh_private_key_file=/home/agent/share/121.41.45.3.pem

如果以上方式有问题,对于单机部署,可以在容器里,将.pem私钥文件复制到容器里的root用户的.ssh目录下并重命名为id_rsa(cp /home/agent/share/121.41.45.2.pem /root/.ssh/id_rsa),ssh 免密验证通过后再执行。

3、容器宿主机。如果提供的主机只能通过堡垒机访问,同网段的其他主机无法访问时,此时,可在该主机上安装Agent,然后在容器里通过容器网关的方式访问宿主机,通常宿主机的容器网关IP是172.17.0.1。

172.17.0.1 ansible_ssh_user=sudouser ansible_ssh_private_key_file=/home/agent/share/121.41.45.2.pem
或
172.17.0.1 ansible_ssh_user=sudouser ansible_ssh_pass=xxxxxx ansible_sudo_pass=xxxxxx

4、sudo提权。执行脚本里会涉及较多的yum安装,会要求执行的用户具备管理员权限并能够sudo,如果脚本执行时出现权限不足的提示,且确定ansible_ssh_user的用户具备管理员权限,可以:

121.41.45.2 ansible_ssh_user=sudouser ansible_ssh_pass=xxxxxx ansible_sudo_pass=xxxxxx ansible_become=yes ansible_become_method=sudo ansible_become_user=root
121.41.45.3 ansible_ssh_user=sudouser ansible_ssh_pass=xxxxxx ansible_sudo_pass=xxxxxx ansible_become=yes ansible_become_method=sudo ansible_become_user=root
或
121.41.45.2 ansible_ssh_user=sudouser ansible_ssh_private_key_file=/home/agent/share/121.41.45.2.pem ansible_become=yes ansible_become_method=sudo ansible_become_user=root
121.41.45.3 ansible_ssh_user=sudouser ansible_ssh_private_key_file=/home/agent/share/121.41.45.3.pem ansible_become=yes ansible_become_method=sudo ansible_become_user=root

部署JDK

可在多台主机批量部署OracleJDK或OpenJDK,需注意OracleJDK的版本不可选择,固定1.8.0_191。OpenJDK选用adoptium发行版,可以选择需要的版本进行部署,不提供版本时,默认安装8u392-b08版本。

可以点击<查看部署结果>的URL右键打开部署监听页面,点击连接按钮,可以查看部署执行结果。

当ansible_type是finish表示部署已结束,是否成功部署主要看failures是否为0,为0表示部署成功。status的状态有时候会不正确,有些忽视的错误(例如用户不存在校验)会导致最终的status为FAILED

部署完成后的验证:

OpenJDK安装完成后,需要自行将对应版本java软链到/usr/bin或/bin目录下

部署NGINX

可在多台主机批量部署Nginx,以源码编译方式安装,安装时会安装VTS Module。不提供版本时,默认安装1.22.0版本。

部署NACOS

可以部署Nacos单机版或者集群版,如果想部署集群版,建议部署3台主机。默认Nacos版本2.2.2。

部署REDIS

可以部署Redis的主节点、从节点,还有哨兵,默认部署版本5.0.12,请注意,Redis的部署目前尚不支持6、7这二个版本。

补充一下:

部署时发现对话上下文的保持并不是完全符合预期,Redis主节点、从节点、哨兵相互之间存在一定的关联,各自部署时建议明确指明所使用的Agent、版本号,以避免不一致。