自動化營運工具 Ansible

來源:互聯網
上載者:User

標籤:png   批量部署   工作   使用   營運工具   學習   必須   cts   化營運   

學習Ansible的系列文章
  • Ansible 介紹
  • Ansible 架構
  • Ansible 安裝
  • Ansible 設定檔及參數
  • Ansible 常用模組
  • Ansible playbook
1. Ansible 介紹

Ansible 是一個組態管理和應用部署工具,只需要通過 ssh 訪問伺服器或裝置即可實現批量系統配置、程式部署、運行命令等功能。

Ansible 是基於模組工作的,本身沒有批量部署的能力,真正具有部署能力的是 Ansible 所啟動並執行模組。

Ansible 的優點:

  • 模組化: 調用特定的模組完成特定的功能;
  • 輕量級: 無需在用戶端安裝 agent,更新時,只需在操作機上進行一次更新即可;
  • 分布式: ansible 不需要啟動服務,作為一個工具可以輕鬆的實現分布式擴充;
  • 支援編排: 批量任務可以寫成劇本進行編排,不用分發到遠程即可執行;
2. Ansible 架構

 

 Ansible 的基本架構:

  1.  Connection Plugins: 串連主機和被管理端;
  2.  Core Modules: Ansible 執行命令的內建核心模組;
  3.  Custom Modules: 根據需求編寫的定製化模組;
  4.  Plugins: 對模組功能進行補充,如串連外掛程式、迴圈外掛程式等;
  5.  Playbooks: 任務劇本,將多個任務定義在劇本中,由 Ansible 根據順序依次執行;
  6.  Host Inventory: Ansible 管理主機的清單,inventory 一般存放在 /etc/ansible/hosts 路徑下;
  7.  Ansible: 組合 Inventory、 Inventory、 Plugins 等的工具,為核心執行命令工具;
3. Ansible 安裝

Ansible 有三種安裝方式:

1. yum 安裝: 

 yum -y install ansible wget -O /etc/yum.repos.d/epel.repo 

 

 

2. pip 安裝:

 pip install ansible 

 

3. github 安裝:

git clone git://github.com/ansible/ansible.git --recursivecd ./ansiblemake rpmsudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm

 

4. Ansible 設定檔及參數
          常用設定檔或命令                                                                           描述                                  
                        /etc/ansible/ansible.cfg                        主設定檔,配置ansible工作特性
                           /etc/ansible/hosts                                        主機清單
                          /etc/ansible/roles/                                     存放角色的目錄
                         /usr/bin/ansible                              主程式,臨時命令執行工具
                        /usr/bin/ansible-doc                           查看配置文檔,模組功能查看工具
                       /usr/bin/ansible-playbook                            定製自動化任務,編排劇本工具
                      /usr/bin/ansible-pull                                  遠程執行命令的工具

 

 

 

 

 

 

 

ansible 常用參數說明
  • ansible_ssh_port: 串連的遠程主機名稱;
  • ansible_ssh_port: ssh 連接埠號碼,如果不是預設的連接埠號碼,則通過此變數設定;
  • ansible_ssh_user: 預設的 ssh 使用者名稱;
  • ansible_ssh_private_key_file: ssh 使用的密鑰檔案,適用於通過密鑰登陸,而不通過 ssh 代理登陸的情況;
  • inventory_dir: 存放 Ansible inventory host 檔案的目錄路徑名;
  • playbook_dir : 含有 playbook 基礎目錄的路徑名;
5. Ansible 常用模組ping

功能: 嘗試串連到主機,ping 通則返回 pong 。

command

功能: 遠程執行命令,如果 ansible 不指定模組時,預設使用 command 模組。

shell

功能: 遠程執行命令,類似於 command 。

copy

功能: 複製檔案或目錄到遠程節點,預設覆蓋目標檔案,源地址為 src , 目的地址為 dest 。

file

功能: 設定遠程節點檔案的檔案屬性。其中, mode 參數定義檔案或目錄的許可權。 path 定義檔案或目錄的路徑,為必選項。

setup

功能: 收集遠程主機的資訊,playbook 中的參數 gather_facts 就與該模組有關,後續 playbook 做介紹。

fail

功能: 自訂訊息失敗,在 playbook 中一般與 參數 when 結合使用。

6. Ansible playbook

Ansible playbook 採用 yaml 語言編寫, playbook 的第一行 “---” 符號表示這是一個 yaml 檔案。

playbook 的工作流程如所示:

playbook 參數

hosts: hosts 行的內容是一個或多個組主機的 patterns ;

remote_user: 遠程執行任務的賬戶名;

tasks: 任務集,由多個 task 組成;

until: until 是一個條件運算式,如果滿足條件迴圈結束;

retry:retry 是重試的次數;

delay:延遲時間;

local_action: Ansible 預設只會對控制機器執行操作,local_action 參數使得 ansible 對本機執行操作;

ansible playbook 變數
  1.  ansible setup facts  遠程主機的所有變數都可直接調用, setup 模組就是用來擷取遠程主機的相關資訊的,要使用被管理主機的 ansible 中繼資料資訊即 facts ,需要在playbook 中將gather_facts參數設為 yes 。facts 資訊包括 主機名稱、遠端主機發行版、IP地址、CPU 數等等資訊,該資訊可作為變數供後續的 task 使用。

  2.  ansible hosts 中定義的變數,分為普通變數和公開變數,普通變數在主機群組中主機單獨定義,優先順序高於公開變數。

  3. 通過命令列指定變數,優先順序最高。

  4. 在 playbook 中定義變數:

  5. vars_file 指定變數檔案。

  6. 在 role 中定義。

  7. 通過 {{ variable_name }} 調用變數,且變數名前後必須有空格。

  8. register 註冊變數,把某一條任務執行的結果儲存下來,在接下來的任務中調用該變數或者用該變數做判斷:

    將 task execute script at local host 的執行結果存入變數 host_data_json 中,在任務 fail ansible 中使用該變數中的 stderr 進行判斷該任務會不會出錯。

    host_data_json 變數如 localhost => 右邊的結構體所示,注意使用該結構體的 rc 參數進行判斷也是可以的,即 host_data_json.rc == 0:

 

簡單的 playbook 例子:

---- hosts: [any]  remote_user: "root"  gather_facts: yes  vars:    number: "1"  tasks:  - name: ping the OAM    ping:  - name: ping the local host    local_action: ping  - name: change the mode of file    local_action: file path=/tmp/test_mode.sh mode=0777  - name: execute script at local host    local_action: command /bin/bash /tmp/test_mode.sh 1 2    register: host_data_json  - name: fail ansible    local_action: fail msg="can‘t run ansible playbook"    when: host_data_json.stderr != ""

 

       

參考文章:

https://www.jianshu.com/p/575ced3a08fa

http://blog.51cto.com/191226139/2066936

http://blog.51cto.com/amyhehe/1718050

http://blog.51cto.com/faded/1762688

 

自動化營運工具 Ansible

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.