適用版本:■UOS服務器操作系統d版
適用架構:■ARM64、AMD64、MIPS64
網絡:連接互聯網情況下進行
本次測試環境如下:
測試環境
註:請根據實際情況操作該文方法進行配置。
功能描述
ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。Ansible架構相對比較簡單,僅需通過SSH連接客戶機執行任務即可
安裝與配置
壹、安裝ansible工具
1、直接 命令安裝
apt install ansible -y
命令安裝
2、驗證安裝結果
通過ansible --version驗證安裝結果
驗證安裝結果
如果命令可以正常執行,則表示ansible安裝成功
3、配置ssh免密登錄
在ansible-server(以下簡稱server)上配置對ansible-client(以下簡稱client)的免密登錄,本次實現為實現批量操作,在server中也配置針對自己主機的免密登錄。
生成密鑰 ssh-keygen
生成密鑰
拷貝密鑰至client
ssh-copy-id root@192.168.247.154
拷貝密鑰至client
拷貝密鑰至server主機
ssh-copy-id root@192.168.247.131
貝密鑰至server主機
二、Ansible使用
1、主機清單配置
Ansible 管理主機信息的配置文件,相當於系統 Hosts 文件的功能,默認存放在 /etc/ansible/hosts。在 hosts 文件中,通過分組來組織設備。實驗配置如下:
2、ansible命令
Ansible 的維護命令大多數是以 ansible 開頭,在終端輸入 ansible 後連續按兩次Tab鍵,會補全所有跟 ansible 相關的命令。
(1)ansible命令說明:
ansible 是生產環境中使用非常頻繁的命令之壹,主要用於臨時性的維護,如查看web服務器組磁盤使用情況、復制壹個文件到其他機器等。類似這些沒有規律的、臨時需要做的任務,我們成為非固化需求,臨時壹次性操作,語法如下:
ansible [options]
-v(—verbose):輸出詳細的執行過程信息,可以得到執行過程所有信息;
-i PATH(—inventory=PATH):指定inventory信息,默認為/etc/ansible/hosts;
-f NUM(—forks=NUM):並發線程數,默認為5個線程;
—private-key=PRIVATE_KEY_FILE:指定密鑰文件;
-m NAME,—module-name=NAME:指定執行使用的模塊;
-M DIRECTORY(—module-path=DIRECTORY) :指定模塊存放路徑,默認為/usr/share/ansible;
-a ARGUMENTS(—args=ARGUMENTS):指定模塊參數;
-u USERNAME(—user=USERNAME):指定遠程主機以USERNAME運行命令;
-l subset(—limit=SUBSET):限制運行主機;
①檢查所有主機是否存活,執行命令如下:
ansible all -m ping
②列出web組主機列表,執行命令如下:
③批量顯示web組中的磁盤使用空間,執行命令如下:
ansible web -m command -a "df -hT"
(2)ansible-doc
ansible-doc用來查詢ansible模塊文檔的說明,類似於man命令,針對每個模塊都有詳細的用法說明及應用案例介紹,語法如下:
ansible-doc ping
(3)ansible-playbook
Ansible-playbook是日常應用中使用頻率最高的命令,類似於Linux中的sh或source命令,用來執行系列任務。其工作機制:通過讀取預先編寫好的playbook文件實現集中處理任務。ansible-playbook命令後跟yml格式的playbook文件,playbook文件存放了要執行的任務代碼,命令使用方式如下:
Ansible-playbook playbook.yml
3、ansible模塊
(1)command模塊
command模塊在遠程主機執行命令,不支持管道、重定向等shell的特性。常用的參數如下:
chdir:在遠程主機上運行命令前要提前進入的目錄;
creates:在命令運行時創建壹個文件,如果文件已存在,則不會執行創建任務;
removes:在命令運行時移除壹個文件,如果文件不存在,則不會執行移除任務;
executeable:指明運行命令的shell程序;
示範:
ansible all -m command -a "ls -lst /data"
(2)shell模塊
shell模塊在遠程主機執行命令,相當於調用遠程主機的Shell進程,然後在該Shell下打開壹個子Shell運行命令。和command模塊的區別是它支持Shell特性:如管道、重定向等。
示範:
ansible all -m shell -a "ping www.baidu.com -c 2 "
ansible all -m shell -a “echo hello world >/data/1.txt”
(3)copy模塊
copy模塊用於復制指定主機文件到遠程主機的指定位置。常見的參數如下:
dest:指出復制文件的目標目錄位置,使用絕對路徑。如果源是目錄,則目標也要是目錄,如果目標文件已存在,會覆蓋原有內容;
src:指出源文件的路徑,可以使用相對路徑和絕對路徑,支持直接指定目錄。如果源是目錄,則目標也要是目錄;
mode:指出復制時,目標文件的權限,可選;
owner:指出復制時,目標文件的屬主,可選;
group:指出復制時目標文件的屬組,可選;
content:指出復制到目標主機上的內容,不能和src壹起使用,相當於復制content指明的數據到目標文件中;
示範:
ansible web -m copy -a "src=/etc/hosts dest=/data/server.hosts mode=777 "
說明:將本機的/etc/hosts文件復制到web分組的控制端,並修改權限為777
(4)apt模塊
apt模塊基於apt機制,對遠程主機管理程序包。常用的參數如下:
name:程序包名稱,可以帶上版本號。若不指明版本,則默認為最新版本;
state=present|atest|absent:指明對程序包執行的操作:present表明安裝程序包,latest表示安裝最新版本的程序包,absent表示卸載程序包;
disablerepo:在用apt安裝時,臨時禁用某個倉庫的ID;
enablerepo:在用apt安裝時,臨時啟用某個倉庫的ID;
conf_file:apt運行時的配置文件,而不是使用默認的配置文件;
disable_gpg_check=yes|no:是否啟用完整性校驗功能;
示範:
ansible all -m apt -a "name=apache2"
ansible web -m shell -a "systemctl status apache2"
(5)service模塊
service模塊為用來管理遠程主機上的服務的模塊。常見的參數如下:
name:被管理的服務名稱;
state=started|stopped|restarted:動作包含啟動,關閉或重啟;
enable=yes|no:表示是否設置該服務開機自啟動;
runlevel:如果設定了enabled開機自啟動,則要定義在哪些運行目標下自動啟動;
示範:
ansible web -m service -a "name=apache2 enabled=yes state=restarted"
(6)user模塊
user模塊主要用於管理遠程主機上的用戶賬號。常見的參數如下:
name:必選參數,賬號名稱;
state=present|absent:創建賬號或者刪除賬號,present表示創建,absent表示刪除;
system=yes|no:是否為系統賬戶;
uid:用戶UID;
group:用戶的基本組
groups:用戶的附加組;
shell:默認使用的shell;
home:用戶的家目錄;
mve_home=yes|no:
如果設置的家目錄已經存在,是否將已存在的家目錄進行移動;
pssword:用戶的密碼,建議使用加密後的字符串;
comment:用戶的註釋信息;
remore=yes|no:當state=absent時,是否要刪除用戶的家目錄;
示範:
ansible web -m user -a "name=test002 system=yes shell=/bin/bash home=/home/test002 password=123@123"
不建議用,個人嘗試密碼登錄失敗
三、playbook配置文件
1、執行配置文件
playbook配置文件使用YAML語法,具有簡潔明了、結構清晰等特點。playbook配置文件類似於shell腳本,是壹個YAML格式的文件,用於保存針對特定需求的任務列表。上面介紹的ansible命令雖然可以完成各種任務,但是當配置壹些復雜任務時,逐條輸入就顯得效率非常低下。更有效的方案是在playbook配置文件中放置所有的任務代碼,利用ansible-playbook命令執行該文件,可以實現自動化運維。YAML文件的擴展名通常為.yaml或.yml。YAML語法與其他高級語言類似,其結構通過縮進來展示,通過“-”來代表項;“:”用來分隔鍵和值;整個文件以“---”開頭並以“…”結尾。
語法如下:
ansible-playbook [option] /PATH/TO/PLAYBOOK.yaml
--syntax-check:檢測yaml文件的語法;
-C(—check):預測試,不會改變目標主機的任何設置;
--list-hosts:列出yaml文件影響的主機列表;
--list-tasks:列出yaml文件的任務列表;
--list-tags:列出yaml文件中的標簽;
-t TAGS(—tags=TAGS):表示只執行指定標簽的任務;
--skip-tags=SKIP_TAGS:表示除了指定標簽的任務,執行其他任務;
--start-at-task=START_AT:從指定的任務開始往下運行;
示範: