使用Ansible前需要進行ssh金鑰認證
Ansible概述
自動化運維:批次管理、批次分發、批次執行
Ansible由python編寫
批次管理工具 | 說明 |
Ansible | 無客戶端,基於ssh進行管理與維護 |
Saltstack | 需要安裝客戶端,基於ssh進行管理與維護 |
Terraform | tf批次管理基礎設施 |
Ansible管理架構
- Host Inventory(主機清單):被管理主機的ip列表、模組
- ad-hoc模式(點對點模式):命令列批次管理
- playbook模式(劇本模式):將對應操作寫入指令碼
部署與配置
# 部署ansible yum install -y ansible # 修改配置檔案關閉主機Host_key_checking # 修改配置檔案開啟日誌功能 [root@m01 ~]# egrep -vn '^$|#' /etc/ansible/ansible.cfg 10:[defaults] 71:host_key_checking = False 111:log_path = /var/log/ansible.log 327:[inventory] 340:[privilege_escalation] 346:[paramiko_connection] 370:[ssh_connection] 431:[persistent_connection] 445:[accelerate] 460:[selinux] 469:[colors] 485:[diff]
Ans-inventory主機清單
- 主機清單:ansible管理的節點的列表
- ansible預設讀取/etc/ansible/hosts檔案
主機清單格式
# 主機清單格式 [分類或分組名] # 分類要體現出對應節點的作用 ip地址/主機名/域名 # 對應的主機名需要能解析 #子組的格式 [組名:children] 子組名 子組名 [root@m01 ~]# cat /etc/ansible/hosts [web] 172.16.1.7 [backup] 172.16.1.41 [nfs] 172.16.1.31 [data:children] [nfs] [backup] # 指定使用者、密碼、埠(不推薦,推薦先進行ssh認證,再進行管理) 172.16.1.7 ansible_user=root ansible_password=root ansible_port=22
Ansible模組
- ansible中的模組類似於Linux中的命令
- Linux命令管理系統
- ansible模組實現批次管理
ansible選項 | 說明 |
-i | 指定主機清單檔案 |
-m | 指定模組 |
-a | 指定模組中的選項 |
常見模組介紹
模組分類 | 模組 |
命令和指令碼 | command模組:ans預設的模組,執行簡單命令,不支援特使符號 |
shell模組:執行命令,支援特殊符號 | |
script模組:分發指令碼命令 | |
檔案 | file模組:建立目錄、檔案、軟連線 |
copy:遠端分發檔案,修改許可權,所有者,備份 | |
服務 | system模組:服務管理(舊版本的系統使用service模組) |
軟體包 | yum源模組:yum_repository |
yum命令 | |
get_url下載軟體 | |
系統管理 | mount模組:掛載 |
cron模組:定時任務 | |
使用者管理 | group模組:管理使用者組 |
user模組:管理使用者 | |
除錯 | ping模組:檢查ansible與其他節點連通性 |
debug模組:用於檢查/顯示變數 |
命令與指令碼類模組
command模組
ans預設的模組,適用於執行簡單的命令,不支援特殊符號
# 案例:批次獲取所有主機的主機名 ansible all -m command -a 'hostname' ansible all -a 'hostname'
shell模組
執行簡單的命令,支援特殊符號
# 案例:批次刪除/tm/下面所有的內容 ansible all -m shell -a 'rm -rf /tmp/*' # 案例:批次獲取ip地址 ansible all -m shell -a "ip address show |awk -F'[ /]+' 'NR==3{print \$3}'"
script模組
# 案例:批次執行/server/scripts/create_distribute_keys.sh指令碼 ansible all -m script -a '/server/scripts/create_distribute_keys.sh'
檔案類模組
file模組
批次管理檔案、目錄、軟連線
file模組 | 模組說明 |
path | 目錄/檔案路徑(必須要寫) |
src | source,原始檔或目錄(一般建立軟連線時使用) |
state |
狀態(模式):具體的操作
|
mode | mode=777 建立並修改問價 |
onwer | onwer=root |
group | group=root |
- 案例:批次建立/yuan/yuanxiaojiang.txt
ansible all -m file -a 'path=/yuan/yuanxiaojiang.txt state=touch state=directory'
- 案例:批次建立/etc/hosts的軟連線到/opt下面
ansible all -m file -a 'src=/etc/hosts path=/opt/hosts state=link'
- 案例:批次建立/backup/host/目錄,所有者所屬組為root,許可權為700
ansible all -m file -a 'path=/backup/host/ mode=700 owner=root group=root state=directory
- 案例:批次刪除/bakcup/目錄及目錄下內容
ansible all -m file -a 'state=absent path=/backup'
copy模組
批次分發:管理節點傳送檔案或壓縮包到被管理節點
copy模組 | 模組說明 |
src | source 管理端的檔案或目錄 |
dest | destination 被管理端的檔案或目錄 |
backup | backup=yes 覆蓋前進行備份,檔案內容要求有變化或區別 |
mode | 修改許可權 |
owner | 修改為指定的所有者 |
group | 修改為指定的所屬組 |
案例:批次分發/etc/hosts檔案,檔案存在則自動備份
ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts backup=yes'