Ansible 是一款自動化運維工具,基於 Python 開發,集合了眾多運維工具(puppet、chef、func、fabric)的優點,實現了批次系統設定、批次程式部署、批次執行命令等功能。
部署簡單,只需在主控端部署 Ansible 環境,被控端無需做任何操作
預設使用 SSH 協定對裝置進行管理
有大量常規運維操作模組,可實現日常絕大部分操作
設定簡單、功能強大、擴充套件性強
支援 API 及自定義模組,可通過 Python 輕鬆擴充套件
通過 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 的各種功能,例如管道等
檢視當前使用者 id
ansible guance -m shell -a 'id'
檢視當前登入至系統的使用者
ansible guance -m shell -a 'who'
該模組用於將檔案複製到遠端主機,同時支援給定內容生成檔案和修改許可權等
複製 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'
該模組用於設定檔案的屬性,比如建立檔案、建立連結檔案、刪除檔案等
在 /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'
該模組用於從遠端某主機獲取(複製)檔案到本地
拉取遠端主機 /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