1. 程式人生 > >自動化運維工具——ansible安裝入門(一)

自動化運維工具——ansible安裝入門(一)

vat 網絡設備 stack 基於 功能模塊 mas ad-hoc python server

一、簡介

現如今有很多運維自動化的工具,如:Ansible、Puppet、saltStack、Fabric、chef、Cfengine

1. Ansible介紹

Ansible 是由 Cobbler與Func的作者 Micheael DeHaan 編寫。2012-03-09發布0.0.1版本,2015-10-17被紅帽收購
Ansible 是一個配置管理系統(configuration management system)。你只需要可以使用ssh訪問你的服務器或設備就可以;它不同於其他工具,因為它使用的是推送的方式,而不像其他工具一樣使用拉去安裝agent。

2. Ansible功能

Ansible 可以幫助我們完成一些批量任務,或者完成一些需要經常重復的工作;例如:
  • 當公司擴大,測試環境與生產環境的服務器都要增加至百臺。服務器的環境部署這樣重復性的工作就可以使用到ansible;
  • 在百臺服務器中同時部署一個nginx服務,並且啟動。
  • 將一個配置文件同時拷貝到數十臺服務器時。

3. Ansible 的特性

  • 模塊化:調用特定的模塊完成特定的任務
  • 有Paramiko,PyYAML,Jinja2(模板語言)三個關鍵模板
  • 支持自定義模塊
  • 基於Python語言實現
  • 部署簡單,基於python和SSH(系統已默認安裝),agentless不需要客戶端
  • 安全,基於OpenSSH,需要SSH密鑰驗證
  • 支持playbook編排任務
  • 冪等性:一個任務執行1遍和執行多遍的效果一樣,不會因為重復執行帶來意外情況
  • 無需代理不依賴PKI(無需ssl)
  • 可以使用任何編程語言寫模塊
  • YAML格式,編排任務,支持豐富的數據結構
  • 較強大的多層解決方案

4. Ansible 架構

技術分享圖片

5. Ansible 工作原理

技術分享圖片

6. Ansible 主要組成部分

  • ansible playbooks:任務劇本(任務集),編排第一Ansible任務集的配置文件,由Ansible順序依次執行,通常是json格式的yml文件
  • inventory:Ansible管理主機的清單/etc/ansible/hosts
  • modules:Ansible 執行命令的功能模塊,多數為內置的核心模塊,也可自定義
  • plugins:模塊功能的補充,如連接類型插件,循環插件,變量插件,過濾插件等,該功能不常用
  • API:供第三方程序調用的應用程序編程接口
  • Ansible:組合inventory、API、modules、plugins的綠框,可以理解為是ansible命令工具,其為核心執行工具

7. Ansible 命令執行來源

  • USER,普通用戶,即system administrator
  • CMDB 資產管理系統 API調用
  • public/private cloud API調用
  • USER-->ansible playbook --> Ansible

8. 利用ansible實現管理的方式:

  • Ad-Hoc 即ansible命令,主要用於臨時命令使用場景
  • Ansible-playbook 主要用於長期規劃好的,大型目的場景,需要有提前的規劃

9. Ansible-playbook(劇本)執行過程:

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

10. Ansible 主要操作對象:

  • HOSTS主機
  • NETWORKING網絡設備

註意事項

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

二、安裝Ansible

Yum安裝方式

Ansible安裝包在EPEL源中,自行配置yum源
    //Ansible 安裝
    yum install -y ansible

技術分享圖片

編譯安裝

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

git 安裝

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

pip安裝:pip是安裝Python包的管理器,類似yum

    > 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 2.7.7
      ·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)]

1. Ansible 配置文件

  • /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
  • /etc/ansible/hosts 主機清單
  • /etc/ansible/roles/存放角色的目錄

① 配置文件 /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                           #默認並發數
    #sudo_user = root                    # 默認sudo 用戶
    #ask_sudo_pass = True                #每次執行ansible命令是否詢問ssh密碼
    #ask_pass = True
    #remote_port = 22                    #默認的節點ssh端口
    #host_key_checking = False           # 檢查對應服務器的host_key,建議取消註釋

② 主機清單inventory

Ansible必須通過Inventory 來管理主機。Ansible 可同時操作屬於一個組的多臺主機,組和主機之間的關系通過 inventory 文件配置。

//語法格式:
//單臺主機
    www.test.com     //FQDN方式
    172.16.1.100      //IP地址
    172.16.1.100:12222  //SSH服務端口不是22時使用

//多臺主機
    [mysqlServer]       //定義一個組名
    mysql.test.com     //FQDN方式 【定義組內單臺主機的地址】
    172.16.1.101        //IP地址
    
    [webServer]
    172.16.1.100        //一臺主機可以在不同的組內,它同時屬於[mysqlServer]組

//組嵌套組
    [group01:Server]   //group01為自定義的組名,Server是關鍵字,固定語法必須填寫;
    mysqlServer          //group01 組內包含的其他組名
    webServer             //group01 組內包含的其他組名

//有規律的主機地址
    www.wj[01:06].test.com
    //相當於:
    www.wj01.test.com
    www.wj02.test.com
    ........
    www.wj06.test.com
可以定義有規律的ip地址,也可以定義 有規律的字母地址,例如 [a:f]

還有一個隱藏的組是 [all] 組,不指定機器或組,就默認主機列表中所有機器

主機列表中的參數說明

    ansible_ssh_host
    //將要連接的遠程主機名.與你想要設定的主機的別名不同的話,可通過此變量設置.

    ansible_ssh_port
    //ssh端口號.如果不是默認的端口號,通過此變量設置.這種可以使用 ip:端口 192.168.1.100:2222

    ansible_ssh_user
    //默認的 ssh 用戶名

    ansible_ssh_pass
    //ssh 密碼(這種方式並不安全,我們強烈建議使用 --ask-pass 或 SSH 密鑰)

    ansible_sudo_pass
    //sudo 密碼(這種方式並不安全,我們強烈建議使用 --ask-sudo-pass)

    ansible_sudo_exe (new in version 1.8)
    //sudo 命令路徑(適用於1.8及以上版本)

    ansible_connection
    //與主機的連接類型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默認使用 paramiko.1.2 以後默認使用 'smart','smart' 方式會根據是否支持 ControlPersist, 來判斷'ssh' 方式是否可行.

    ansible_ssh_private_key_file
    //ssh 使用的私鑰文件.適用於有多個密鑰,而你不想使用 SSH 代理的情況.

    ansible_shell_type
    //目標系統的shell類型.默認情況下,命令的執行使用 'sh' 語法,可設置為 'csh' 或 'fish'.

    ansible_python_interpreter
    //目標主機的 python 路徑.適用於的情況: 系統中有多個 Python, 或者命令路徑不是"/usr/bin/python",比如  \*BSD, 或者 /usr/bin/python 不是 2.X 版本的 Python.
    //我們不使用 "/usr/bin/env" 機制,因為這要求遠程用戶的路徑設置正確,且要求 "python" 可執行程序名不可為 python以外的名字(實際有可能名為python26).

    //與 ansible_python_interpreter 的工作方式相同,可設定如 ruby 或 perl 的路徑....

2. Ansible 主要程序

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

3. 被管理的主機做密鑰驗證

ansible通過ssh實現配置管理、應用部署、任務執行等功能,建議配置ansible端能基於密鑰認證的方希聯系各被管理節點   

密鑰驗證不具體寫了

4. Ansible系列命令

    ansible
    ansible-doc:顯示模塊磅數
    // ansible-doc [option] [module...]
           //-a 顯示所有模塊的文檔;-l == --list  列出可用模塊;-s == --snippet 顯示指定模塊的playbook片段
    ansible-playbook
    ansible-vault
    ansible-console
    ansible-galaxy
    ansible-pull

註意:ansible使用,主機清單必須要先配置

自動化運維工具——ansible安裝入門(一)