Ansible
- 一.Ansible概述
- 二.ansible部署
- 三.相關模塊操作
- 四.inventory 主機清單
一.Ansible概述
? Ansible是一個基于Python開發的配置管理和應用部署工具,現在也在自動化管理領域大放異彩,它融合了眾多老牌運維工具的優點,Pubbet和Saltstack能實作的功能,Ansible基本上都可以實作
? Ansible能批量配置、部署、管理上千臺主機,比如以前需要切換到每個主機上執行的一或多個操作,使用Ansible只需在固定的一臺Ansible控制節點上去完成所有主機的操作
? Ansible是基于模塊作業的,它只是提供了一種運行框架,它本身沒有完成任務的能力,真正執行操作的是Ansible的模塊,
比如copy模塊用于拷貝檔案到遠程主機上,service模塊用 于管理服務的啟動、停止、重啟等
? Ansible其中一個比較鮮明的特性是Agentless,即無Agent的存在,它就像普通命令一樣, 并非c/s軟體,也只需在某個作為控制節點的主機上安裝一次Ansible即可, 通常它基于ssh連接來控制遠程主機,遠程主機上不需要安裝Ansible或其它額外的服務,
使用者在使用時,在服務器終端輸入命令或者playbooks,會通過預定好的規則將playbook拆解為play,再組織成ansible可以識別的任務,呼叫模塊和插件,根據主機清單通過SSH將臨時檔案發給遠程的客戶端執行并回傳結果,執行結束后自動洗掉
? Ansible的另一個比較鮮明的特性是它的絕大多數模塊都具備冪等性(idempotence),所謂冪等性,指的是多次操作或多次執行對系統資源的影響是一致的,比如執行systemctl stop xxx命令來停止服務,當發現要停止的目標服務已經處于停止狀態,它什么也不會做,所以多次停止的結果仍然是停止,不會改變結果,它是冪等的,而systemctl restart xxx是非冪等的
? Ansible的很多模塊在執行時都會先判斷目標節點是否要執行任務,所以,可以放心大膽地讓Ansible去執行任務,重復執行某個任務絕大多數時候不會產生任何副作用
二.ansible部署
環境準備
管理端:192.168.116.60 ansible
被管理端:192.168.116.80 192.168.116.90
#管理端安裝epel擴展源
yum -y install epel-release
yum -y install ansible
#樹型查詢工具
yum -y install tree
tree /etc/ansible
//ansible 目錄結構
/etc/ansible/
ansible.cfg
#ansible的組態檔,一般無需修改
hosts
#ansible的主機清單,用于存盤需要管理的遠程主機的相關資訊
roles/
#公共角色目錄
//配置主機清單
cd /etc/ansible
vim hosts
[webservers]
#配置組名
192.168.116.80
#組里包含的被管理的主機IP地址或主機名(主機名需要先修改/etc/hosts檔案)
[dbservers]
192.168.116.90
//配置密鑰對驗證
ssh-keygen -t rsa
#一路回車,使用免密登錄
sshpass -p ' abc1234' ssh-copy-id root@192.168.116.80
sshpass -P ' abc1234' ssh-copy-id root@192.168.116.90




三.相關模塊操作
ansible命令列模塊
命令格式: ansible <組名> -m <模塊> -a <引數串列>
ansible-doc -1
#列出所有已安裝的模塊,按q退出
1. command 模塊
//在遠程主機執行命令,不支持管道,重定向等she11的特性,
ansible-doc -s command
#-s列出指定模塊的描述資訊和操作動作
ansible 192.168.116.80 -m command -a 'date'
#指定ip執行date
ansible webservers - m command -a 'date'
#指定組執行date
ansible dbservers -m command -a' date'
ansible all -m command -a 'date'
#all代表所有hosts 主機
ansible all -a 'ls /'
#如省略-m模塊,則默認運行command 模塊
//常用的引數:
chdir:在遠程主機.上運行命令前提前進入目錄
creates:判斷一個檔案,如果檔案存在,則不會創建任務
removes:判斷一個檔案,如果檔案不存在,則不會執行移除任務
executeble:指明運行命令的shell程式
ansible all -m command -a "chdir=/home ls ./"
2. shell模塊
//在遠程主機執行命令,相當于呼叫遠程主機的shell行程,然后在該shell下打開一個子shell運行命令(支持管道符號等功能)
ansible-doc -S shell
ansible lz -a 'useradd lisi'
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin lisi'
3. cron模塊
//在遠程主機定義任務計劃,其中有兩種狀態(state) : present表示添加(可以省略),absent表示移除,
ansible-doc -s cron
#按q退出
//常用的引數:
minute/hour/day/minute/weekday:分/時/日/月/周
job:任務計劃要執行的命令
name:任務計劃的名稱
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'
ansible webservers -a 'crontab -l'
ansible webservers -m cron -a 'name="test crontab" state=absent'
#移除計劃任務,假如該計劃任務沒有取名字,name=None即可
4. user模塊
//用戶管理的模塊
angible-doc -S user
//常用的引數:
name:用戶名,必選引數
state=present|absent: 創建賬號或者洗掉賬號,present表示創建,absent表示洗掉
system=yes|no:是否為系統賬號
uid: 用戶uid
group:用戶基本組
shell:默認使用的shell
move_home=yse|no: 如果設定的家目錄已經存在,是否將已經存在的家目錄進行移動
password:用戶的密碼,建議使用加密后的字串
comment:用戶的注釋資訊
remove=yes|no:當state=absent時, 是否洗掉用戶的家目錄
ansible dbservers -m user -a 'name="test01"'
#創建用戶test01
ansible dbservers -m command -a 'tail /etc/passwd'
ansible dbservers -m user -a 'name="test01" state=absent'
#洗掉用戶test01
5. group 模塊
//用戶組管理的模塊
ansible-doc -s group
ansible dbservers -m group -a 'name=mysql gid=306 system=yes'
#創建mysq1組
ansible dbservers -a 'tail /etc/group'
ansible dbservers -m user -a 'name=test01 uid=306 system=yes group=mysql' #將 test01用戶添加到mysql組中
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -a 'id test01'
6. copy 模塊
//用于復制指定主機檔案到遠程主機的
ansible-doc -s copy
ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back'
ansible mysql -a 'ls /opt'
ansible mysql -a 'cat /opt/fstab.back'
ansible mysql -m copy -a 'content="hello lic" dest=/opt/test.txt'
ansible mysql -a 'cat /opt/test.txt'
7. file 模塊
//設定檔案屬性
ansible-doc -s file
ansible dbservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/fstab.bak'
#修改檔案的屬主屬組權限等
ansible dbservers -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'
#設定/opt/fstab.link為/opt/fstab.bak的鏈接檔案
ansible dbservers -m file -a "path=/opt/abc.txt state=touch"
#創建一個檔案
ansible dbservers -m file -a "path=/opt/abc.txt state=absent"
#洗掉一個檔案
8. hostname 模塊
//用于管理遠程主機上的主機名
ansible dbservers -m hostname -a "name=mysq101"
9. ping模塊
//檢測遠程主機的連通性
ansible all -m ping
10. yum 模塊
//在遠程主機上安裝與卸載軟體包
ansible-doc -s yum
11. service/systemd 模塊
//用于管理遠程主機上的管理服務的運行狀態
ansible-doc -s service
//常用的引數:
name:被管理的服務名稱
state=started|stopped|restarted:動作包含啟動關倍訓者重啟
enabled=yes|no:表示是否設定該服務開機自啟
runlevel:如果設定了enabled開機自啟去,則要定義在哪些運行目標下自啟動
ansible webservers -a 'systemctl status httpd'
#查看web服務器httpd運行狀態
ansible webservers -m service -a 'enabled=true name=httpd state=started'
#啟動httpd服務
12. script模塊
//實作遠程批量運行本地的shell 腳本
ansible-doc -s script
vim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt
chmod +x test.sh
ansible webservers -m script -a 'test.sh'
ansible webservers -a 'cat /opt/script.txt'
13. setup模塊
//facts組件是用來收集被管理節點資訊的,使用setup模塊可以獲取這些資訊
ansible-doc -s setup
ansible webservers -m setup
#獲取mysql組主機的facts資訊
ansible dbservers -m setup -a 'filter=*ipv4'
#使用filter可以篩選指定的facts資訊
command 模塊

shell模塊

cron模塊

user模塊

group 模塊

copy 模塊


file 模塊



hostname 模塊

ping模塊

script模塊


四.inventory 主機清單
// Inventory支持對主機進行分組,每個組內可以定義多個主機,每個主機都可以定義在任何一一個或多個主機組內,
//如果是名稱類似的主機,可以使用串列的方式標識各個主機,
vim /etc/ansible/hosts
[lz]
192.168.80.11:2222
#冒號后定義遠程連接埠,默認是ssh的22埠
192.168.80.1[2:5]
[zs]
db-[a:f].example.org
#支持匹配a~f
//inventory中的變數
Inventory變數名 含義
ansible host ansible連接節點時的IP地址
ansible_port 連接對方的埠號,ssh連 接時默認為22
ansible_user 連接對方主機時使用的主機名,不指定時,將使用執行ansible或ansible- playbook命令的用戶
ansible_password 連接時的用戶的ssh密碼,僅在未使用密鑰對驗證的情況下有效
ansible_ssh_private_key_file 指定密鑰認證ssh連接時的私鑰檔案
ansible_ssh_common_args 提供給ssh、sftp、 scp命令的額外引數
ansible_become 允許進行權限提升
ansible_become_method 指定提升權限的方式,例如可使用sudo/ su/runas等方式
ansible_become_user 提升為哪個用戶的權限,默認提升為root
ansible_become_password 提升為指定用戶權限時的密碼
(1)主機變數
[webservers]
192.168.80.11 ansible_port=22 ansible_user=root ansible_password=abc1234
(2)組變數
[webservers:vars]
#表示為webservers 組內所有主機定義變數
ansible_user=root
ansible_password=abc1234
[all:vars]
#表示為所有組內的所有主機定義變數
ansible_port=22
(3)組嵌套
[nginx]
192.168.80.20
192.168.80.21
192.168.80.22
[apache ]
192.168.80.3[0:3]
[webservers:children]
#表示為webservers 主機組中包含了nginx 組合apache組內的所有主機
nginx
apache
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292459.html
標籤:其他
