基于谷歌雲 gcp 的動态 Ansible inventory 實踐
關于 Ansible inventory 說明
ansible inventory 檔案可以分為如下兩類:
- 靜态 inventory:主機資訊寫死到檔案,這種情況一般适用于管理少量主機,對于成百上千規模的主機人工管理主機清單檔案顯然是不合理的;
- 動态 inventory:ansible 根據腳本動态擷取雲提供商的主機清單檔案,這樣可以省去人工維護靜态清單檔案的繁瑣工作,對于大批量主機管理也是非常可靠的;
Ansible 動态擷取雲提供商主機 inventory 原理
ansible 通過
-i
參數指定動态 inventory 目錄,該目錄底下放置擷取雲提供商主機清單的腳本(ansible 社群提供的一般是 Python 腳本),ansible 在執行時該腳本會自動執行并将結果儲存到記憶體中。
那麼上面說的擷取雲提供商主機清單的可執行腳本在哪裡擷取呢?在 這裡 (ansible 官方源碼倉庫:社群提供的腳本)擷取,這裡有各個雲提供商對應的主機清單腳本(*.py)及配置檔案(*.ini),比如谷歌的
gce.py
和
gce.ini
,Aws 的
ec2.py
和
ec2.ini
等等。
基于 gcp 的動态 inventory 使用
下面是配置使用谷歌雲動态 ansible inventory 的詳細步驟
- 相關軟體包安裝;
pip install apache-libcloud pycrypto
- 谷歌雲控制台建立一個服務賬号(需要有 gce 的通路權限),擷取 json 認證檔案;
- 從 ansible 官方倉庫 下載下傳
和gce.py
檔案;gce.ini
mkdir -p inventories/gcp-dynamic-inventory
cd inventories/gcp-dynamic-inventory
wget https://github.com/ansible/ansible/blob/devel/contrib/inventory/gce.py
wget https://github.com/ansible/ansible/blob/devel/contrib/inventory/gce.ini
- 編輯
配置檔案gce.ini
[gce]
libcloud_secrets =
gce_service_account_email_address = <服務賬号郵箱:在第 2 步的 json 認證檔案裡面可以找到>
gce_service_account_pem_file_path = <第 2 步中 json 認證檔案路徑:絕對路徑>
gce_project_id = <gcp 項目 id>
gce_zone =
- 測試配置的正确性
# 如果輸出一個很長的 json 串表示沒問題
./gce.py --list
- 執行 ansible 任務
ansible -i inventories/gcp-dynamic-inventory <pattern> -m <module_name> -a 'module_args'
Ex:
# 檢視 asia-east1-a 區域的所有主機時間
ansible -i inventories/gcp-dynamic-inventory asia-east1-a -m shell -a 'date'
參數說明:
inventories/gcp-dynamic-inventory
: gce.py 腳本所在的目錄,ansible 運作時會自動在該目錄下執行該腳本擷取主機清單;
pattern
:./gce.py --list 執行結果的 json 頂級節點都可以作為 ansible 的目标主機;
最佳實踐:可以給 gce 主機添加 tag,然後通過 tag 對主機分組;
-
檔案位置gce.ini
gce.ini
檔案沒必要必須和
gce.py
在一個目錄,可以設定環境變量放到系統其他目錄,這樣就可以将配置和腳本分離,避免敏感配置放到代碼倉庫。設定方法:
~/.bashrc
檔案添加如下内容:
[[ -s "$HOME/.ansible/gce.ini" ]] && export GCE_INI_PATH="$HOME/.ansible/gce.ini"
Tips
ansible 執行時可以通過
--list-host
參數先測試下本次操作影響到哪些主機,不會真正執行 task;
參考文檔
https://temikus.net/ansible-gcp-dynamic-inventory-bootstrap
https://medium.com/vimeo-engineering-blog/orchestrating-gce-instances-with-ansible-d825a33793cd