自動化運維工具Ansible連續劇之--介紹安裝與鏈接

介紹python

ansible官方文檔裏寫道web

Ansible is a radically simple IT automation enginesql

即:Ansible是一款極其簡單的IT自動化工具服務器

  它基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。網絡

ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:架構

(1)、鏈接插件connection plugins:負責和被監控端實現通訊;併發

(2)、host inventory:指定操做的主機,是一個配置文件裏面定義監控的主機;框架

(3)、各類模塊核心模塊、command模塊、自定義模塊;運維

(4)、藉助於插件完成記錄日誌郵件等功能;python2.7

(5)、playbook:劇本執行多個任務時,非必需可讓節點一次性運行多個任務。

 

基本框架圖  

 

11017171318

 

組件介紹

Ansible:Ansible核心程序。

connection plugins :鏈接插件,負責和被監控端實現通訊。

HostInventory:記錄由Ansible管理的主機信息,包括端口、密碼、ip等。

Playbooks:」劇本」YAML格式文件,多個任務定義在一個文件中,定義主機須要調用哪些模塊來完成的功能。

CoreModules:核心模塊,主要操做是經過調用核心模塊來完成管理任務。

CustomModules:自定義模塊,完成核心模塊沒法完成的功能,支持多種語言。

 

ansible特色

  • 部署簡單,只需在主控端部署Ansible環境,被控端無需作任何操做,默認使用SSH協議對設備進行管理;

  • 有大量常規運維操做模塊,可實現平常絕大部分操做。

  • 配置簡單、功能強大、擴展性強;

  • 支持API及自定義模塊,可經過Python輕鬆擴展;

  • 經過Playbooks來定製強大的配置、狀態管理;

  • 輕量級,無需在客戶端安裝agent,更新時,只需在操做機上進行一次更新便可;

  • 提供一個功能強大、操做性強的Web管理界面和REST API接口——AWX平臺。

  • 冪等性   冪等性不會重複執行相同的指令。例如不會重複安裝軟件。

 

工做原理圖

wKiom1iNsjfzNEh_AABncFDwJ78260


測試環境

名稱 IP 系統
ansible 192.168.10.10 CenOS7
PC1 192.168.10.11 CenOS7
PC2 192.168.10.12 CenOS7

 

安裝

安裝ansible很是簡單,直接YUM安裝就能夠。

# yum install epel-release -y
# yum install ansible -y
# ansible --version  #查看版本
    ansible 2.7.0
  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, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]


配置

ansible.cfg爲ansible的主配置文件,他主要定義了roles_path路徑,主機清單路徑,鏈接清單中的主機方式等。

hosts是咱們定義主機清單的配置文件。

# cd /etc/ansible/
# ls
ansible.cfg  hosts  roles

主配置文件的一些解釋

[defaults]
# some basic default values...
#inventory      = /etc/ansible/hosts       //定義資源清單文件的位置
#library        = /usr/share/my_modules/     //library指向ansible模塊的目錄
#module_utils   = /usr/share/my_module_utils/#remote_tmp     = ~/.ansible/tmp#local_tmp      = ~/.ansible/tmp
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks          = 5        //多少個進程能夠同時工做
#poll_interval  = 15
#sudo_user      = root     //設置默認執行命令的用戶
#ask_sudo_pass = True    //執行ansible命令是否詢問ssh密碼,每次都詢問
#ask_pass      = True        //和上面一塊兒的
#transport      = smart
#remote_port    = 22        //鏈接被管理的端口,默認22
#module_lang    = C
#module_set_locale = False    //第一次使用ansible鏈接客戶端的提示開關
# SSH timeout#timeout = 10      //SSH鏈接超時的間隔,單位是秒

hosts定義方式

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

我本身定義的兩臺主機,我把它分爲了兩個組。

[web]192.168.10.11
[sql]192.168.10.12

組成員可使用通配符來匹配,以下 192.168.10.[1:5] #表示匹配從192.168.10.1——192.168.10.5的主機。

 

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界面可與用戶交互的命令執行工具

 

SSH與公私鑰

在主機執行如下命令,將公鑰發送到兩臺被鏈接主機。

#ssh-keygen -t rsa                             #建立公鑰與私鑰
#ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.11            #將公鑰傳輸給對端服務器

此時服務器能夠免密碼登陸

 

測試

這裏用一個PING模塊來驗證一下是否鏈接成功,下一篇博客咱們再研究另外的經常使用模塊。

命令格式:

ansible<host-pattern> [options]

 

命令參數

-a MODULE_ARGS, --args=MODULE_ARGS

            module arguments  # 指定Ansible調用的模塊

--ask-become-pass   ask forprivilege escalation password # Ansible su切換用戶的時候使用該參數輸入密碼

  -k,--ask-pass        ask for SSHpassword  # 以密碼認證

--ask-su-pass         ask for supassword (deprecated, use become) # su的時候使用該參數

  -K,--ask-sudo-pass   ask for sudo password(deprecated, use become) # sudo的時候

--ask-vault-pass      ask forvault password # ansible-valut 加密文件

  -BSECONDS, --background=SECONDS  # 後臺等待秒數

--become-user=BECOME_USER

                        run operations as thisuser (default=None)  # su到哪一個用戶

  -C,--check           don't make any changes;instead, try to predict some

                        of the changes that mayoccur  # 不執行命令只作命令執行檢查

  -c CONNECTION, --connection=CONNECTION

                        connection type to use(default=smart)

  -eEXTRA_VARS, --extra-vars=EXTRA_VARS  # 調用外部變量

                        set additionalvariables as key=value or YAML/JSON

  -fFORKS, --forks=FORKS  # Ansible一次命令執行併發的線程數

  -h,--help            show this help messageand exit

  -iINVENTORY, --inventory-file=INVENTORY  #Ansible調用的Hosts文件,默認/etc/ansible/hosts

                        specify inventory hostfile

                       (default=/etc/ansible/hosts)

  -lSUBSET, --limit=SUBSET  # 限定主機列表中的某臺機器執行

                        further limit selectedhosts to an additional pattern

--list-hosts          outputs alist of matching hosts; does not execute

                        anything else  ## 列出主機列表中的主機

  -mMODULE_NAME, --module-name=MODULE_NAME  #Ansible 調用的執行模塊

  -M MODULE_PATH, --module-path=MODULE_PATH  #調用的模塊路徑

  -S,--su              run operations with su(deprecated, use become) #使用su和become結合使用

  -RSU_USER, --su-user=SU_USER  # su的話切換至哪一個用戶

  -s,--sudo            run operations withsudo (nopasswd) (deprecated, use

                        become)  # 執行sudo命令

  -USUDO_USER, --sudo-user=SUDO_USER  # sudo

  -TTIMEOUT, --timeout=TIMEOUT  # 執行命令的超時時間

--vault-password-file=VAULT_PASSWORD_FILE  ## ansible-vault加密的密碼文件

  -v,--verbose         verbose mode (-vvv formore, -vvvv to enable

                        connectiondebugging)  # 顯示詳細信息 -vvvv

--version             showprogram's version number and exit ## 顯示版本號

 

ping模塊測試:

# ansible all  -m ping
192.168.10.11 | SUCCESS => {"changed": false, "ping": "pong"}
192.168.10.12 | SUCCESS => {"changed": false, "ping": "pong"}

 

看到兩臺主機都返回了成功ping通,至此咱們就能夠愉快的使用ansible對區域內的服務器開始管理工做啦!

相關文章
相關標籤/搜索