一、自動化運維平臺的特性
運維自動化最重要的就是標準化一切
OS的選擇統一化,同一個項目使用同樣的OS系統部署其所需要的各類軟件
軟件安裝標準化,例如JAVA虛擬機,php,nginx,mysql等各類應用需要的軟件版本,安裝目錄,數據存放目錄,日誌存放目錄等。
應用包目錄統一標準化,及應用命名標準化
啓動腳本統一目錄和名字,需要變化的部分通過參數傳遞
配置文件標準化,需要變化的部分通過參數傳遞
日誌輸出,日誌目錄,日誌名字標準化
應用生成的數據要實現統一的目錄存放
主機/虛擬機命名標準化,虛擬機管理使用標準化模板
使用docker比較容易實現軟件運行環境的標準化
二、CMDB包含的功能
1、用戶管理,記錄測試,開發,運維人員的用戶表
2、業務線管理,需要記錄業務的詳情
3、項目管理,指定此項目用屬於哪條業務線,以及項目詳情
4、應用管理,指定此應用的開發人員,屬於哪個項目,和代碼地址,部署目錄,部署集羣,依賴的應用,軟件等信息
5、主機管理,包括雲主機,物理機,主機屬於哪個集羣,運行着哪些軟件,主機管理員,連接哪些網絡設備,雲主機的資源池,存儲等相關信息
6、主機變更管理,主機的一些信息變更,例如管理員,所屬集羣等信息更改,連接的網絡變更等
7、網絡設備管理,主要記錄網絡設備的詳細信息,及網絡設備連接的上級設備
8、IP管理,IP屬於哪個主機,哪個網段, 是否被佔用等
三、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 安裝請查看:
http://blog.51cto.com/silencezone/2340303
方式四:
Puppet(ruby語言開發)(瞭解)
參考:
https://lupython.gitee.io/2018/05/05/CMDB%E4%BB%8B%E7%BB%8D/