Ansible
- 一、概述
-
- 1.1 特點
- 1.2 優點
- 二、服務搭建
-
- 2.1 準備工作
- 2.2 ansible端設定
- 三、ansible 指令行子產品
-
- 3.1 command 子產品
-
- 概述
- 指令使用
- 常用參數
- 3.2 shell 子產品
-
- 概述
- 指令
- 3.3 cron 子產品
-
- 概述
- 常用參數指令
- 3.4 user 子產品
-
- 概述
- 常用參數指令
- 3.5 group 子產品
-
- 概述
- 指令
- 3.6 copy 子產品
-
- 概述
- 常用參數指令
- 3.7 file 子產品
-
- 概述
- 指令
- 3.8 hostname 子產品
-
- 概述
- 指令
- 3.9 ping 子產品
-
- 概述
- 指令
- 3.10 yum 子產品
-
- 概述
- 指令
- 3.11 service/systemd 子產品
-
- 概述
- 常用參數指令
- 3.12 script 子產品
-
- 概述
- 指令
- 3.13 setup 子產品
-
- 概述
- 指令
一、概述
1.1 特點
- Ansible 是一個基于 Python 開發的配置管理和應用部署工具,融合了衆多老牌運維工具的優點, Pubbet 和 saltstack 能實作的功能,Ansible 基本上都可以實作
- Ansible 能批量配置、部署、管理上千台主機。比如以前需要切換到每個主機上執行的一或多個操作,使用 Ansible 隻需在固定的一台 Ansible 控制節點上去完成所有主機的操作
- Ansible 是基于子產品工作的,它隻是提供了一種運作架構,它本身沒有完成任務的能力,真正執行操作的是 Ansible 的子產品
- Agentless,即無 Agent 的存在,它就像普通指令一樣, 并非C/S軟體,也隻需在某個作為控制節點的主機上安裝一次 Ansible 即可,通常它基于 ssh 連接配接來控制遠端主機,遠端主機上不需要安裝Ansible或其它額外的服務
- 使用者在使用時,在伺服器終端輸入指令或者playbooks.會通過預定好的規則将playbook拆解為play.再組織成ansible可以識别的任務,調用子產品和插件,根據主機清單通過SsH将臨時檔案發給遠端的用戶端執行并傳回結果,執行結束後自動删除
- Ansible的另一個比較鮮明的特性是它的絕大多數子產品都具備幕等性(idempotence)…所謂幂等性,指的是多次操作或多次執行對系統資源的影響是一緻的。比如執行systemctl stop xxx指令來停止服務,當發現要停止的目标服務已經處于停止狀态,它什麼也不會做,是以多次停止的結果仍然是停止,不會改變結果,它是幂等的,而systemctl restart xxx是非幂等的。
- Ansible的很多子產品在執行時都會先判斷日标節點是否要執行任務,是以,可以放心大膽地讓Ansible去執行任務,重複執行某個任務絕大多數時候不會産生任何副作用。
1.2 優點
- 輕量級,更新時,隻需要在操作機上進行一次更新即可
- 采用 SSH 協定
- 不需要去用戶端安裝 agent
- 批量任務執行可以寫成腳本,而且不用分發到遠端就可以執行
- 使用 python 編寫的,維護更簡單
- 支援 sudo 普通使用者指令
- 去中心化管理
二、服務搭建
管理者(ansible):192.168.253.11
被管理者:192.168.253.22
被管理者:192.168.253.33
2.1 準備工作
安裝ansible(管理端)
yum -y install epel-release #需要先行安裝epel源
yum -y install ansible

- tree /etc/ansible/
- ansible的目錄結構
2.2 ansible端設定
配置主機清單
- cd /etc/ansible/
- vim hosts
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
生成密鑰對
- ssh-keygen -t rsa
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
sshpass -p '123456' ssh-copy-id [email protected]
sshpass -p '123456' ssh-copy-id [email protected]
三、ansible 指令行子產品
指令格式:
ansible <組名> -m <子產品> -a <參數清單>
- ansible-doc -l
- 檢視已安裝的子產品,q退出
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
- 檢視已安裝的子產品,q退出
3.1 command 子產品
概述
在遠端主機執行指令,不支援管道、重定向等shell部分的特性
-s表示列出指定子產品的描述資訊和操作動作
ansible-doc -s command
指令使用
#all表示全部,標明全部主機執行date指令
ansible all -m command -a 'date'
#也可以選擇IP來執行
ansible 192.168.253.22 -m command -a 'date'
#組名同樣可以
ansible webservers -m command -a 'date'
#不選擇-m預設運作的就是command這個子產品
ansible all -a 'ls /'
常用參數
- chdir
- 在遠端主機上運作指令前提前進入目錄
- creates
- 在指令運作時建立一個檔案,如果檔案存在,則不會建立任務
- removes
- 在指令運作時移除一個檔案, 如果檔案不存在,則不會執行移除任務
- executeble
- 指明運作指令的shell程式
ansible all -m command -a "chdir=/opt ls ./"
檢視所有主機的opt目錄
3.2 shell 子產品
概述
在遠端主機執行指令,相當于調用遠端主機的shell程序,然後在該shell下打開一個shell運作指令(這個支援管道符合功能)
- ansible-doc -s shell
- 列出子產品的資訊和操作動作
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
指令
檢視webservers遠端主機的ip
ansible webservers -m shell -a 'ifconfig ens33 | awk "/init/{print $2}"'
3.3 cron 子產品
概述
在遠端主機定義任務計劃,有兩種狀态(state):present表示添加、absent表示移除
- ansible-doc -s cron
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
常用參數指令
- minute/hour/day/mouth/weekday
- 分/時/日/月/周
- job
- 任務計劃執行的指令
- name
- 任務計劃的名稱
#在webservers主機内設定計劃任務,時間為每分鐘,内容是輸出“haha”,任務名是test01
ansible webservers -m cron -a 'minute="*/1" job="/usr/bin/echo haha" name="test01"'
#移除這個計劃任務
ansible webservers -m cron -a 'name=test01 state=absent'
#可以遠端檢視計劃任務内已經移除
ansible webservers -a 'crontab -l'
PS:如果任務沒有取名字,删除的時候直接使用 name=None 就行
3.4 user 子產品
概述
使用者管理的子產品
- ansible-doc -s user
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
常用參數指令
參數 | 定義 |
---|---|
name | 使用者名:必選參數 |
state=present l absent | 建立賬号或者删除賬号,present 表示建立,absent 表示删除 |
system=yes I no | 是否為系統賬号 |
uid | 使用者uid |
group | 使用者基本組 |
shell | 預設使用的shell |
move_home=yse l no | 如果設定的家日錄已經存在,是否将已經存在的家目錄進行移動 |
password | 使用者的密碼,建議使用加密後的字元串 |
comment | 使用者的注釋資訊 |
remove=yes I no | 當state=absent時,是否删除使用者的家目錄 |
#在web主機建立使用者cc200
ansible webservers -m user -a 'name="cc200"'
#使用指令檢視是否建立成功
ansible webservers -m command -a 'cat /etc/passwd'
#删除該使用者
ansible webservers -m user -a 'name="cc200" state=absent'
3.5 group 子產品
概述
使用者組管理的子產品
請求的是 groupadd、groupdel、groupmod子產品
- ansible-doc -s group
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
指令
#建立mysql組
ansible webservers -m group -a 'name=mysql gid=1234 system=yes'
#檢視是否建立
ansible webservers -a 'cat /etc/group'
#建立test01使用者,添加到mysql組内
ansible webservers -m user -a 'name=test01 uid=111 system=yes group=mysql'
#檢視是否建立
ansible webservers -a 'cat /etc/passwd'
#檢視是否在組内
ansible webservers -a 'id test01'
3.6 copy 子產品
概述
用于複制指定主機内的檔案到遠端主機裡
- ansible-doc -s copy
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
常用參數指令
參數 | 定義 |
---|---|
dest | 指出複制檔案的目标及位置,使用絕對路徑,如果是源目錄,指目标也要是目錄,如果目标檔案已經存在會覆寫原有的内容 |
src | 指出源檔案的路徑。可以使用相對路徑或絕對路徑。支援直接指定目錄。如果源是日錄則日标也要是日錄 |
mode | 指出複制時,目标檔案的權限 |
owner | 指出複制時,目标檔案的屬主 |
group | 指出複制時,日标檔案的屬組 |
content | 指出複制到目标主機上的内容,不能與src一起使用 |
#複制本機檔案到遠端主機
ansible webservers -m copy -a 'src=/etc/fstab dest=/opt/123.txt owner=root mode=640'
#檢視是否成功
ansible webservers -a 'ls -l /opt'
#遠端添加檔案内容進去
ansible webservers -m copy -a 'content="webservers" dest=/opt/123.txt'
#檢視
ansible webservers -a 'cat /opt/123.txt'
3.7 file 子產品
概述
設定檔案屬性
- ansible-doc -s file
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
指令
#修改123.txt檔案的屬主屬組權限
nsible webservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/123.txt'
#建立新檔案111.txt
ansible webservers -m file -a 'path=/opt/111.txt state=touch'
#删除111.txt
ansible webservers -m file -a 'path=/opt/111.txt state=absent'
3.8 hostname 子產品
概述
用于管理遠端主機的主機名
指令
#更改webservers遠端主機的名字
ansible webservers -m hostname -a 'name=webservers'
3.9 ping 子產品
概述
檢測遠端主機是否線上
指令
#測試所有主機
ansible all -m ping
#指定測試
ansible webservers -m ping
3.10 yum 子產品
概述
在遠端主機上安裝解除安裝軟體包
- ansible-doc -s yum
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
指令
#安裝
ansible webservers -m yum -a 'name=httpd'
#解除安裝
ansible webservers -m yum -a 'name=httpd state=absent'
3.11 service/systemd 子產品
概述
用于管理遠端主機的管理服務的運作狀态
- ansible-doc -s service
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
常用參數指令
項目 | Value |
---|---|
name | 被管理的服務名稱 |
state=started I stopped I restarted | 動作包含啟動關閉或者重新開機 |
enabled=yes | no | 表示是否設定該服務開機自啟 |
runlevel | 如果設定了enabled開機自啟去,則要定義在哪些運作目标下自啟動 |
#開啟服務
ansible webservers -m service -a 'enabled=true name=httpd state=started'
#檢視服務狀态
ansible webservers -a 'systemctl status httpd'
3.12 script 子產品
概述
可以實作遠端批量運作本主機的shell腳本
- ansible-doc -s script
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
指令
本地建立腳本
- vim test.sh
#!/bin/bash
echo "haha" > /opt/cc.txt
- chmod +x test.sh
遠端使用
#在webservers主機運作
ansible webservers -m script -a 'test.sh'
#檢視
ansible webservers -a 'cat /opt/cc.txt'
3.13 setup 子產品
概述
facts 元件用來收集被管理節點資訊
setup 子產品可以擷取這些資訊
- ansible-doc -s setup
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
指令
#擷取全部的facts資訊
ansible webservers -m setup
#filter篩選需要的資訊
ansible webservers -m setup -a 'filter=*ipv4'