自動化運維之ansible

大綱:node

     1、ansible是什麼python

     2、ansible的特色mysql

     3、ansible的任務執行模式和執行流程nginx

     4、ansible的安裝web

     5、ansible經常使用命令sql

     6、ansible經常使用模塊shell

     7、關於ansible playbookvim

     8、角色定製rolesbash

      環境介紹:接近年關,某公司計劃作一次大型促銷活動,要求各業務組隊年末大促作準備,其中運維部要求全部業務容量進行三倍的擴容,並搭建出多套環境能夠供開發和測試人員作測試,運維部門經理要求其工做人員儘快實現。那麼,如何實現呢?此時,ansible能擔此大任。服務器

1、ansible是什麼

一種新出現的自動化運維工具,基於python開發,集合了衆多運維工具(puppet、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。
ansible是基於 paramiko 開發的,而且基於模塊化工做,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。ansible不須要在遠程主機上安裝client/agents,由於它們是基於ssh來和遠程主機通信的。ansible目前已經已經被紅帽官方收購,是自動化運維工具中你們承認度最高的,而且上手容易,學習簡單。是每位運維工程師必須掌握的技能之一
2、ansible的特色

一、部署簡單,只需在主控端部署ansible環境,被控端無需作任何操做
二、默認使用SSh協議對設備進行管理
三、有大量常規運維操做模塊,可實現平常絕大部分操做
四、配置簡單、功能強大、擴展性強
五、支持API及自定義模塊,可經過python輕鬆擴展
六、經過playbooks來定製強大的配置、狀態管理
七、輕量級,無需在客戶端安裝agent,更新時,只需在操做機上進行一次更新便可
八、提供一個功能強大、操做性強的web管理界面和REST API接口------AWX平臺

3、ansible的任務執行模式和執行流程

ansible系統由控制主機對被管節點的操做方式可分爲兩類,即ad-hoc和 playbook
       ad-hoc模式,使用單個模塊,至關於bash中的一句話shell
       playbook模式是ansible主要管理方式,經過多個task集合完成一類功能,簡單理解爲經過組合多條ad-hoc操做的配置文件

ansible在運行時,首先讀取ansible.cfg中的配置,根據規則獲取lnventory中的管理主機列表,並行的在這些主機中執行配置的任務,最後等待返回的結果

4、ansible的安裝

通常兩種方式:yum安裝和pip程序安裝
一、使用yum安裝
yum install epel-release -y
yum install ansible –y
二、 使用pip(python的包管理模塊)安裝
pip install ansible
若是沒pip,需先安裝pip.yum可直接安裝:
yum install python-pip
pip install ansible

5、ansible經常使用命令

-a MODULE_ARGS, --args=MODULE_ARGS     模塊的參數,若是執行默認COMMAND的模塊,便是命令參數

-C, --check      只是測試一下會改變什麼內容,不會真正去執行;相反,試圖預測一些可能發生的變化

-f FORKS, --forks=FORKS    並行任務數,NUM被指定爲一個整數,默認是5

-i INVENTORY, --inventory-file=INVENTORY    指定庫存主機文件的路徑,默認爲/etc/ansible/hosts

-m MODULE_NAME, --module-name=MODULE_NAME    執行模塊的名字,默認使用 command 模塊,因此若是是隻執行單一命令能夠不用 -m參數

-R SU_USER, --su-user=SU_USER    指定SU的用戶,默認是root用戶

-T TIMEOUT, --timeout=TIMEOUT     指定SSH默認超時時間, 默認是10S

-v, --verbose verbose mode (-vvv for more, -vvvv to enable)    詳細信息

6、ansible經常使用模塊

一、主機連通性測試

二、command:在遠程主機上執行命令

三、shell模塊在遠程主機上調用shell解釋器運行命令,支持shell各類功能,例如管道

四、copy:複製文件到遠程主機,也能夠修改權限等等

五、file:設置文件屬性

六、fetch:從遠程主機獲取文件到本地

七、cron:管理cron計劃任務

八、yum:安裝軟件

九、service:服務程序管理

十、user:用戶模塊管理

十一、group:用戶組模塊,添加或刪除組

十二、script:在指定節點上運行服務端的腳本

1三、setup:用於收集被管理主機上的信息,例如CPU、內存等

7、關於ansible playbook

一、ansible playbook簡介

playbook是ansible用於配置、部署和管理被控節點的劇本。經過playbook的詳細描述,執行其中的一系列tasks,可讓遠程主機達到預期的狀態。

二、ansible playbook格式

YMAL格式是相似於JSON的文件格式

文件的第一行應該以「-」三個連字符)開始。代表YMAL文件的開始

在同一行中,#以後的內容表示註釋

YMAL中的列表元素以「-」開頭後緊跟着一個空格,後面爲元素內容

同一個列表中的元素應該保持相同的縮進

hosts、remote_user、tasks等對象的表示方法都是鍵值中間以「:」分隔表示,「:」後面還要增長一個空格

三、playbook的核心元素

hosts:主機

tasks:任務列表

variables:變量

templates:包含了模板語法的文本文件

handlers:由特定條件觸發的任務

四、模板templates

文本文件:嵌套有腳本

使用模板操做遠程主機的nginx服務,具體過程以下:

①使用setup模塊查詢出CPU的信息

②修改配置文件

[root@node2 tmp]# vim nginx.conf.j2                        CP到tmp的配置文件,記得備份
worker_processes {{ ansible_processor_vcpus }};    調用上面setup查到的CPU信息
listen {{ nginxport }};                                                   指定端口,調用下面playbook裏面指定的端口
[root@node2 ansible]# vim nginx.yml                        向/tmp下的配置文件裏傳參數)

③執行劇本

[root@node2 ansible]# ansible-playbook nginx.yml -t reloadnginx

④在IP爲172.17.19.117和107被監控端查看一下,8888端口打開

在117和107端打開nginx.conf文件,能夠看出傳進來的參數就是playbook裏面定義的,模板使用成功。
  3 worker_processes 1;
37 server {
38 listen 8888;

8、角色定製roles

       應用環境:對於以上全部的方式有個弊端就是沒法實現複用,好比說在同時部署web、mariabd、haproxy時或不一樣服務器組合不一樣的應用就須要些多個yml文件,難以實現靈活的調用。而roles用於層次性、結構化的組織playbook,可以根據層次型結構自動裝載變量文件、tasks以及handlers等。

一、roles目錄結構

files/:存儲由copy或script等模塊調用的文件;
tasks/:此目錄中至少應該有一個名爲main.yml的文件,用於定義各task;其它的文件須要由main.yml進行「包含」調用;
handlers/:此目錄中至少應該有一個名爲main.yml的文件,用於定義各handler;其它的文件須要由
main.yml進行「包含」調用;
vars/:此目錄中至少應該有一個名爲main.yml的文件,用於定義各variable;其它的文件須要由
main.yml進行「包含」調用;
templates/:存儲由template模塊調用的模板文本;
meta/:此目錄中至少應該有一個名爲main.yml的文件,定義當前角色的特殊設定及其依賴關係;其它的文件須要由main.yml進行「包含」調用;
default/:此目錄中至少應該有一個名爲main.yml的文件,用於設定默認變量;

二、具體角色定製過程以下:

① 在roles目錄下生成對應的目錄結構
mkdir -pv ./{nginx,mysql,httpd}/{files,templates,vars,tasks,handlers,meta,default}
② 定義/tasks/main.yml的配置文件以下

[root@node2 nginx]# cp /tmp/nginx.conf.j2 templates/    對照上面的template模板路徑
[root@node2 nginx]# cd files/
[root@node2 files]# lftp 172.17.0.1
lftp 172.17.0.1:/pub/Sources/7.x86_64/nginx> get nginx-1.10.2-1.el7.ngx.x86_64.rpm   copy的相對路徑是基於file的路徑,因此要把包下載到file目錄下

③ 修改變量文件

[root@node2 nginx]# vim vars/main.yml

    nginxport: 9999

④ 定義handlers文件

[root@node2 nginx]# vim handlers/main.yml 

   - name: new conf to reload
            service: name=nginx state=restarted

⑤ 定義/etc/ansible/roles.yml的playbook文件

[root@node2 ansible]# vim roles.yml

    ---
    - hosts: web
             remote_user: root
      roles:
    - nginx

⑥ 執行角色文件

⑦ 在被管理節點117和107查看nginx服務,9999端口打開

至此,對ansible的簡單介紹就結束啦,謝謝瀏覽~

相關文章
相關標籤/搜索