使用UCloud GlobalSSH加速Ansible海外部署效率

?

Ansible是一种简单,高效,无代理的体系结构,用于自动编排,部署和配置管理工具。 SSH协议支持远程节点和管理节点之间的通信。 Ansible也在UCloud中广泛使用。例如,UCloud会议室产品部署系统通过Ansible大大提高了部署效率。它已成为UCloud会议室部署的重要工具。本文将详细介绍Ansible在UCloud会议室产品部署系统中的使用。我相信有多个房间部署。有需要的读者会很有帮助。

什么是Ansible

Ansible是一种简单,高效,无代理的体系结构,用于自动编排,部署和配置管理工具。 SSH协议支持远程节点和管理节点之间的通信。

Ansible的目的是简化大量复杂和重复的操作和维护工作,并通过简化的技术思想在公司内部建立统一的自动化文化。无代理架构使其比其他工具更简单。 Ansible可以根据SSH的功能做得更好。它易于使用,易于集成到现有系统中,并得到广泛应用。

img_pic_1554878522_0.png

UCloud Ansible使用场景

Ansible也在UCloud中广泛使用。例如,机房部署系统通过Ansible大大提高了部署效率,已成为UCloud房间部署的重要工具。另一个例子是当前网络的大规模灰度发布系统。通过集成Ansible的基本API和回调函数,可以很好地解决灰度发布,回滚和控制等问题。该系统已稳定运行3年以上。有成千上万的相关灰度发布任务。

以下是Ansible在机房部署系统中的使用的详细介绍。我相信具有多个计算机房部署要求的读者将会有所帮助。

海外多房间部署

我们集中部署和管理基于Ansible的服务,集中管理中心位于北京/上海机房。当需要构建海外节点(如Lagos,Ho Chi Minh等)时,Ansible可用于远程部署云产品和内部服务。一些云产品构建在UCloud云主机上作为IaaS层,因此它们也通过SSH连接到相应的海外云主机。

img_pic_1554878522_1.png

这与一般用户的使用场景有许多相似之处。无论是自建IDC还是公共云,甚至是多云部署同时管理不同云上的服务器,都需要批量部署。

img_pic_1554878522_2.png

海外部署还存在一个额外的痛点,即部署效率问题。 Ansible使用SSH协议进行通信,并以较慢的速度创建和通信SSH通道。当需要通过外部网络进行管理,并且网络环境差或带宽不足时,执行时间基本上是不可容忍的。在Ansible中部署时,通常会出现卡住,连接失败和传输速度慢等现象。当复制模块传输稍大的代码包/图像文件时,它基本上必须等到鲜花感恩。

我们的解决方案是将UCloud的PaaS产品GlobalSSH集成到Ansible中,以提高跨国远程管理服务器的效率。

GlobalSSH

为了保护海外数据中心的运营和维护,GlobalSSH采用UCloud的许多IaaS产品,如ULB4(四层负载均衡),UDPN(洲际内部网互连,零丢包)和高容量云托管来引入智能DNS服务。提供附近访问的能力。网络转发基于成熟稳定的GRE和NAT技术,支持TCP端口(除了80,443)四层转发。

img_pic_1554878522_3.png

Ansible Playbook模式部署

我们将GlobalSSH集成到Ansible中,进行简单的包复制和安装,如下所示。

1)首先,我们通过UCloud API或带有1Mb带宽的控制台在北京Ergo和Lagos(尼日利亚)创建云主机。拉各斯机房将自动启用GlobalSSH(所有UCloud海外客房将自动打开),如下所示:

img_pic_1554878522_4.png

2)准备一个简单的Ansible Playbook并完成3个步骤:收集事实,复制代码包和yum安装代码。相关的剧本如下:

--- - 主机:所有任务: - 名称:复制测试副本: src= dest=/data/test - name:安装mysql-devel yum: name=/data/MySQL-devel-5.6.41-1.el6.x86_64.rpm state=present

3)准备hosts文件以配置GlobalSSH生成的域名。 Ansible支持GlobalSSH非常简单,只需将ansible_ssh_host=xxx.xxx.xxx.xxx.ipssh.net添加到主机变量即可。我们的计算机房部署系统结合了Ansible的动态库存功能,可以将GlobalSSH加速域名直接添加到生成的库存中的ansible_ssh_host变量中。它也非常容易使用,如下所示。

[root