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 詳細信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM