Ansible入門及組件介紹


Ansible簡介

Ansible是自動化運維的工具,基於Python開發,實現了批量系統配置、批量程序部署、批量運行命令等功能。
Ansible是基於模塊工作的,ansible提供一個框架,通過模塊實現批量部署。
Ansible是一種配置管理工具
Ansible不需要安裝客戶端軟件
Ansible的功能實現基於SSH遠程連接服務

 

安裝

安裝方法有多種,可以下載源碼后編譯安裝,可以從git上獲取資源安裝,可以直接yum安裝。也可以pip安裝。

 1、使用yum安裝
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum install ansible -y
查看ansible版本
ansible --version
2、源碼安裝
源碼安裝需要python2.6以上版本,其依賴模塊paramiko、PyYAML、Jinja2、httplib2、simplejson、pycrypto模塊,以上模塊可以通過pip或easy_install 進行安裝
3、pip安裝
pip是專門用來管理Python模塊的工具,Ansible會將每次正式發布都更新到pip倉庫中。所以通過pip安裝或更新Ansible,會比較穩妥的拿到最新穩定版。

目錄說明

tree /etc/ansible/

/etc/ansible/

├── ansible.cfg  # ansible的配置文件

├── hosts          # ansible的主倉庫 用來存儲需要管理的遠程主機的相關信息

└── roles          #角色,一套文件夾,里面定義了例如變量,具體任務task。Role里面定義的內容可以實現某些特殊功能,而你在使用不通的腳本過程中可以導入Role來實現某一個功能。而不用重復寫

常用命令

幫助文檔

ansible-doc可以列出相關的幫助
ansible-doc -l 列出ansible的模塊,通常結合grep來篩選。
ansible-doc -s XXX 選項可以獲取指定模塊的使用幫助。

利用ansible遠程批量執行命令

語法:
ansible ceshi -m command -a 'uptime'
ansible 主機組 -m ansible內置功能模塊名 -a 命令

ad-hoc常用模塊

 1、copy模塊

從本地copy文件分發到目錄主機路徑
參數說明:
src= 源文件路徑
dest= 目標路徑
注意src= 路徑后面帶/ 表示帶里面的所有內容復制到目標目錄下,不帶/是目錄遞歸復制過去
content= 自行填充的文件內容
owner 屬主
group 屬組
mode權限

ansible all  -m copy -a "src=/ceshi/123.sh dest=/tmp/fstab.ansible mode=600"

2、fetch模塊

從遠程主機拉取文件到本地

fetch使用很簡單,src和dest,dest只要指定一個接收目錄,默認會在后面加上遠程主機及src的路徑

ansible all  -m fetch -a "src=/tmp/hi.txt dest=/ceshi"

3、command模塊

在遠程主機上執行命令,屬於裸執行,非鍵值對顯示;不進行shell解析;

默認模塊

ansible all -m command -a "ifconfig"

4、shell模塊

由於commnad只能執行裸命令(即系統環境中有支持的命令),至於管道之類的功能不支持,
shell模塊可以做到

ansible all -m shell -a "ifconfig|grep lo"

5、file模塊

設置文件屬性(創建文件)
常用參數:

path目標路徑
state directory為目錄,link為軟件鏈接
group 目錄屬組
owner 屬主
recurse:遞歸設置文件的屬性,只對目錄有效
其他參數通過ansible-doc -s file 獲取

ansible all -m file -a "path=/tmp/hello state=directory"   #創建文件夾
ansible all -m file -a "src=/tmp/hi.txt path=/var/tmp/hi.link state=link"  #創建軟鏈接

6、cron模塊

通過cron模塊對目標主機生成計划任務
常用參數:
除了分(minute)時(hour)日(day)月(month)周(week)外
name: 本次計划任務的名稱
state: present 生成(默認) |absent 刪除 (基於name)

ansible all -m cron -a "minute=*/1 job='/usr/sbin/update time.windows.com &>/dev/null'  name=update_time" 
#對各主機添加每隔1分鍾從time.windows.com同步時間
#此時登陸任意節點查看crontab任務
[root@localhost tmp]# crontab -l
#Ansible: update_time
*/1 * * * * /usr/sbin/update time.windows.com &>/dev/null

ansible all -m cron -a "name=update_time state=absent"   #刪除計划任務
#此時登陸查看,計划任務已經被刪除

7、yum模塊

故名思義就是yum安裝軟件包的模塊;
常用參數說明:
enablerepo,disablerepo表示啟用與禁用某repo庫
name 安裝包名
state (present' orinstalled', latest')表示安裝, (absent' or `removed') 表示刪除

ansible all -m yum -a "name=epel-release state=installed" #通過安裝epel擴展源並安裝nginx
ansible all -m yum -a "name=nginx state=installed"

8、service模塊

服務管理模塊
常用參數:
name:服務名
state:服務狀態
enabled: 是否開機啟動 true|false
runlevel: 啟動級別 (systemed方式忽略)

 ansible all -m service -a "name=nginx state=started enabled=true"

9、script模塊

把本地的腳本傳到遠端執行;前提是到遠端可以執行,不要把Linux下的腳本同步到windows下執行; 

#創建一個腳本文件
[root@localhost ceshi]# more appe.sh 
#!/bin/bash
echo "ansible script test!" > /tmp/ansible.txt
#執行
ansible all -m script -a "/ceshi/appe.sh"
#此時目標端查看根據腳本內容已經產生了相應的文件

參數配置

1、環境配置

Ansible配置以ini格式存儲配置數據,在Ansible中幾乎所有配置都可以通過Ansible的Playbook或環境變量來重新賦值。

在運行Ansible命令時,命令將會按照以下順序查找配置文件。

  • ANSIBLE_CONFIG:首先,Ansible命令會檢查環境變量,及這個環境變量指向的配置文件。
  • ./ansible.cfg:其次,將會檢查當前目錄下的ansible.cfg配置文件。
  • ~/.ansible.cfg:再次,將會檢查當前用戶home目錄下的.ansible.cfg配置文件。
  • /etc/ansible/ansible.cfg:最后,將會檢查在用軟件包管理工具安裝Ansible時自動產生的配置文件。

2、ansible.cfg配置參數

Ansible有很多配置參數,以下是幾個默認的配置參數:

inventory = /etc/ansible/hosts
library = /usr/share/my_modules/
forks = 5
sudo_user = root
remote_port = 22
host_key_checking = False
timeout = 20
log_path = /var/log/ansible.log

inventory:該參數表示inventory文件的位置,資源清單(inventory)就是Ansible需要連接管理的一些主機列表。
library:Ansible的所有操作都使用模塊來執行實現,這個library參數就是指向存放Ansible模塊的目錄。
forks:設置默認情況下Ansible最多能有多少個進程同時工作,默認5個進程並行處理。具體需要設置多少個,可以根據控制端性能和被管理節點的數量來確定。
sudo_user:設置默認執行命令的用戶,也可以在playbook中重新設置這個參數。
remote_port:指定連接被管理節點的管理端口,默認是22,除非設置了特殊的SSH端口,否則不需要修改此參數。
host_key_checking:設置是否檢查SSH主機的密鑰。可以設置為True或False。即ssh的主機再次驗證。
timeout:設置SSH連接的超時間隔,單位是秒。
log_path:Ansible默認不記錄日志,如果想把Ansible系統的輸出記錄到日志文件中,需要設置log_path。需要注意,模塊將會調用被管節點的(r)syslog來記錄,執行Ansible的用戶需要有寫入日志的權限。

3、ssh配置互信

將ansible server的ssh公鑰分發到各被管節點上。

ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''
ssh-copy-id root@10.17.12.60
ssh-copy-id cloud@10.17.12.100

 此處我測試了root用戶以及一個普通用戶

ansible組件

Inventory

默認的Ansible的Inventory是一個靜態的INI格式的文件/etc/ansible/hosts

1.1.1.1 ansible_ssh_user=root ansible_ssh_pass='123456'  #定義了一個1.1.1.1的主機,然后使用內置變量定義了SSH登陸用戶以及密碼
[docker]                 #定義一個組叫docker
1.1.1.2[1:3]             #定義docker組下面3台主機1.1.1.21-1.1.1.23
[docker:vars]            #對docker組使用inventory內置變量定義了SSH登錄密碼
ansible_ssh_pass='123456' #對docker組使用inventory內置變量定義了SSH登錄密碼
[ansible:children]        #定義了一個組叫ansible,這個組下面包含docker組
docker                    #定義了一個組叫ansible,這個組下面包含docker組

ansible支持多個inventory文件,這樣更加方便我們管理不同業務或者不同環境中的機器。

1、首先需要修改ansible.cfg中hosts文件的定義,使之不再指向某個文件夾,而是指向某個目錄

2、在inventory文件夾下新建兩個文件測試使用

3、使用list-hosts參數驗證


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM