天天看點

基于谷歌雲 gcp 的動态 Ansible inventory 實踐

基于谷歌雲 gcp 的動态 Ansible inventory 實踐

關于 Ansible inventory 說明

ansible inventory 檔案可以分為如下兩類:

  1. 靜态 inventory:主機資訊寫死到檔案,這種情況一般适用于管理少量主機,對于成百上千規模的主機人工管理主機清單檔案顯然是不合理的;
  2. 動态 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 的詳細步驟

  1. 相關軟體包安裝;
pip install apache-libcloud pycrypto
           
  1. 谷歌雲控制台建立一個服務賬号(需要有 gce 的通路權限),擷取 json 認證檔案;
  2. 從 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
           
  1. 編輯

    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 =
           
  1. 測試配置的正确性
# 如果輸出一個很長的 json 串表示沒問題
./gce.py --list
           
  1. 執行 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 對主機分組;

  1. 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

繼續閱讀