自動化運維工具Ansible介紹

  • 自動化運維工具介紹

    Ansible:Python,agentless,中小型應用環境

    Saltstack:Python,一般需部署agent,執行效率更高

    Puppet:ruby,功能強大,配置複雜,適合於大型環境使用

    Fabric:Python,agentless

    Chef:ruby,國內使用少

    同類自動化工具GitHub關注程序(2016-07-10)

    image.png

  • Ansible簡介

    介紹

        創始人:Michael DeHaan(Cobbler與Func的作者)

        2012-03-09 發佈0.0.1版 ---> 2015-10-17  Redhat宣佈收購

    特性

        模塊化

        有Paramiko,PyYAML,Jinja2(模板語言)三個關鍵模塊

        支持自定義模塊

        基於Python語言開發

        部署簡單,基於Python和SSH,agentless

        安全,基於OpenSSH

        支持playbook編排任務

        具有冪等性:一個任務執行1遍和執行n遍效果一樣,不因重複執行帶來意外情況

        無需代理不依賴PKI(無需ssl)

        可使用任何編程語言寫模塊

        YAML格式,編排任務,支持豐富的數據結構

        較強大的多層解決方案

    Ansible架構

        

    Ansible主要組成部分

        ANSIBLE PLAYBOOKS:任務劇本(任務集),編排定義Ansible任務集的配置文件,由Ansible順序依次執行,通常是JSON格式的YML文件

        INVENTORY:Ansible管理主機的清單/etc/ansible/hosts

        MODULES:Ansible執行命令的功能模塊,多數爲內置的核心模塊,也可自定義

        PLUGINS:模塊功能的補充,如連接類型插件、循環插件、變量插件、過濾插件等,該功能不常用

        API:供第三方程序調用的應用程序編程接口

        ANSIBLE:組合INVENTORY、API、MODULES、PLUGINS的綠框,可以理解爲是ansilbe命令工具,其爲核心執行工具

        Ansible命令執行來源:

            USER:普通用戶,即SYSTEM ADMINISTRATOR

            CMDB(資產管理系統)API調用

            PUBLIC/PRIVATE CLOUD API調用 

            USER --> Ansible playbook --> Ansible

        利用ansible實現管理的方式:

            Ad-Hoc即ansible命令,主要用於臨時命令使用場景

            Ansible-playbook主要用於長期規劃好的,大型項目的場景,需要有前提的規劃

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

            將已有編排好的任務集寫入Ansible-Playbook

            通過ansible-playbook命令分拆任務集至逐條ansible命令,按預定規則逐條執行

        Ansible主要操作對象:

            HOSTS主機

            NETWORKING網絡設備

        注意事項

            執行ansible的主機一般稱爲主控端,中控,master或堡壘機

            主控端Python版本需要2.6或以上

            被控端Python版本小於2.4需要安裝python-simplejson

            被控端如開啓SElinux需要安裝libselinx-python

            windows不能做爲主控端

    安裝Ansible

        rpm包安裝:EPEL源

~]#yum -y install epel-release
~]#yum install ansible

        編譯安裝

~]#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

        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

    相關文件

         配置文件

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

    主機清單inventory

        Inventory主機清單

            ansible的主要功用在於批量操作,爲了便捷地使用其中的部分主機,可以在invertory file中將其分組命名

            默認的inventory file爲/etc/ansible/hosts

            inventory file可以有多個,且也可以通過Dynamic Inventory來動態生成

        /etc/ansible/hosts文件格式

            inventory文件遵循INI文件風格,中括號的字符爲組名。可以將同一個主機同時歸併到多個不同的組中;此外,當如若目標主機使用了非默認的SSH端口,還可以在主機名稱之後使用冒號加端口號來標明

      image.png

            如果主機名稱遵循相似的命令模式,還可以使用列表的方式標識各主機

                例:                  

                        [websrvs]

                        www[01:100].example.com

                        [dbsrvs]

                        db-[a:f].example.com

    Ansible的Host-pattern        

        ansible的Host-pattern

            匹配主機的列表

                All :表示所有Inventory中的所有主機

            ansible all –m ping

                * :通配符

            ansible “*” -m ping

            ansible 192.168.1.* -m ping

            ansible “*srvs” -m ping

            或關係

                ansible “websrvs:appsrvs” -m ping

                ansible “192.168.1.10:192.168.1.20” -m ping

            邏輯與

                ansible “websrvs:&dbsrvs” –m ping

            在websrvs組並且在dbsrvs組中的主機

            邏輯非

                ansible ‘websrvs:!dbsrvs’ –m ping

            在websrvs組,但不在dbsrvs組中的主機

            綜合邏輯

                ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ –m ping

            正則表達式

                ansible “websrvs:&dbsrvs” –m ping

                ansible “~(web|db).*\.liuyutang\.com” –m ping

    Ansible配置文件       

        Ansible 配置文件/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

        #host_key_checking = False # 檢查對應服務器的host_key,建議取消註釋

        #log_path=/var/log/ansible.log #日誌文件

    Ansible系列命令       

        Ansible系列命令

            ansible ansible-doc ansible-playbook ansible-vault

            ansible-console ansible-galaxy ansible-pull

        ansible-doc: 顯示模塊幫助

            ansible-doc [options] [module...]

                -a 顯示所有模塊的文檔

                -l, --list 列出可用模塊

                -s, --snippet 顯示指定模塊的playbook片段

            示例:

                ansible-doc –l 列出所有模塊

                ansible-doc ping 查看指定模塊幫助用法

                ansible-doc –s ping 查看指定模塊幫助用法

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

    ansible <host-pattern> [-m module_name] [-a args]

        --version 顯示版本

        -m module 指定模塊,默認爲command

        -v 詳細過程 –vv -vvv更詳細

        --list-hosts 顯示主機列表,可簡寫—list

        -k, --ask-pass 提示連接密碼,默認Key驗證

        -K, --ask-become-pass 提示輸入sudo

        -C, --check 檢查,並不執行

        -T, --timeout=TIMEOUT 執行命令的超時時間,默認10s

        -u, --user=REMOTE_USER 執行遠程執行的用戶

        -b, --become 代替舊版的sudo 切換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章