1、自動化運維平臺的特性php
運維自動化最重要的就是標準化一切python
OS的選擇統一化,同一個項目使用一樣的OS系統部署其所須要的各種軟件mysql
軟件安裝標準化,例如JAVA虛擬機,php,nginx,mysql等各種應用須要的軟件版本,安裝目錄,數據存放目錄,日誌存放目錄等。nginx
應用包目錄統一標準化,及應用命名標準化git
啓動腳本統一目錄和名字,須要變化的部分經過參數傳遞web
配置文件標準化,須要變化的部分經過參數傳遞sql
日誌輸出,日誌目錄,日誌名字標準化docker
應用生成的數據要實現統一的目錄存放數據庫
主機/虛擬機命名標準化,虛擬機管理使用標準化模板api
使用docker比較容易實現軟件運行環境的標準化
2、CMDB包含的功能
一、用戶管理,記錄測試,開發,運維人員的用戶表
二、業務線管理,須要記錄業務的詳情
三、項目管理,指定此項目用屬於哪條業務線,以及項目詳情
四、應用管理,指定此應用的開發人員,屬於哪一個項目,和代碼地址,部署目錄,部署集羣,依賴的應用,軟件等信息
五、主機管理,包括雲主機,物理機,主機屬於哪一個集羣,運行着哪些軟件,主機管理員,鏈接哪些網絡設備,雲主機的資源池,存儲等相關信息
六、主機變動管理,主機的一些信息變動,例如管理員,所屬集羣等信息更改,鏈接的網絡變動等
七、網絡設備管理,主要記錄網絡設備的詳細信息,及網絡設備鏈接的上級設備
八、IP管理,IP屬於哪一個主機,哪一個網段, 是否被佔用等
3、CMDB實現的四種方式
方式一:Agent實現方式:
Agent方式,能夠將服務器上面的Agent程序做定時任務,定時將資產信息提交到指定API錄入數據庫
其本質上就是在各個服務器上執行subprocess.getoutput()命令,而後將每臺機器上執行的結果,返回給主機API,而後主機API收到這些數據以後,放入到數據庫中,最終經過web界面展示給用戶
subprocess,執行命令,經過request模塊 調用api接口
優勢:速度快
缺點:須要爲每臺服務器部署一個Agent程序
方式二:ssh實現方式 (基於Paramiko模塊)
中控機經過Paramiko(py模塊)登陸到各個服務器上,而後執行命令的方式去獲取各個服務器上的信息
優勢:無Agent
缺點:依賴於網絡,速度慢
若是在服務器較少的狀況下,可應用此方法
import paramiko # 建立SSH對象 ssh = paramiko.SSHClient() # 容許鏈接不在know_hosts文件中的主機 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 鏈接服務器 ssh.connect(hostname='c1.salt.com', port=22, username='root', password='123') # 執行命令 stdin, stdout, stderr = ssh.exec_command('df') # 獲取命令結果 result = stdout.read() # 關閉鏈接 ssh.close()
方式三:saltstack方式
此方案本質上和第二種方案大體是差很少的流程,中控機發送命令給服務器執行。服務器將結果放入另外一個隊列中,中控機獲取將服務信息發送到API進而錄入數據庫。
優勢:快,開發成本低
缺點:依賴於第三方工具
saltstack 安裝請查看:
https://blog.51cto.com/silencezone/2340303
方式四:
Puppet(ruby語言開發)(瞭解)
參考:
https://lupython.gitee.io/2018/05/05/CMDB%E4%BB%8B%E7%BB%8D/