叢集自動化工具--Ansible

猿小姜發表於2024-12-08

使用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

狀態(模式):具體的操作

  • state=directory 建立目錄
  • state=link 闖將軟連線
  • state=touch 建立檔案
  • state=abent 刪除(如果是目錄則遞迴刪除目錄)
  • state=file(預設)更新檔案,檔案不存在不會自動建立
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'

相關文章