Ansible 批次處理實戰

2022-10-24 18:00:08

軟體簡介

Ansible 是一款自動化運維工具,基於 Python 開發,集合了眾多運維工具(puppet、chef、func、fabric)的優點,實現了批次系統設定、批次程式部署、批次執行命令等功能。

功能特點

  1. 部署簡單,只需在主控端部署 Ansible 環境,被控端無需做任何操作

  2. 預設使用 SSH 協定對裝置進行管理

  3. 有大量常規運維操作模組,可實現日常絕大部分操作

  4. 設定簡單、功能強大、擴充套件性強

  5. 支援 API 及自定義模組,可通過 Python 輕鬆擴充套件

  6. 通過 Playbooks 來客製化強大的設定、狀態管理

基礎架構


  • Ansible:Ansible 核心程式。

  • HostInventory:記錄由 Ansible 管理的主機資訊,包括埠、密碼、ip 等。

  • Playbooks:YAML 格式檔案,多個任務定義在一個檔案中,定義主機需要呼叫哪些模組來完成的功能。

  • CoreModules:核心模組,主要操作是通過呼叫核心模組來完成管理任務。

  • CustomModules:自定義模組,完成核心模組無法完成的功能,支援多種語言。

  • ConnectionPlugins:連線外掛,Ansible 和 Host 通訊使用

任務執行

Ansible 系統由控制主機對被管節點的操作方式可分為兩類,即 adhoc 和 playbook

  • ad-hoc 模式(對等模式) 使用單個模組,支援批次執行單條命令。ad-hoc 命令是一種可以快速輸入的命令,而且不需要儲存起來的命令,就相當於 bash 中的一句 shell 命令。

  • playbook模式 (劇本模式) Ansible 主要管理方式,也是 Ansible 功能強大的關鍵所在。playbook 通過多個 task 集合完成一類功能,如 Web 服務的安裝部署、資料庫伺服器的批次備份等。可以簡單地把 playbook 理解為通過組合多條 ad-hoc 操作的組態檔。

批次處理實戰

環境準備

 

 

 

軟體安裝

登入 ansible01,執行安裝命令

yum install -y ansible

  

主要程式

  • /usr/bin/ansible 主程式

  • /usr/bin/ansible-doc 設定檔案

  • /usr/bin/ansible-playbook 客製化自動化任務,編排劇本工具

  • /usr/bin/ansible-pull 遠端執行命令的工具

  • /usr/bin/ansible-vault 檔案加密工具

主要組態檔

  • /etc/ansible/ansible.cfg 主組態檔

  • /etc/ansible/hosts 主機清單(將被管理的主機放到此檔案)

  • /etc/ansible/roles/ 存放角色的目錄

 

免密登入

登入 ansible01,生成祕鑰,預設路徑為 /root/.ssh/id_rsa、/root/.ssh/id_rsa.pub

ssh-keygen

  

祕鑰分發至需要被管理的節點

ssh-copy-id [email protected]

ssh-copy-id [email protected]

  

修改主機清單檔案 /etc/ansible/hosts,新增分組名稱以及主機 ip

[guance]

10.0.0.67

10.0.0.66

  

驗證連通性

ansible guance -m ping

  

常用模組

Shell 模組

Shell 模組可以在遠端主機上呼叫 shell 直譯器執行命令,支援 shell 的各種功能,例如管道等

  • 檢視當前使用者 id

ansible guance -m shell -a 'id'

 

 

 

 

  • 檢視當前登入至系統的使用者

ansible guance -m shell -a 'who'

 

 

 

Copy 模組

該模組用於將檔案複製到遠端主機,同時支援給定內容生成檔案和修改許可權等

  • 複製 ansible.cfg 檔案至遠端主機,並指定許可權為 "讀寫" -rw-rw-rw-

ansible guance -m copy -a 'src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg mode=666'

  

 

 

 

檢視遠端主機 ansible.cfg 檔案

ansible guance -m shell -a 'ls -l /tmp/ansible.cfg'

  

 
  • 指定內容並生成檔案

ansible guance -m copy -a 'content="hello world" dest=/tmp/hello mode=666'

  

 

檢視遠端主機檔案

ansible guance -m shell -a 'cat /tmp/hello'

  

File 模組

該模組用於設定檔案的屬性,比如建立檔案、建立連結檔案、刪除檔案等

  • 在 /tmp 下建立 app 目錄

ansible guance -m file -a 'path=/tmp/app state=directory'

  

檢視 /tmp 目錄

ansible guance -m shell -a 'ls -l /tmp'

 

  • 刪除之前從 ansible01 複製過來的 ansible.cfg 檔案

ansible guance -m file -a 'path=/tmp/ansible.cfg state=absent'

  

 

Fetch 模組

該模組用於從遠端某主機獲取(複製)檔案到本地

  • 拉取遠端主機 /tmp/hello 檔案至 /root 目錄

ansible guance -m fetch -a 'src=/tmp/hello dest=/root'

  

 

 

在 /root 目錄下,可以看到兩個新目錄 (遠端主機 ip 為目錄名稱)

yum -y install 

treetree /root

  

 

 

 

觀測雲應用

批次安裝

使用 shell 模組安裝 datakit (注意修改對應的 token)

ansible guance -m shell -a 'DK_DATAWAY="https://openway.guance.com?token=token" bash -c "$(curl -L https://static.guance.com/datakit/install.sh)"'

檢視程序是否已經啟動

ansible guance -m shell -a 'ps -ef|grep datakit|grep -v grep'

批次設定

  • 開啟 netstat 外掛

使用 shell 模組複製檔案 netstat.conf.sample 為 netstat.conf

ansible guance -m shell -a 'cp /usr/local/datakit/conf.d/host/netstat.conf.sample /usr/local/datakit/conf.d/host/netstat.conf'

批次重啟 datakit

ansible guance -m shell -a 'systemctl restart datakit'

批次升級

新建 datakit 升級 yaml 檔案,/etc/ansible/dk_upgrade.yaml

- hosts: guance  
remote_user: root  
tasks:
   - name: dk versioncheck
     shell: datakit--version|grep -i upgrade|wc -l
     register:version
   -name: dkupgradewhen: version.stdout >"0"
     shell: DK_UPGRADE=1bash -c"$(curl -L 
     https://static.guance.com/datakit/install.sh)"

執行 playbook

ansible-playbook /etc/ansible/dk_upgrade.yaml
 

檢視 datakit 版本已經為最新

ansibleguance -m shell -a'datakit --version'

新增定時任務 crontab -e (每天 02 點 02 分執行批次升級)

02 02* ** ansible-playbook /etc/ansible/dk_upgrade.yaml