一、Ansible 介紹及安裝
Ansible 是一個 IT 自動化工具。它能配置系統、部署軟體、編排更複雜的 IT 任務,如連續部署或零停機時間滾動更新。
Ansible 用 Python 編寫,盡管市面上已經有很多可供選擇的配置管了解決方案(例如 Salt、Puppet、Chef等),但它們各有優劣,而Ansible的特點在于它的簡潔。
讓 Ansible 在主流的配置管理系統中與衆不同的一點便是,它并不需要你在想要管理的每個機器上安裝自己的用戶端元件,就可以對所要管理的機器進行管理,管理伺服器和被管理機器之間使用的是 SSH 協定進行通信的。
同時提供的另一個優點,如果需要的話,你可以在不止一個地方控制你的整個基礎架構。
二、基本原理
1、在ANSIBLE 管理體系中,存在"管理節點" 和 “被管理節點” 兩種角色。
2、被管理節點通常被稱為"資産"
3、在管理節點上,Ansible将 AdHoc 或 PlayBook 轉換為Python腳本。
并通過SSH将這些Python 腳本傳遞到被管理伺服器上。
在被管理伺服器上依次執行,并實時的将結果傳回給管理節點。
三、安裝
确儲存在OpenSSH
確定Python 版本 >= 2.6
確定安裝ansible
確定Python 版本 >= 2.4 #若為2.4 版本,確定安裝了python-samplesjson 擴充
不需要安裝 ansible
使用官方 epel 源
檢視版本
四、管理節點與被管理節點建立SSH 信
任關系
管理節點(ansible)中建立密鑰對
将本地的公鑰傳輸到被管理節點
每個被管理節點都需要傳遞過程中需要被管理節點(這⾥是 172.18.0.3)的⽤戶名(這⾥是root)及密碼
三、 快速入門
在管理節點上,測試與所有被管理節點的⽹絡連通性。
注意 -i 參數後⾯接的是⼀個清單(List)。是以當為⼀個被管理節點時,我們後⾯⼀定要加⼀個英⽂逗号(,),告知是List
在管理節點上,確定⽂件 /tmp/a.conf 釋出到所有被管理節點
選項參數解釋
all 在 ansible 中, 将其叫做pattern , 即比對。我通常稱它為
資産選擇器。就是比對資産(-i 參數指定) 中的⼀部分。這⾥的
all 是比對所有指定的所有資産。将在下⾯資産部分詳細闡述。
-i 指定Ansible 的資産,也就是被管理伺服器。
-m 指定要運⾏的子產品,⽐如這⾥的 ping 子產品和 copy 子產品
-a 指定子產品的參數, 這⾥子產品 ping 沒有指定參數。 子產品 copy
指定了 src 和 dest 參數。
四、 Ansible 資産
在快速⼊⻔的場景中,我們⼀共管理了兩台伺服器。但是在實際場景中,我們要管理的伺服器往往要多得多。
難道依然要在Ansible 的 -i參數後⾯⼀個個追加IP指定嗎? 這顯然不合乎常理。是以這⼀節我們主要去介紹⼀下Ansible的資産。
Ansible 的資産分為靜态資産和動态資産,動态資産會在後⾯的⾼級部分詳細闡釋。下⾯僅介紹靜态資産
顧名思義它本身是⼀個⽂本⽂件,⼀個格式類似INI的⽂件。
預設情況下,Ansible的資産⽂件位于 /ect/ansible/hosts。
pip 安裝的可能沒有這個⽂件,建立⼀個即可
這個⽂件可以⾃定義,之後使⽤相應的參數指定。
下⾯給出⼀個⾃定義的靜态資産執行個體,然後再具體解釋其含義。
Ansible 的資産⽂件中,可以以IP位址的形式或者主機名的形式存在。
Ansible 的資産若連續,可以使⽤[stat:end] 的形式去表達。
可以将伺服器按照業務場景定義成組,⽐如dbdb_servers 和web_servers
組群組之間可以存在繼承關系,⽐如dbdb_servers 和web_servers 同時繼承 alldb_servers 組
通過 -i 參數指定⾃定義資産的位置即可(可以是全路徑,也可以是相對路徑)。
假如我們剛剛定義的資産為 inventory.ini
列舉出所有資産
列舉出標明資産
⽐如這⾥列舉出 web_servers
注意這⾥使⽤的了資産選擇器(pattern),不要慌,将會在下⾯對他進⾏詳細的闡述
有時操作者希望隻對資産中的⼀部分伺服器進⾏操作,
⽽不是資産中所有伺服器。此時可以使⽤ Ansible 的資産選擇器 PATTERN。
下⾯學習如何通過資産選擇器,更靈活的選擇想要操作的伺服器。
選擇⼀台或者⼏台伺服器
選擇⼀組伺服器
使⽤ * 比對
使⽤邏輯比對
web_servers 和 dbdb_servers 的并集
兩個組内的所有主機
web_servers 和 dbdb_servers 的交集
兩個組共有的主機
排除
在 web_servers 中,但是不在 db_servers 中
五、Ansible Ad-Hoc 指令
Ad-hoc 指令是什麼呢? 這其實是⼀個概念性的名字,是相對于寫Ansible playbook 來說的,
類似于在指令⾏敲⼊shell指令和 寫shell scripts兩者之間的關系。可以⽤于執⾏⼀些臨時指令。
如果我們敲⼊⼀些指令去⽐較快的完成⼀些事情,⽽不需要将這些執⾏的指令特别儲存下來, 這樣的指令就叫做 ad-hoc 指令。
Ansible提供兩種⽅式去完成任務,⼀是 ad-hoc 指令,⼀是寫Ansible playbook(這部分在⾼級課程中會詳細闡釋)。
前者可以解決⼀些簡單的任務, 後者解決較複雜的任務,⽐如做配置管理或部署。
在快速⼊⻔中執⾏的 Ansible 指令,類似于批量執⾏指令。
在Ansible 中統稱為Ansible Ad-Hoc。
指令文法格式如下:
pattern 資産選擇器
-i 指定資産清單⽂件的位置
-m 指定本次Ansible ad-hoc 要執⾏的子產品。可以類别成
SHELL 中的指令。
-a 子產品的參數. 可以類⽐成SHELL 中的指令參數
快速入門中的執行個體
Ansible 子產品分三種類型: 核⼼子產品(core module)、附加子產品(extra module)及⽤戶⾃定義子產品(consume module)。
核⼼子產品是由Ansible 的官⽅團隊提供的。附加子產品是由各個社群提供的。例如: OPENSTACK 社群、DOCKER 社群等等。
當核⼼子產品和附加子產品都⽆法滿⾜你的需求時,⽤戶可以⾃定義子產品。
預設情況下,在安裝Ansible 的時候, 核⼼子產品和附加子產品都已經安裝⽽⽆需⽤戶⼲預。
Ansible 的核⼼子產品和附加子產品,數量有3000+ 。這樣龐⼤的子產品數量,
對于任何⼀個接觸Ansible 的⼈都不可能将其完全記住、掌握使⽤。
是以能夠順利使⽤Ansible 的幫助⽂檔,對我們來說是很有必要的。
Ansible 的幫助⽂檔,由它本身提供的指令 ansible-doc 實作。
常⽤幫助參數
列舉出所有的核⼼子產品和附加子產品
查詢某個子產品的使⽤⽅法
查詢某個子產品的使⽤⽅法,⽐較簡潔的資訊
Example
為了便于示範和操作,現在把之前的測試主機 IP 172.18.0.3 和
172.18.0.4 儲存到 目前⽬錄下的 hosts ⽂件中。
兩個子產品都是在遠端伺服器上去執⾏指令。
但command子產品是ad-hoc的預設子產品,在執⾏ad-hoc時,若不指定子產品的名字則預設使⽤此子產品。
兩個子產品的差異
shell 子產品可以執⾏SHELL 的内置指令和 特性(⽐如管道符)
command 子產品⽆法執⾏SHELL 的内置指令和特性
将管理節點上的腳本傳遞到被管理節點(遠端伺服器)上進⾏執⾏
管理節點上的⼀個腳本
執⾏
驗證
copy 子產品的主要⽤于管理節點和被管理節點之間的⽂件拷⻉
常⽤參數:
src 指定拷⻉⽂件的源位址
dest 指定拷⻉⽂件的⽬标位址
backup 拷⻉⽂件前,若原⽬标⽂件發⽣了變化,則對⽬标⽂件進⾏備份
woner 指定新拷⻉⽂件的所有者
group 指定新拷⻉⽂件的所有組
mode 指定新拷⻉⽂件的權限
copy 管理節點上的 nginx.repo 到被管理節點上
copy 前, 在被管理節點上對原⽂件進⾏備份
copy ⽂件的同時對⽂件進⾏⽤戶及⽤戶組設定
copy ⽂件的同時對⽂件進⾏權限設定
添加 YUM 倉庫
常用參數
name 倉庫名稱,就是倉庫⽂件中第⼀⾏的中括号中名稱,必須的參數。
description 倉庫描述資訊,添加時必須的參數。
baseurl yum存儲庫 “repodata” ⽬錄所在⽬錄的URL,添加時必須的參數。它也可以是多個URL的清單。
file 倉庫⽂件儲存到被管理節點的⽂件名,不包含 .repo。預設是 name 的值。
state preset 确認添加倉庫⽂件, absent 确認删除倉庫⽂件。
gpgcheck 是否檢查 GPG yes|no, 沒有預設值,使⽤/etc/yum.conf 中的配置。
添加 epel 源
删除 epel 源
等同于 Linux 上的YUM 指令, 對遠端伺服器上RPM包進⾏管理。
常用參數:
name 要安裝的軟體包名, 多個軟體包以英⽂逗号(,) 隔開
state 對目前指定的軟體安裝、移除操作(present installed latest absent removed)
⽀持的參數:
present 确認已經安裝,但不更新
installed 确認已經安裝
latest 確定安裝,且更新為最新
absent 和 removed 确認已移除
安裝⼀個軟體包
移除⼀個軟體包
安裝⼀個軟體包組
Centos6 之前的版本使⽤ service 子產品。請使⽤ ansible-doc service 指令⾃⾏檢視幫助資訊。
管理遠端節點上的 systemd 服務,就是由 systemd 所管理的服務。
常⽤參數:
daemon_reload 重新載⼊ systemd,掃描新的或有變動的單元
enabled 是否開機⾃啟動 yes|no
name 必選項,服務名稱 ,⽐如 httpd vsftpd
state 對目前服務執⾏啟動,停⽌、重新開機、重新加載等操作
(started,stopped,restarted,reloaded)
重新加載 systemd
啟動 Nginx 服務
關閉 Nginx 服務
重新開機 Nginx 服務
重新加載 Nginx 服務
将 Nginx 服務設定開機⾃啟動
在被管理節點上,對組進⾏管理。
name 組名稱, 必須的
system 是否為系統組, yes/no , 預設是 no
state 删除或這建立,present/absent ,預設是present
建立普通組 db_admin
⽤于在被管理節點上對⽤戶進⾏管理。
name 必須的參數, 指定⽤戶名
password 設定⽤戶的密碼,這⾥接受的是⼀個加密的值,因為會直接存到 shadow, 預設不設定密碼
update_password 假如設定的密碼不同于原密碼,則會更新密碼. 在 1.3 中被加⼊
home 指定⽤戶的家⽬錄
shell 設定⽤戶的 shell
comment ⽤戶的描述資訊
create_home 在建立⽤戶時,是否建立其家⽬錄。預設建立,假如不建立,設定為 no。2.5版本之前使⽤ createhome
group 設定⽤戶的主組
groups 将⽤戶加⼊到多個其他組中,多個⽤逗号隔開。預設會把⽤戶從其他已經加⼊的組中删除。
append yes|no 和 groups 配合使⽤,yes 時,不會把⽤戶從其他已經加⼊的組中删除
system 設定為 yes 時,将會建立⼀個系統賬号
expires 設定⽤戶的過期時間,值為時間戳,會轉為為天數後,放在 shadow 的第 8 個字段⾥
generate_ssh_key 設定為 yes 将會為⽤戶⽣成密鑰,這不會覆寫原來的密鑰
ssh_key_type 指定⽤戶的密鑰類型, 預設 rsa, 具體的類型取決于被管理節點
state 删除或添加⽤戶, present 為添加,absent 為删除;預設值 present
remove 當與 state=absent ⼀起使⽤,删除⼀個⽤戶及關聯的⽬錄,⽐如家⽬錄,郵箱⽬錄。可選的值為: yes/no
1