乾貨|基於Ansible的Ceph自動化部署解析
點選上方“中興開發者社群”,關注我們
每天讀一篇一線開發者原創好文
▍作者簡介
作者紀伯年16年畢業於哈工大,目前是中興通訊的後端開發,專注於雲端計算與儲存技術。平時喜歡學習一些相關領域的架構知識,並熱衷於鑽研精妙的演算法與邏輯。
▍背景介紹
當前專案中Ceph部署採用利用Ansible呼叫部署指令碼的方式,Ceph部署部分文字分為兩部分:Ceph配置部署指令碼,Ansible執行指令碼。本文以當前專案版本的Ceph配置部署檔案為例,對Ceph自動化部署中的命令進行解釋與分析,旨在提供一份基於例項的實用性文件,方便他人日後對檔案的解讀與修改,或是對當前例項的部分或完整復現。
▍檔案結構解析
Ceph部署部分程式碼包含9個檔案,其中ceph-pkgs.tar.gz為Ceph安裝包檔案,script.tar.gz為Ceph部署指令碼壓縮包檔案,其餘為Ansible執行檔案。
Ansible執行檔案中,deploy.yml為Ansible入口檔案,vars.yml為變數檔案,其餘為執行任務檔案。將script.tar.gz解壓後可以看到Ceph配置執行檔案的內容,其中install-package.sh為Ceph安裝指令碼,其餘均為Ceph配置部署指令碼。程式碼執行的流程如下圖所示:
▍Ansible執行程式碼解析
1. 基礎介紹
Ansible的指令碼叫做Playbook,用YAML格式編寫。最基本的Playbook包含三個部分:主機與使用者、執行任務、響應事件。任務的執行會呼叫Ansible的各種模組。下面將結合具體例項逐條語句分析,更多Playbook語法請參見Ansible書籍或官方文件
2. 程式碼解析
按照程式碼執行順序,首先進入deploy.yml檔案。以下為檔案原始碼及解析:
而後在任務列表中,進入unarchive.yml檔案。以下為檔案原始碼及解析:
隨後執行install-package.yml。以下為檔案原始碼及解析:
接下來執行deploy_task.yml。以下為檔案原始碼及解析:
經過Ceph配置部署指令碼的執行後,Ceph部署成功,然後執行osd_task.yml和rest_api.yml。以下為檔案原始碼及解析:
Vars.yml為變數檔案,格式較為規矩,在此不做贅述。
以上即為Ansible執行指令碼的簡要解析,其中出現的模組、方法有限,故介紹不夠全面,如需更豐富的配置和操作請參閱書籍或手冊。
▍Ceph配置部署指令碼解析
1.基礎介紹
所有Ceph的部署都始於儲存叢集。Ceph儲存叢集有兩類守護程式:物件儲存守護程式OSD(Object Storage Device Daemon Progress)和監聽器MON(Monitor)。若要執行Ceph檔案系統(CephFS)則還需要一個後設資料伺服器MDS(Metadata Server)。本例為搭建3節點的Ceph叢集並使用CephFS,需要1個MON,三個OSD,兩個MDS。
2.程式碼解析
當Ansible執行到install-package.yml最後一句時執行install-package.sh指令碼檔案。以下為檔案原始碼及解析:
而後,Ansible繼續執行到deploy_task.yml中,呼叫deployInterface.sh指令碼檔案並輸入引數。以下為檔案原始碼及解析:
隨後進入ceph-deploy.sh開始執行Ceph叢集配置及部署。以下為檔案原始碼及解析(本節程式碼較長,格式多樣,故原始碼和解析並非完全左右分佈,且照原始碼有些許不同,但我相信你們看得懂):
部署節點2、3時呼叫了ceph-rest-api.sh指令碼,用以啟動restful api。以下為檔案原始碼及解析:
此指令碼在節點2、3上均執行一次,隨後在Ansible執行最後一個檔案rest_api.yml時再在本節點執行一次。
依次退出ceph-deploy-.sh、deployInterface.sh、deploy_task.yml後,Ansible進入osd_task.yml呼叫deploy-osd.sh指令碼。以下為檔案原始碼及解析:
最後,Ansible進入rest_api.yml,呼叫ceph-rest-api.sh指令碼。自此,Ceph配置、部署的工作全部完成。
▍總結
本文以Ceph部署部分原始碼為例,對基於Ansible的Ceph配置部署檔案進行了逐條解析。儘管抱著既詳盡又清爽的初衷,但Ceph本身的結構、細節的配置並不易理解與掌握,加之官方文件遭爛的結構體系和不完整的關鍵詞解釋(英文文件稍好,也沒好多少),使得在趕工下完成的本文既不詳盡又不清爽。還望和大家共同探討並給與指正。
相關文章
- [自動化]基於kolla的自動化部署ceph叢集
- 運維必會:基於 Ansible 的 Docker 自動化部署,小白也能看懂?運維Docker
- Ansible自動部署工具
- 基於Jenkins Pipeline自動化部署Jenkins
- 使用 Jenkins + Ansible 實現自動化部署 NginxJenkinsNginx
- [自動化]基於kolla部署的openstack自動化巡檢生成xlsx報告
- Ansible自動化部署工具-元件及語法介紹元件
- 基於Jenkins自動化部署spring boot專案JenkinsSpring Boot
- 基於 deployer 的 Web 端自動部署Web
- 自動化kolla-ansible部署openstack+GPU透傳方法GPU
- 乾貨丨RPA郵件自動化技巧
- mall在Linux環境下的自動化部署(基於Jenkins)LinuxJenkins
- Ansible自動化運維工具運維
- Ansible自動化配置詳解
- 基於 Nebula Operator 的 K8s 自動化部署運維K8S運維
- [自動化]淺聊ansible的冪等
- Ansible自動化部署工具-role模式安裝filebeat實際案例分析模式
- 在Linux中,如何在Linux中使用Ansible進行自動化部署?Linux
- 自動部署基於issues的靜態部落格
- ansible自動化運維入門運維
- 提升自動化技巧的 10 篇 Ansible 文章
- 自動化運維工具ansible的實踐運維
- 基於gulp的前端自動化方案前端
- 基於 Github Actions 自動部署 Hexo 部落格GithubHexo
- iOS自動化測試的那些乾貨:關於appium啟動報錯問題的解決辦法iOSAPP
- 自動化運維工具Ansible介紹運維
- ansible自動化運維資料庫運維資料庫
- 「乾貨」介面自動化實踐:高效智慧介面場景自動巡檢方案
- 基於Ansible實現Apache Doris快速部署運維指南Apache運維
- 基於Selenium + Python的web自動化框架PythonWeb框架
- 基於 Htte 的 API 自動化測試API
- 【小白向】基於Docker使用Gogs,Drone以及drone-runner-docker的自動化部署DockerGo
- 基於gogs和drone的一個輕量級的開發部署自動化流程Go
- Maven 自動化部署Maven
- Maven自動化部署Maven
- Ansible與Ansible部署
- 自動化kolla-ansible部署centos7.9+openstack-train-超融合單機架構CentOSAI架構
- Python+Django+Ansible Playbook自動化運維PythonDjango運維
- 用Ansible 自動化搭建本地Kubernetes叢集