天天看點

01-基礎

一、Ansible 介紹及安裝

Ansible 是一個 IT 自動化工具。它能配置系統、部署軟體、編排更複雜的 IT 任務,如連續部署或零停機時間滾動更新。

Ansible 用 Python 編寫,盡管市面上已經有很多可供選擇的配置管了解決方案(例如 Salt、Puppet、Chef等),但它們各有優劣,而Ansible的特點在于它的簡潔。

讓 Ansible 在主流的配置管理系統中與衆不同的一點便是,它并不需要你在想要管理的每個機器上安裝自己的用戶端元件,就可以對所要管理的機器進行管理,管理伺服器和被管理機器之間使用的是 SSH 協定進行通信的。

同時提供的另一個優點,如果需要的話,你可以在不止一個地方控制你的整個基礎架構。

二、基本原理

01-基礎

1、在ANSIBLE 管理體系中,存在"管理節點" 和 “被管理節點” 兩種角色。

2、被管理節點通常被稱為"資産"

3、在管理節點上,Ansible将 AdHoc 或 PlayBook 轉換為Python腳本。

​ 并通過SSH将這些Python 腳本傳遞到被管理伺服器上。

​ 在被管理伺服器上依次執行,并實時的将結果傳回給管理節點。

三、安裝

01-基礎

确儲存在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