共計 2978 個字符,預計需要花費 8 分鐘才能閱讀完成。
本篇文章為大家展示了如何使用 GlobalSSH 加速 Ansible 海外部署效率,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
什么是 Ansible
Ansible 是一個簡單高效、無 Agent 架構的自動化編排、部署及配置管理工具,通過 SSH 協議實現遠程節點和管理節點之間的通信。
Ansible 的目的是簡化大量復雜重復的運維工作, 以精簡的技術思路建立公司內統一的自動化文化。無 Agent 的架構使其比其他工具更顯簡單,基于 SSH 可以做到的事 Ansible 都可以做的更好,超高的易用度使其可以簡單集成到現有體系之中,因而被廣泛使用。
UCloud Ansible 使用場景 UCloud 內部也大量使用到了 Ansible。比如,機房產品部署系統,通過 Ansible 實現了部署效率的極大提升,目前已經成為 UCloud 機房部署的重要工具。又如,現網大規模灰度發布系統,通過集成 Ansible 的基礎 API 和 Callback 功能,很好的解決了灰度發布、回滾、控制等難題,該系統已經在線上穩定運行 3 年以上,完成相關灰度發布任務上萬個。
下面將詳細介紹 Ansible 在機房產品部署系統中的使用,相信對有多機房部署需求的讀者會有幫助。
海外多機房部署 我們基于 Ansible 集中式地批量部署和管理服務,集中式管理中心位于北京 / 上海機房。當海外節點(如拉各斯、胡志明等)需要建設時,通過 Ansible 來遠程部署云產品及內部服務。部分云產品是基于 UCloud 云主機作為 IaaS 層搭建的,所以也是通過 SSH 連到對應的海外云主機進行操作。
這和一般用戶的使用場景有很多相似之處,無論其是自建 IDC 或用了公有云,甚至多云部署來同時管理不同云上的服務器,都有類似批量部署的需要。
海外部署有個額外的痛點,就是部署效率的問題。Ansible 使用 SSH 協議進行通信,SSH 通道的創建和通信速度都較慢。當需要通過外網管理,而網絡環境較差或帶寬不足的情況下,執行時間基本上無法忍耐,體現在用 Ansible 部署時,經常會出現卡頓、連接失敗、傳輸速度較慢等現象,使用 Copy 模塊傳輸稍大的代碼包 / 鏡像文件時基本上要等到花兒都謝了。
我們的解決方法,是把 UCloud 的 PaaS 產品 GlobalSSH,集成進 Ansible,用于提高跨國遠程管理服務器效率。
GlobalSSH GlobalSSH 為了保障海外數據中心的運維而推出,采用了 UCloud 眾多 IaaS 產品如 ULB4(四層負載均衡)、UDPN(洲際內網互聯、0 丟包)及高包量云主機,引入智能 DNS 服務以提供就近接入的能力。網絡轉發基于成熟穩定的 GRE、NAT 技術,支持 TCP 端口(除 80、443)四層轉發。
Ansible Playbook 方式部署 我們將 GlobalSSH 集成到 Ansible,做一個簡單的軟件包拷貝及安裝,步驟如下所示。
1)首先,我們通過 UCloud API 或控制臺在北京二和拉各斯(尼日利亞)各創建一臺云主機,帶寬為 1Mb,其中拉各斯機房會自動開啟 GlobalSSH 功能(所有 UCloud 海外機房均會自動開啟),如下圖所示:
2)準備一個簡單的 Ansible Playbook,分別完成 3 個步驟:gather facts、copy 代碼包以及 yum 安裝代碼。相關的 playbook 如下所示:
— – hosts: all tasks: – name: copy test copy: src=/data/MySQL-devel-5.6.41-1.el6.x86_64.rpm dest=/data/test – name: install 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 的 Dynamic Inventory 功能,直接在生成的 inventory 中將 GlobalSSH 的加速域名加到 ansible_ssh_host 變量中了,使用起來也是非常容易的,如下所示。
[root@10-10-83-122 ~]# cat hosts_nrly [all] 152.32.140.39 ansible_ssh_pass=example [root@10-10-83-122 ~]# cat hosts_nrly_1 [all] 152.32.140.39 ansible_ssh_pass=example ansible_ssh_host=152.32.140.39.ipssh.net 4)使用 ansible-playbook 命令執行該 playbook,任務完成。
測試對比 前面提到,GlobalSSH 大幅提高了我們海外部署的效率。可以通過另寫一個無 GlobalSSH 加速的 Playbook,來測試一下具體的加速效果。
無 GlobalSSH 的 Playbook 寫起來比較簡單,和上文基本類似,區別在第三步的 hosts 文件里不使用加速域名,而是直接填寫原有的外網 IP 地址。
為防止單次測試結果的不準確,這里測試了 10 次,取平均值進行比較。
測試命令:
time for i in seq 1 10; do ansible-playbook -i hosts_nrly test_playbook.yml; done time for i in seq 1 10; do ansible-playbook -i hosts_nrly_1 test_playbook.yml; done 最終的結果如下所示,可以看到在簡單的 Ansible Playbook 部署中,經過 GlobalSSH 加速后的效果提升了 32.23%.
Ansible Ad-hoc 方式 GlobalSSH 在低速的帶寬下可以提升整個網絡傳輸的穩定性和速度,尤其是對 RTT (Round-Trip Time) 往返延遲的提升,更是有著外網彈性 IP 所不具備的速度優勢。因此我們認為它對 Ansible Ad-hoc 方式也有很大幫助。
運維人員經常會用 Ad-hoc 方式,它類似 pssh,卻支持 Ansible 所有的 module 語法,通常的使用場景是批量執行命令并查看回顯結果。為了驗證假設,我們對 Ad-hoc 方式也做了類似測試,發現 GlobalSSH 后的優化效果更明顯,優化速度超過 50%,詳細結果如下所示。
測試命令:
time for i in seq 1 10; do ansible -i hosts_nrly all -m shell -a cat /var/log/messages done time for i in seq 1 10; do ansible -i hosts_nrly_1 all -m shell -a cat /var/log/messages done
測試結果:
Ansible 是被大量使用的 DevOps 工具,我們在使用中根據需要,將 GlobalSSH 很容易地集成其中,避免了服務器部署中 SSH 卡頓造成的不良影響。
上述內容就是如何使用 GlobalSSH 加速 Ansible 海外部署效率,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。