Ansible入門筆記(1)之工做架構和使用原理

Ansible入門筆記(1)

一、Ansible特性

模塊化:python

  • 調用特定的模塊,完成特定的任務
  • 有paramiko、PyYAML、jinja2三個關鍵模塊
  • 支持自定義模塊
  • 基於python語言開發
  • 部署簡單就要python和ssh,agentless
  • 安全,基於Openssh
  • 支持playbook編排任務
  • 冪等性:一個任務執行一遍和執行n遍效果同樣,不會由於重複執行帶來意外狀況
  • 無序代理不依賴PKI(無需ssl)
  • 可以使用承認編程語言編寫模塊
  • YAML格式編排任務,支持豐富的數據結構
  • 叫強大的多層解決方案

二、ansible架構解析

用戶經過ansible去管理各個主機,那麼ansible就是咱們所說的主控端,後面的Host爲被控端。linux

在控制主機時,ansible是如何知道哪些主機是被本身控制的呢?web

這就須要一個Host Inventory(主機清單),用於記錄ansible能夠控制網絡中的哪些主機。另外,要配置和管理這些主機,能夠採用兩種方式,一種是單一的命令實現,另一種也可使用palybook實現。單一的命令模式是採用不一樣的模塊進行管理,一個模塊相似於一些管理的命令,如top,ls,ping等等,適用於臨時性的操做任務。若是須要執行一些例行性或常常性的操做,則須要採用playbook的方式,playbook相似於一個腳本,將多個模塊按必定的邏輯關係進行組合,而後執行。ansible還支持一些插件,如郵件、日誌等,在和遠程主機通訊時,也會採用相似的鏈接插件,這裏使用則是SSH協議的插件進行通訊。編程

三、ansible主要組成部分

1)命令執行來源:

  • ANSIBLE PLAYBOOKS :任務劇本,編排定義ansible任務急的配置文件,有Ansible順序執行,一般爲json格式的YAML文件
  • INBENTORY:Ansible管理主機的清單/etc/anaible/hosts
  • MODULES:Ansible的執行命令的功能模塊,多數爲內置核心模塊,也能夠自定義
  • PLUGINS:模塊功能補充,好比連接類型插件、循環插件、變量插件、過濾插件等,不經常使用
  • API:供第三方程序調用的應用程序編程接口
  • ANSIBLE:組合INVENTORY API MODUES PLUGINS的綠框,能夠理解爲Ansible的命令工具,其爲核心執行工具

2)利用ansible實現管理的方式

  • Ad-Hoc即ansible命令,主要用於臨時命令場景
  • ansible-playbook主要用戶長期規劃好的,大型項目的場景,須要提早規劃

3)Ansile-playbook執行過程

  • 將已有編排好的任務急寫入Ansible-playbook
  • 經過ansible-playbook命令分拆任務急至逐條ansible命令,按照預約規則執行

4)Ansible主要操做對象

  • Hosts主機
  • Networking網絡設備

5)注意事項

  • 執行ansile的主機通常稱爲主控端,中控,master或堡壘機
  • 主控端python版本須要2.6以上
  • 被控端python版本須要2.4以上,小於2。4須要安裝python-simplejson
  • 被控端如開啓selinux須要安裝libselinux-python
  • windows端不能做爲主控端

四、anisble部署

ansible官網json

  • (1)環境說明
主機名稱 IP地址 角色 系統版本
ansible 192.168.56.11 主控端 Centos 7.x
node01 192.168.56.12 被控端 Centos 7.x
node02 192.168.56.13 被控端 Centos 7.x
  • (2)ansible部署
[root@ansible ~]# yum install -y ansible
[root@ansible ~]# ansible --version
ansible 2.7.10
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
  • (3)ansible主要配置文件功能解析
/etc/ansible/ansible.cfg    #主配置文件,配置ansible工做特性
/etc/ansible/hosts          #主機清單
/etc/ansible/roles/         #存放角色的目錄
/usr/bin/ansible            #主程序,臨時命令執行工具
/usr/bin/ansible-doc        #查看配置文檔,模塊功能查看工具
/usr/bin/ansible-galaxy     #下載/上傳優秀代碼或Roles模塊的官網平臺
/usr/bin/ansible-playbook   #定製自動化任務,編排劇本工具
/usr/bin/ansible-pull       #遠程執行命令的工具
/usr/bin/ansible-vault      #文件加密工具
/usr/bin/ansible-console    #基於Console界面與用戶交互的執行工具
  • (4)小試牛刀
[root@ansible ~]# ansible --help    #查看ansible使用幫助
Usage: ansible <host-pattern> [options]     #使用方法,ansible+主機+選項

[root@ansible ~]# ansible 192.168.56.12 -m ping     #檢測主機的存活,返回pong則是正常,這裏使用了-m參數,採用ping模塊進行檢測目標主機的存活性
192.168.56.12 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

[root@ansible ~]# ansible -m ping 192.168.56.13     #鏈接另外1臺被控端,提示沒法匹配
 [WARNING]: Could not match supplied host pattern, ignoring: 192.168.56.13

 [WARNING]: No hosts matched, nothing to do

#這裏就須要在主機清單中增長被控端主機,須要注意的是,主機清單也支持分組模式,這裏將三臺主機分爲web組
[root@ansible ~]# vim /etc/ansible/hosts
[web]
192.168.56.11
192.168.56.12
192.168.56.13
[root@ansible ~]# ansible web -m ping   #經過對一組服務器進行存活性檢測
192.168.56.13 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
192.168.56.12 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
192.168.56.11 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

#PS:這裏須要注意的是,遠程鏈接採用的不是單純的ping命令,若是沒有作ssh密鑰認證,是會出現沒法ping通的錯誤,此時能夠採用-k參數,默認執行使用root用戶進行鏈接遠程主機。
[root@ansible ~]# ansible 192.168.56.13 -m ping -k
SSH password: 
192.168.56.13 | SUCCESS => {
    "changed": false, 
    "ping": "pong"

在使用ansible時,咱們會發現ssh連接較慢的現象,這裏則須要修改sshd服務的兩個參數來解決該問題:vim

UseDNS no
GSSAPIAuthentication no

五、主配置文件ansible.cfg解析

配置文件大部分都是註釋,只須要保持默認配置便可。這裏須要開啓日誌記錄以及關閉遠程首次鏈接的ssh認證檢查。windows

[root@ansible ~]# vim /etc/ansible/ansible.cfg 
[defaults]    默認配置

# some basic default values...

#inventory      = /etc/ansible/hosts    #主機列表配置文件
#library        = /usr/share/my_modules/  #庫文件存放目錄
#module_utils   = /usr/share/my_module_utils/  #模塊存放目錄
#remote_tmp     = ~/.ansible/tmp  #臨時py命令文件存放在遠程主機目錄
#local_tmp      = ~/.ansible/tmp  #本機的臨時命令執行目錄
#forks          = 5   #默認併發數 
#poll_interval  = 15  #時間間隔
#sudo_user      = root  #默認sudo用戶
#ask_sudo_pass = True   #每次執行ansible命令是否詢問sudo用戶密碼
#ask_pass      = True   #每次執行ansible命令是否詢問ssh密碼
#transport      = smart  #傳輸方式
#remote_port    = 22    #遠程端口號
#module_lang    = C
#module_set_locale = False
... ...
host_key_checking = False  #檢查對應服務器的host_key,建議取消註釋.
log_path=/var/log/ansible.log #記錄日誌及位置,默認不記錄 建議取消註釋
相關文章
相關標籤/搜索