1. 程式人生 > >ansible之基本原理及命令

ansible之基本原理及命令

什麼是ansible

ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(\(puppet、chef、func、fabric\))的優點,實現了批量系統配置、批量程式部署、批量執行命令等功能。

ansible是基於 paramiko 開發的,並且基於模組化工作,本身沒有批量部署的能力。真正具有批量部署的是ansible所執行的模組,ansible只是提供一種框架。ansible不需要在遠端主機上安client/agents,因為它們是基於ssh來和遠端主機通訊的。ansible目前已經已經被紅帽官方收購,是自動化運維工具中大家認可度最高的,並且上手容易,學習簡單。是每位運維工程師必須掌握的技能之一。

特點

  • 1、部署簡單,只需在主控端部署Ansible環境,被控端無需做任何操作;
  • 2、預設使用SSH協議對裝置進行管理;
  • 3、有大量常規運維操作模組,可實現日常絕大部分操作。
  • 4、配置簡單、功能強大、擴充套件性強;
  • 5、支援API及自定義模組,可通過Python輕鬆擴充套件;
  • 6、通過Playbooks來定製強大的配置、狀態管理;
  • 7、輕量級,無需在客戶端安裝agent,更新時,只需在操作機上進行一次更新即可;
  • 8、提供一個功能強大、操作性強的Web管理介面和REST API介面——AWX平臺。

ansible安裝方式

ansible安裝常用兩種方式,yum安裝

pip程式安裝

這裡提供二種安裝方式,任選一種即可
1> 使用yum安裝

yum install epel-release -y
yum install ansible –y

2 >使用pip(python的包管理模組) 安裝

pip install ansible

如果沒pip,需先安裝pip.yum可直接安裝:

yum install python-pip
pip install ansible

我採用的是yum方式安裝

ansible架構

Ansible:Ansible核心程式。
HostInventory:記錄由Ansible管理的主機資訊,包括埠、密碼、ip等。
Playbooks

:“劇本”YAML格式檔案,多個任務定義在一個檔案中,定義主機需要呼叫哪些模組來完成的功能。
CoreModules:核心模組,主要操作是通過呼叫核心模組來完成管理任務。
CustomModules:自定義模組,完成核心模組無法完成的功能,支援多種語言。
ConnectionPlugins:連線外掛,Ansible和Host通訊使用


ansible任務執行模式

Ansible系統由控制主機對被管節點的操作方式可分為兩類, 即adhocplaybook

ad-hoc模式使用單個模組, 支援批量執行單條命令。 ad-hoc 命令是一種可以快速輸入的命令, 而且不需要儲存起來的命令。 就相當於bash中的一句話shell。

playbook模式是Ansible主要管理方式, 也是Ansible功能強大的關鍵所在。 playbook通過多個task集合完成一類功能, 如Web服務的安裝部署、 資料庫伺服器的批量備份等。 可以簡單地把playbook理解為通過組合多條ad-hoc操作作的配置檔案。


ansible執行流程

簡單理解就是Ansible在執行時, 首先讀取ansible.cfg中的配置, 根據規則獲取Inventory中的管理主機列表, 並行的在這些主機中執行配置的任務, 最後等待執行返回的結果。

Ansiblie命令執行過程

  • 1、 載入自己的配置檔案 預設/etc/ansible/ansible.cfg
  • 2、 查詢對應的主機配置檔案, 找到要執行的主機或者組
  • 3、 載入自己對應的模組檔案, 如command
  • 4、 通過ansible將模組或命令生成對應的臨時py檔案, 並將該檔案傳輸至遠端伺服器的
  • 5、 對應執行使用者的家目錄的.ansible/tmp/XXX/XXX.PY檔案
  • 6、 給檔案+x執行
  • 7、 執行並返回結果
  • 8、 刪除臨時py檔案, sleep 0退出

ansible程式結構

安裝目錄
配置檔案目錄:/etc/ansible/
執行檔案目錄:/usr/bin/
Lib庫依賴目錄:/usr/lib/pythonX.X/site-packages/ansible/
Help文件目錄:/usr/share/doc/ansible-X.X.X/
Man文件目錄:/usr/share/man/man1/


Ansible配置檔案

ansible.cfg的配置

設定ansible.cfg配置引數,ansible有許多引數,下面列出常用的引數

inventory
這個引數表示資源清單inventory檔案的位置,資源清單就是一些Ansible需要連線管理的主 機列表。這個引數的配置例項如下:inventory = /etc/ansible/hosts

library
Ansible的操作動作,無論是本地或遠端,都使用一小段程式碼來執行,這小段程式碼稱為模組,這個library引數就是指向存放Ansible模組的目錄。配置例項如下:library = /usr/share/ansible
Ansible支援多個目錄方式,只要用冒號(:)隔開就可以,同時也會檢查當前執行playbook位
置下的./library目錄。

forks
設定預設情況下Ansible最多能有多少個程序同時工作, 從Ansible 1.3開始,fork數量預設自動設定為主機數量或者潛在的主機數量,預設設定最多5個程序並行處理。具體需要設定多少個,可以根據控制主機的效能和被管節點的數量來確定,可能是 50或100。預設值5是非常保守的值,配置例項如下:forks = 5

sudo_user
這是設定預設執行命令的使用者,也可以在playbook中重新設定這個引數。配置例項如下:sudo_user = root

remote_port
這是指定連線被管節點的管理埠,預設是22。除非設定了特殊的SSH埠,不然這個引數一般是 不需要修改的。配置例項如下:remote_port = 22

host_key_checking
這是設定是否檢查SSH主機的金鑰。可以設定為True或False,關閉後第一次連線沒有提示配置例項
host_key_checking = False

timeout
這是設定SSH連線的超時間隔,單位是秒。配置例項如下:timeout = 60

log_path
Ansible系統預設是不記錄日誌的,如果想把Ansible系統的輸出記錄到日誌檔案中,需要設定log_path來指定一個儲存Ansible日誌的檔案。配置例項如下:log_path = /var/log/ansible.log

另外需要注意,執行Ansible的使用者需要有寫入日誌的許可權,模組將會呼叫被管節點的syslog來記錄

hosts的配置

1、 直接指明主機地址或主機名:

green.example.com
blue.example.com
192.168.100.1
192.168.100.10

2、 定義一個主機組[組名]把地址或主機名加進去

[mysql_test]
192.168.253.159
192.168.253.160
192.168.253.153

組成員可以使用萬用字元來匹配, 如下 192.168.2.[1:6]:表示匹配從192.168.2.1——192.168.2.6的主機

Ansible的命令

/usr/bin/ansible # Ansibe AD-Hoc 臨時命令執行工具,常用於臨時命令的執行

/usr/bin/ansible-doc # Ansible 模組功能檢視工具

/usr/bin/ansible-galaxy # 下載/上傳優秀程式碼或Roles模組 的官網平臺,基於網路的

/usr/bin/ansible-playbook # Ansible 定製自動化的任務集編排工具

/usr/bin/ansible-pull # Ansible遠端執行命令的工具,拉取配置而非推送配置(使用較少,海量機器時使用,對運維的架構能力要求較高)

/usr/bin/ansible-vault # Ansible 檔案加密工具

/usr/bin/ansible-console # Ansible基於Linux Consoble介面可與使用者互動的命令執行工具

Ansible-doc命令

命令:ansible-doc
引數:

  • -h, --help show this help message and exit # 顯示命令引數API文件
  • -l, --list List available modules #列出可用的模組
  • -M MODULE_PATH, --module-path=MODULE_PATH #指定模組的路徑specify path(s) to module library (default=None)
  • -s, --snippet Show playbook snippet for specified module(s) #顯示playbook制定模組的用法
  • --version show program's version number and exit # 顯示ansible-doc的版本號檢視模組列表:

一般用法:
ansible-doc -l獲取模組資訊
ansible-doc -s MOD_NAME 獲取指定模組的使用幫助


Ansible命令詳解

命令格式:

ansible <host-pattern> [-f forks] [-m module_name] [-a args]

我們可以通過 ansible -h檢視幫助

-a MODULE_ARGS, --args=MODULE_ARGS 模組的引數,如果執行預設COMMAND的模組, 即是命令引數,如: “date”,“pwd”等等 module arguments 模組引數

-k, --ask-pass ask for SSH password 登入密碼, 提示輸入SSH密碼而不是假設基於金鑰的驗證

--ask-su-pass ask for su password su切換密碼

-K, --ask-sudo-pass ask for sudo password 提示密碼使用sudo,sudo表示提權操作

--ask-vault-pass ask for vault password

-B SECONDS, --background=SECONDS 後臺執行超時時間
run asynchronously, failing after X seconds (default=N/A)

-C, --check don‘t make any changes; instead, try to predict some of the changes that may occur
只是測試一下會改變什麼內容, 不會真正去執行;相反,試圖預測一些可能發生的變化

-c CONNECTION, --connection=CONNECTION 連線型別使用 connection type to use (default=smart)

-f FORKS, --forks=FORKS並行任務數。NUM被指定為一個整數,預設是5

-i INVENTORY, --inventory-file=INVENTORY指定庫存主機檔案的路徑,預設為/etc/ansible/hosts

--list-hosts outputs a list of matching hosts; does not execute anything else

-m MODULE_NAME, --module-name=MODULE_NAME 執行模組的名字,預設使用 command 模組,所以如果是隻執行單一命令可以不用 -m引數module name to execute (default=command)

-M MODULE_PATH, --module-path=MODULE_PATH要執行的模組的路徑,預設為/usr/share/ansible/

-o, --one-line condense output 壓縮輸出,摘要輸出.嘗試一切都在一行上輸出。

-P POLL_INTERVAL, --poll=POLL_INTERVAL調查背景工作每隔數秒。需要- b

--private-key=PRIVATE_KEY_FILE私鑰路徑,使用這個檔案來驗證連線

-S, --su run operations with su 用 su 命令

-R SU_USER, --su-user=SU_USER指定SU的使用者,預設是root使用者

-s, --sudo run operations with sudo (nopasswd)

-U SUDO_USER, --sudo-user=SUDO_USER sudo到哪個使用者,預設為 root

-T TIMEOUT, --timeout=TIMEOUT指定SSH預設超時時間, 預設是10S

-t TREE, --tree=TREE log output to this directory 將日誌內容儲存在該輸出目錄,結果儲存在一個檔案中在每臺主機上。
-u REMOTE_USER, --user=REMOTE_USER遠端使用者, 預設是root使用者

--vault-password-file=VAULT_PASSWORD_FILE vault password file

-v, --verbose verbose mode (-vvv for more, -vvvv to enable 詳細資訊