簡單地分享下利用Ansible實現ADC自動化維運和配置變更的經驗
一、 Ansible簡介
Ansible是一種開源軟體供應,配置管理和應用程式部署工具,可將基礎結構作為程式碼來實現。它可以在許多類Unix系統上運行,並且可以配置類Unix系統以及MicrosoftWindows。 它包括自己的描述性語言來描述系統組態。Ansible是無代理的,它通過SSH或Windows遠端系統管理(允許遠端PowerShell執行)臨時進行遠端連接以執行其任務。 |

1. Ansible 主要組成部分
· ansible playbooks 任務劇本(任務集),編排第一Ansible任務集的設定檔,由Ansible順序依次執行,通常是json格式的yml檔
· inventory Ansible管理主機的清單/etc/ansible/hosts
· modules:Ansible 執行命令的功能模組,多數為內置的核心模組,也可自訂
· plugins 模組功能的補充,如連接類型外掛程式,迴圈外掛程式,變數外掛程式,過濾外掛程式等,該功能不常用
· API 供協力廠商程式調用的應用程式設計發展介面
· Ansible 組合inventory、API、modules、plugins的綠框,可以理解為是ansible命令工具,其為核心執行工具
2. 利用ansible實現管理的方式
· Ad-Hoc 即ansible命令,主要用於臨時命令使用場景
· Ansible-playbook 主要用於長期規劃好的,大型目的場景,需要有提前的規劃
TIPS
在ADC的使用場景中,我們主要用AD-HOC模式來運行維運命令,比如查詢當前連接數,CPU/記憶體利用率等;Playbook用於自動化配置一些Services、VS等配置 |
3. Ansible 主要操作對象
· HOSTS主機
· NETWORKING網路設備
二、 Ansible安裝
1. 前置條件
· 需要Server Linux系統(Centos或Ubuntu)
· 需要安装Python
2. 安裝過程
我的環境是Centos系統,所以直接通過yum帶的EPEL資源中安裝。
yum install -y ansible

驗證安裝
[root@vms66 ~]# ansible–versionansible 2.7.7 config file = /etc/ansible/ansible.cfg configured module search path =[‘/root/.ansible/plugins/modules’, ‘/usr/share/ansible/plugins/modules’] ansible python module location =/usr/lib/python3.6/site-packages/ansible executable location = /usr/bin/ansible python version = 3.6.8 (default, Nov21 2019, 19:31:34) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]
3. Ansible設定檔
預設安裝完Ansible中包含三個檔,ansible.cfg、hosts、roles;
· /etc/ansible/ansible.cfg 主設定檔,配置ansible屬性
· /etc/ansible/hosts 主機清單,訪問設備的位址
· /etc/ansible/roles/存放角色的目錄

Ansible.cfg檔說明
[defaults]
#inventory= /etc/ansible/hosts #主機清單設定檔
#library= /usr/share/my_modules/ #庫檔存放目錄
#forks= 5 #預設併發數
#poll_interval = 15 #預設間隔時間
#sudo_user= root # 預設sudo 用戶
#ask_sudo_pass= True #每次執行ansible命令是否詢問ssh密碼
#ask_pass= True
#remote_port= 22 #預設的節點ssh埠
#host_key_checking = False # 檢查對應伺服器的host_key,建議取消注釋
hosts檔說明
//單台主機www.test.com //FQDN方式
1 – 168.100.100 //IP地址
2 – 168.100.222:2222 //SSH服務埠不是22時使用
//多台主機
[sportstestServer] //定義一個組名
sports.test.com //FQDN方式 【定義組內單台主機的位址】
172.16.1.101 //IP地址
[webServer]
1 – 168.100.100 //一台主機可以在不同的組內,它同時屬於[sportstestServer]組

三、 Ansible配置
1. 列出被執行設備地址清單:ansible–list-host all

2. 設置使用密碼交互登錄,預設需要SSHKEY
預設使用密碼登錄會報錯:Usinga SSH password instead of a key is not possible because Host Key checking isenabled and sshpass does not support this. Please add this host’s fingerprintto your known_hosts file to manage this host.vimansible.cfg修改Host配置,取消注釋#host_key_checking = False

3. 使用ad-hoc命令來實現日常維運命令查詢
ansible 192.168.211.101 -m raw-a “show ns stats” -u nsroot -k


-m ansible中模組的意思,預設是command
-a ansible中參數的意思,用來指定相應命令
-u ansible中用戶名的意思,指定登錄設備用戶名
-k ansible中指定密碼交互的意思
4. 設置免用戶名和密碼查詢
需要修改sshd服務參數 vim /etc/ssh/ssh_config

修改後重啟sshd服務 systemctl sshdrestart
設置使用者和密碼資訊到Host檔

驗證結果:ansible adc -mraw -a “stat http”

5. 通過Crontab實現自動化週期維運
設置腳本 crontab -e 每天16:27抓取HTTP STAT訊息


6. Playbook介紹和使用
Playbooks 是 Ansible的配置,部署,編排語言.他們可以被描述為一個需要希望遠端主機執行命令的方案,或者一組IT程式運行的命令集合.如果 Ansible 模組你是工作室中的工具,那麼 playbooks 就是你設置的方案計畫.在基礎層面, playbooks 可以被用來管理用於部署到遠端主機的設定檔.在更高的層面上,playbooks可以依次對多層式架構上的伺服器執行上線包括滾動更新在內的操作並可以將操作委託給其他主機包括在此過程中發生的與監視伺服器,負載均衡伺服器的交交互操作在內.
配置playbook實現負載均衡配置自動化部署 ansible-playbook xxxxx




Hosts: 設置你要訪問的ADC 由於我們之前配置已經做好,所以只需要填寫正確的組名即可
Task :我們要做的配置任務
發表迴響