1. 程式人生 > 其它 >ansible入門系列--ansible介紹(1)

ansible入門系列--ansible介紹(1)

一、自動化工具介紹

1、自動化運維應用場景

  • 檔案傳輸
  • 應用部署
  • 配置管理
  • 任務流編排

2、常用自動化運維工具

  • Ansible:python,Agentless,中小型應用環境
  • Saltstack:python,一般需部署agent,執行效率更高
  • Puppet:ruby, 功能強大,配置複雜,重型,適合大型環境
  • Fabric:python,agentless
  • Chef:ruby,國內應用少
  • Cfengine
  • func

二、Ansible介紹

1、Ansible特性

  • 1> 模組化:呼叫特定的模組,完成特定任務
  • 2> Paramiko(python對ssh的實現),PyYAML,Jinja2(模板語言)三個關鍵模組
  • 3> 支援自定義模組
  • 4> 基於Python語言實現
  • 5> 部署簡單,基於python和SSH(預設已安裝),agentless
  • 6> 安全,基於OpenSSH
  • 7> 支援playbook編排任務
  • 8> 冪等性:一個任務執行1遍和執行n遍效果一樣,不因重複執行帶來意外情況
  • 9> 無需代理不依賴PKI(無需ssl)
  • 10> 可使用任何程式語言寫模組
  • 11> YAML格式,編排任務,支援豐富的資料結構
  • 12> 較強大的多層解決方案

2、Ansible架構


ansible的作用以及工作結構
1、ansible簡介:
ansible是新出現的自動化運維工具,基於Python開發,


集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,
實現了批量系統配置、批量程式部署、批量執行命令等功能。
ansible是基於模組工作的,本身沒有批量部署的能力。
真正具有批量部署的是ansible所執行的模組,ansible只是提供一種框架。
主要包括:
(1)、連線外掛connection plugins:負責和被監控端實現通訊;
(2)、host inventory:指定操作的主機,是一個配置檔案裡面定義監控的主機;
(3)、各種模組核心模組、command模組、自定義模組;
(4)、藉助於外掛完成記錄日誌郵件等功能;
(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性執行多個任務。

2、ansible的架構:連線其他主機預設使用ssh協議

3、Ansible工作原理

4、Ansible主要組成部分

ANSIBLE PLAYBOOKS:任務劇本(任務集),編排定義Ansible任務集的配置檔案,由Ansible順序依次執行,通常是JSON格式的YML檔案
INVENTORY:Ansible管理主機的清單 /etc/anaible/hosts
MODULES: Ansible執行命令的功能模組,多數為內建核心模組,也可自定義
PLUGINS: 模組功能的補充,如連線型別外掛、迴圈外掛、變數外掛、過濾外掛等,該功能不常用
API: 供第三方程式呼叫的應用程式程式設計介面
ANSIBLE: 組合INVENTORY、API、MODULES、PLUGINS的綠框,可以理解為是ansible命令工具,其為核心執行工具


Ansible命令執行來源:

  • 1> USER,普通使用者,即SYSTEM ADMINISTRATOR
  • 2> CMDB(配置管理資料庫) API 呼叫
  • 3> PUBLIC/PRIVATE CLOUD API呼叫 (公有私有云的API介面呼叫)
  • 4> USER-> Ansible Playbook -> Ansibile

利用ansible實現管理的方式:

  • 1> Ad-Hoc 即ansible單條命令,主要用於臨時命令使用場景
  • 2> Ansible-playbook 主要用於長期規劃好的,大型專案的場景,需要有前期的規劃過程


Ansible-playbook(劇本)執行過程

  • 將已有編排好的任務集寫入Ansible-Playbook
  • 通過ansible-playbook命令分拆任務集至逐條ansible命令,按預定規則逐條執行

Ansible主要操作物件

  • HOSTS主機
  • NETWORKING網路裝置

注意事項:

  • 執行ansible的主機一般稱為主控端,中控,master或堡壘機
  • 主控端Python版本需要2.6或以上
  • 被控端Python版本小於2.4需要安裝python-simplejson
  • 被控端如開啟SELinux需要安裝libselinux-python
  • windows不能做為主控端
  • ansible不是服務,不會一直啟動,只是需要的時候啟動

三、ansible安裝

1、rpm包安裝

#安裝epel源
yum install epel-release -y
#安裝
yum install ansible

2、編譯安裝

yum -y install python-jinja2 PyYAML python-paramiko python-babel
python-crypto
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible

3、Git方式

git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup

4、pip安裝

yum install python-pip python-devel
yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
pip install --upgrade pip
pip install ansible --upgrade

  

確認安裝:
ansible --version

四、Ansible配置

1、檔案結構

配置檔案
    /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介面與使用者互動的執行工具

  

2、主機清單inventory

Inventory 主機清單
1> ansible的主要功用在於批量主機操作,為了便捷地使用其中的部分主機,可以在inventory file中將其分組命名 
2> 預設的inventory file為/etc/ansible/hosts
3> inventory file可以有多個,且也可以通過Dynamic Inventory來動態生成

/etc/ansible/hosts檔案格式
inventory檔案遵循INI檔案風格,中括號中的字元為組名。
可以將同一個主機同時歸併到多個不同的組中;
此外,當如若目標主機使用了非預設的SSH埠,還可以在主機名稱之後使用冒號加埠號來標明
    ntp.magedu.com   不分組,直接加
    
    [webservers]     webservers組
    www1.magedu.com:2222  可以指定埠
    www2.magedu.com
    
    [dbservers]
    db1.magedu.com
    db2.magedu.com
    db3.magedu.com

如果主機名稱遵循相似的命名模式,還可以使用列表的方式標識各主機
示例:
    [websrvs]
    www[1:100].example.com   ip: 1-100
    
    [dbsrvs]
    db-[a:f].example.com     dba-dbff

  

3、ansible 配置檔案

Ansible 配置檔案/etc/ansible/ansible.cfg (一般保持預設)

vim /etc/ansible/ansible.cfg

[defaults]
#inventory     = /etc/ansible/hosts      # 主機列表配置檔案
#library       = /usr/share/my_modules/  # 庫檔案存放目錄
#remote_tmp    = $HOME/.ansible/tmp      # 臨時py命令檔案存放在遠端主機目錄
#local_tmp     = $HOME/.ansible/tmp      # 本機的臨時命令執行目錄  
#forks         = 5                       # 預設併發數,同時可以執行5次
#sudo_user     = root                    # 預設sudo 使用者
#ask_sudo_pass = True                    # 每次執行ansible命令是否詢問ssh密碼
#ask_pass      = True                    # 每次執行ansible命令是否詢問ssh口令
#remote_port   = 22                      # 遠端主機的埠號(預設22)

建議優化項: 
host_key_checking = False               # 檢查對應伺服器的host_key,建議取消註釋
log_path=/var/log/ansible.log           # 日誌檔案,建議取消註釋
module_name   = command                 # 預設模組