服務(wù)器
轉(zhuǎn)自
linux輕量級自動運維工具-ansible淺析 – ~微風(fēng)~ – 51cto技術(shù)博客
http://weiweidefeng.blog.51cto.com/1957995/1895261
ansible是什么?
ansible架構(gòu)圖
ansible特性
模塊化:調(diào)用特定的模塊,完成特定的任務(wù);
基于python語言研發(fā),由paramiko, pyyaml和jinja2三個核心庫實現(xiàn);
部署簡單:agentless;
支持自定義模塊,使用任意編程語言;
強(qiáng)大的playbook機(jī)制;
冪等性;
安裝及程序環(huán)境:
程序:
ansible
ansible-playbook
ansible-doc
配置文件:
/etc/ansible/ansible.cfg
主機(jī)清單:
/etc/ansible/hosts
插件目錄:
/usr/share/ansible_plugins/
安裝ansible
安裝依賴包
ansible命令的使用:
usage: ansible <host-pattern> [options]
常用選項:
-m mod_name
-a mod_args
配置host inventory:
/etc/ansible/hosts
[group_id]
host_pattern1
host_pattern2
示例:
首先對此文件進(jìn)行備份操作,以防后面需要用到默認(rèn)配置文件
進(jìn)入到/etc/ansible/hosts文件,此處綠色光標(biāo)以下的內(nèi)容是沒有用的,都是示例,可以刪除掉,然后添加我們下面實驗操作用到的主機(jī)。
添加一組websrvs服務(wù)器,以用于下面的測試
測試主機(jī)連通性
這里報錯是因為實驗用的主機(jī)交換其他兩臺主機(jī)的公鑰/私鑰的原因?qū)е碌?br>實驗ssh免密碼登陸設(shè)置
生成私鑰和公鑰ssh-keygen -t rsa -p \\\’\\\’
復(fù)制公鑰文件問authorized_keys
把公鑰傳送到其他主機(jī)
在68的主機(jī)上面可以看見公鑰已經(jīng)傳送過來了,并且確認(rèn)文件的權(quán)限是否正確
重復(fù)以上操作把公鑰發(fā)送給69的主機(jī)
然后重新執(zhí)行ansible的ping模塊命令查看該兩臺主機(jī)的連通性
可以發(fā)現(xiàn)此時已經(jīng)成功,那么下面就開始介紹ansilbe的其他模塊
最后記得利用ansible同步一下所有主機(jī)的時間,以免某主機(jī)的時間有錯誤,后面看日志起來會造成混亂
ansible模塊:
獲取模塊列表:ansible-doc -l
獲取指定模塊的使用幫助:ansible-doc -s mod_name
常用模塊:
ping模塊:探測目標(biāo)主機(jī)是否存活;
示例:測試所有的主機(jī)的連通性
command模塊:在遠(yuǎn)程主機(jī)執(zhí)行命令;
示例1:讓所有主機(jī)同步時間
此處沒有給出指定的-m command命令,是因為ansible的模塊默認(rèn)就是command
示例2:讓每一臺主機(jī)都執(zhí)行uname -r命令
示例3:在主機(jī)上面都創(chuàng)建一個用戶
查看兩臺主機(jī)是否已經(jīng)創(chuàng)建該用戶
查看用戶信息:
幫這兩個用戶改密碼,此處需要注意的是,雖然用下面的命令看似執(zhí)行成功,但是當(dāng)我們驗證的時候,就會發(fā)現(xiàn)密碼錯誤了,這是因為ansible的command模塊并不支持管道等輸出,所以下面介紹另外一個ansible的模塊shell
shell模塊:在遠(yuǎn)程主機(jī)上調(diào)用shell解釋器運行命令,支持shell的各種功能,例如管道等
注意:command和shell模塊的核心參數(shù)直接為命令本身;而其它模塊的參數(shù)通常為“key=value”格式;
示例:批量修改其他主機(jī)的特定用戶的密碼
此時可以發(fā)現(xiàn)已經(jīng)可以登陸成功
copy模塊:復(fù)制文件到遠(yuǎn)程主機(jī)
用法:
(1) 復(fù)制文件
-a src=\\\\\\\’#\\\\\\\’
(2) 給定內(nèi)容生成文件
-a content= dest=
其它參數(shù):mode, owner, group, …
示例:復(fù)制文件到其他主機(jī)
此處創(chuàng)建一個測試文件
復(fù)制文件到其他主機(jī)
下面紅色的報錯信息是,如果要傳送文件,該主機(jī)的指定目錄需要存在,如果不存在,就是提示錯誤
創(chuàng)建對應(yīng)的目錄
重新傳送文件,已經(jīng)沒有錯誤提示,但是此處也可以看見,如果文件已經(jīng)存在,則原文件會被覆蓋掉,并且此處也沒有任何提示覆蓋文件的信息,所以操作的時候就需要注意了,以免覆蓋掉重要的文件
驗證文件
file模塊:設(shè)置文件的屬性
用法:
(1) 創(chuàng)建目錄:
-a path= state=directory
(2) 創(chuàng)建鏈接文件:
-a path= src=\\\\\\\'#\\\\\\\' /p>
(3) 刪除文件:
-a path= state=absent“
示例:修改文件的權(quán)限和屬主
驗證文件
示例:創(chuàng)建文件的軟連接
驗證文件
設(shè)置文件的狀態(tài)為absent(即刪除文件)
驗證
fetch模塊:從遠(yuǎn)程主機(jī)拿文件
示例:從10.1.156.69主機(jī)拿一個文件
當(dāng)抓去一堆文件的時候,也會創(chuàng)建對應(yīng)的ip地址的目錄,以區(qū)分文件
cron模塊:管理計劃任務(wù)條目
用法:
-a minute=hour=day=month=weekday=job=name=user=state={present|absent}
示例:創(chuàng)建一個同步時間的計劃任務(wù),每5分鐘同步一下服務(wù)器的時間
驗證任務(wù)
示例:刪除計劃任務(wù)
驗證
hostname模塊:管理主機(jī)名
用法:
name=
示例:修改主機(jī)名
yum模塊:使用yum命令完成程序包管理
用法:
-a
(1) name= state={present|latest}
(2) name= state=absent
示例:安裝指定包
此實驗,首先,確定主機(jī)的yum源是可用的,否則實驗會失敗
安裝samba包
驗證
刪除samba安裝包
已經(jīng)沒有安裝的字眼了
service模塊:服務(wù)管理
用法:
-a name=state=startedstoppedrestartedenabled=runlevel=
示例:開啟主機(jī)的httpd服務(wù)
首先我們確認(rèn)httpd服務(wù)是關(guān)閉的
開啟httpd服務(wù),并且設(shè)置為開機(jī)啟動
驗證,80端口已經(jīng)開啟
group模塊:增加或刪除組
用法:
-a name=state=system=gid=
示例:添加一個組
驗證
刪除組
驗證
user模塊:用戶管理
使用格式:
name= : 創(chuàng)建的用戶名
state= : present新增,absent刪除
force= : 刪除用戶的時候刪除家目錄
system= : 創(chuàng)建系統(tǒng)用戶
uid= : 指定uid
shell= : 指定shell
home= : 指定用戶家目錄
示例:增加一個系統(tǒng)用戶
驗證
刪除用戶
setup模塊:收集主機(jī)里面的各種信息
示例:收集所有主機(jī)的信息
yaml:一種數(shù)據(jù)序列化工具的語言格式
yaml is a data serialization format designed for human readability and interaction with scripting languages.
數(shù)據(jù)結(jié)構(gòu):
key:value
– item1
– item2
– item3
例如{name:jerry, age:21}
playbook
核心元素:
tasks:任務(wù),由模塊定義的操作的列表;
variables:變量
templates:模板,即使用了模板語法的文本文件;
handlers:由特定條件觸發(fā)的tasks;
roles:角色;
playbook的基礎(chǔ)組件:
hosts:運行指定任務(wù)的目標(biāo)主機(jī);
remote_user:在遠(yuǎn)程主機(jī)以哪個用戶身份執(zhí)行;
sudo_user:非管理員需要擁有sudo權(quán)限;
tasks:任務(wù)列表
模塊,模塊參數(shù):
格式:
(1) action: module arguments
(2) module: arguments
運行playbook,使用ansible-playbook命令
(1) 檢測語法
ansible-playbook –syntax-check /path/to/playbook.yaml
(2) 測試運行
ansible-play