Ansible基礎理論及安裝

Ansible介紹及安裝

一. ansible自動化運維完成的功能

在運維工程中,我們部署一臺使其能夠在生產環境中使用大致經過一下步驟:

Ansible基礎理論及安裝

  1. 安裝主機。
  2. 部署中間件,運行環境等。
  3. 安裝我們實際生產的應用程序。

這一系列步驟如果人工一步步去配置話,需要花費大量的時間。特別是在生產環境中,我們爲了提高線上環境的可用性,要儘量減少不可用時間,我們可以使用高可用以增加可用性。儘管有高可用但在實際情況下,也會導致生產環境不可用,例如自然災害等不可抗力。那麼我們就需要有一種工具能快速部署線上環境,在主機只用幾百來臺的情況下ansible就是一個不錯的選擇。

Ansible自動化運維完成的功能:

  • 實現多主機並行執行命令
  • 批量安裝部署線上環境

    簡而言之,他可以實現OS以上的全部功能。注意安裝操作系統這一功能現在處於實際測試環境下,不能使用。

二. Ansible簡介

ansible運維工具,他不需要在被管理的主機上安裝代理程序已接收ansible發來的指令,ansible管理被主機是通過ssh連接來管理。它屬於無agent運維工具。相反像zabbix我們需要在被管理主機上安裝zabbix-agant程序包,故zabbix是有agent端運維工具。

1. Ansible特點

  • 部署簡單,只需在主控端部署ansible環境
  • 冪等性,同一命令能夠執行多次,但要注意的是實行的命令要具備冪等性特性,否則會報錯。
  • 默認使用SSH協議管理主機。
  • 提供了豐富的模塊,並支持自主開發新模塊。
  • 通過playbook編排,管理。並且playbook使用yaml語法。
  • 支持雲平臺和大數據。

2. Ansible架構圖

Ansible基礎理論及安裝

Ansible核心組件說明

  • Ansible:Ansible的核心程序,後面會詳細介紹ansible的使用

  • Host Lnventory:記錄了每一個由Ansible管理的主機信息,信息包括ssh端口,root帳號密碼,ip地址等等。默認資產文件是在/etc/ansible/hosts中定義。

  • Playbooks:YAML格式文件,組織了多個模塊功能,在統一調用。

  • Core Modules:Ansible執行任何管理任務都不是由Ansible自己完成,而是由核心模塊完成;Ansible管理主機之前,先調用core Modules中的模塊,然後指明管理Host Lnventory中的主機,就可以完成管理主機。

  • Custom Modules:自定義模塊,完成Ansible核心模塊無法完成的功能,此模塊支持任何語言編寫。

  • Connection Plugins:連接插件,Ansible和Host通信使用

ansible大致工作流程:

用戶向ansible發送請求,但ansible不處理任何請求,所用的請求都由相應的模塊完成,core模塊是自帶,用戶也可以自己寫模塊以完成相應的功能。而命令執行的主機來自inventory file。連接主機使用連接引擎,默認是使用ssh引擎。而playbook是將一個完成任務的命令放在一個文件中執行。

三. Ansible基礎環境的安裝和配置

1. Ansible安裝及重要文件介紹

安裝

~] yum install ansible

二進制文件

~] rpm -ql ansible | less

/usr/bin/ansible : 用於在指定主機上運行任務。
/usr/bin/playbook : 用於運行playbook。
/usr/bin/ansible-doc : 用於查看ansible中個模塊的使用方法。

Inventory資產清單

/etc/ansible/hosts

ansible配置文件

/etc/ansible/ansible.cfg

配置文件使用的類似ini風格

[defaults]

[privilege_escalation]

[paramiko_connection]

[ssh_connection]

[persistent_connection]

[accelerate]

[selinux]

[colors]

[diff]

從各個方面定義了ansible的默認行爲,以及特性。詳細介紹請看官方文檔配置文件介紹

相關配置

  • inventory = /etc/ansible/hosts :設置inventory文件目錄
  • gathering = implicit :是否獲取被控主機參數信息

    implicit:默認獲取主機facts, 使用gather_facts=False關閉
    explicit:默認不獲取主機facts,使用gather_facts=True關閉
  • gather_subset = all :指明獲取被控主機那些facts信息,最終作爲變量可以被yaml和jinja2文件應用

    他將主機的信息分爲多個子系統:
    all - 獲取所有子系統的信息    
    network - 獲取網絡facts  
    hardware - 獲取主機硬件facts   
    virtual - 獲取虛擬化fact
    facter - 從factoer中獲取facts   
    ohai - 從ohai獲取facts

2. 配置SSH連接

Ansible master主控端:192.168.200.135

Ansible node1 節點機:192.168.200.136

Ansible node2 節點機: 192.168.200.137

Ansible主控端配置 :

生成rsa算法密鑰對

Ansible基礎理論及安裝

默認即可,直接回車,生成的密鑰對默認情況下放在家目錄中隱藏目錄.ssh。

Ansible基礎理論及安裝

其中,id_rsa爲私鑰,id_rsa.pub爲公鑰。

拷貝公鑰到被管理主機

Ansible基礎理論及安裝

此命令會將私鑰文件本機id_rsa.pub文件的內容複製到192.168.200.136的/root/.ssh/authorized_keys文件中,如下圖

Ansible基礎理論及安裝

本機在/root/.ssh/known_hosts中記錄了遠程主機的信息,如下圖

Ansible基礎理論及安裝

測試遠程連接是否成功

Ansible基礎理論及安裝

由上圖可看出遠程登錄成功。

3. 測試Ansible功能

Ansible基礎理論及安裝

表明Ansible配置成功了。

四. 術語

術語 解釋
Action 它是一個task的具體表現,而一個action是模塊和其對應參數的運行
Facts 它是遠程主機的信息,使用setup模塊獲取,可在配置文件通過gather_subset設置獲取的值
Forks Ansible主控端連接主機可併發運行,默認是5,可在配置文件修改forks參數設置
Handlers 觸發器,它實際也是一個task,這個task只會被notify觸發,例如,我們配置文件修改後會重啓服務。一個Handlers如果被多個task調用只會執行一次。handlers運行順序是其列出來的順序而不是觸發的順序。
Inventory 它是一個文件,用於描述主機和組
Jinja2 他像一個插入型語言,例如php,jsp可以進行變量替換,運算等
Notify 用於task中,給task註冊了一個事件,一旦發生改變就會觸發對應的task執行,
paramiko ansible默認使用的庫,用戶ssh連接
Playbooks 它是一種語言,ansible用其編排,配置,管理,部署系統
Roles 它是一個組織單元,以實現一個特殊的功能,例如安裝一個nginx,他就可以編寫成一個role。這樣方便重複利用
Tags playbook中用於標記一個task,在執行時可以只執行指定的task,也可跳過指定的的task
Templates 它使用jinga2的模板引擎,可以使用fact變量,host變量,group變量
When 用於task中。是判斷語句,當判斷爲假是task不會執行
YAML 使用yaml定義palybook
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章