大綱: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的簡單介紹就結束啦,謝謝瀏覽~