ansible

一,部署前戲

1.1 ansible介紹

ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架html

a. ansible是一個基於Python開發的自動化運維工具
b. ansible是一個基於ssh協議實現遠程管理的工具
c. ansible軟件能夠實現多種批量管理操做(批量系統配置、批量軟件部署、批量文件拷貝、批量運行命令)python

借下別處的一張圖哈:linux

 

1.2 服務特徵介紹:

ansible軟件服務端(管理端):不須要啓動任何服務 默認服務端不須要任何的配置web

ansible軟件客戶端(受控端):沒有客戶端軟件安裝shell

 

1.3 SSH祕鑰管理免交互式建立

介紹中也說了ansible是基於ssh傳輸的,那麼部署ansible前提就要配置好ssh祕鑰鏈接,並且要免交互式的。vim

下面就來介紹下如何進行ssh祕鑰鏈接:安全

1.3.1 在管理主機上建立密鑰對信息(普通方式建立)

ssh-keygen -t dsa      <-- 建立密鑰對命令 -t dsa表示指定密鑰對加密類型

 祕鑰保存默認路徑爲 /home/.ssh/bash

 

1.3.2 將管理主機的公鑰分發到被管理主機上

執行一條命令:服務器

[root@m01 .ssh]# ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31 #此處爲被管理主機地址

 此時被管理主機就會自動生成authorized_keys文件來保存公鑰信息:網絡

 

此時管理端直接就能夠遠程鏈接了 (可是第一次仍是須要手動輸入yes,須要交互)

 

提一嘴:ssh 172.16.1.31 uptime <-- 能夠不用登錄到遠程主機,就能夠直接查看遠程主機信息

 

 

1.3.3 ssh配置文件信息說明

 

Port 52113                     <- 修改ssh服務端口號信息            
ListenAddress 0.0.0.0        <- 主要做用提高網絡鏈接安全性
PS:監聽地址只能配置爲服務器網卡上擁有的地址    
PermitRootLogin no             <- 是否容許root用戶遠程登陸    
PermitEmptyPasswords no         <- 是否容許空密碼
UseDNS no                    <- 是否進行DNS反向解析(提高ssh遠程鏈接效率)                     
GSSAPIAuthentication no         <- 是否進行遠程GSSAPI認證(提高ssh遠程鏈接效率)

 

 

1.3.4 ssh免交互的鏈接

照上面的方法進行操做一遍就會 以爲哇ssh祕鑰鏈接好簡單啊,可是細心的小夥伴就會發現,無論是建立密鑰對仍是進行ssh鏈接,第一次都須要手動輸入yes 和回車啊,有小夥伴就會說,沒事啊

就我就手動敲敲就好了啊。嗯...........沒錯你一兩臺均可以手動敲下不礙事,可是咱們企業實際生產環境須要管理的服務器中每每都是上百臺 可能還會更多。那你咋辦乾瞪眼麼.......................................

好啦 下面就讓咱們介紹下如何免交互吧:

1)首先要免交互式的建立密鑰對

ssh-keygen -t dsa
影響免交互建立密鑰對建立因素:
1)須要指定私鑰存放路徑
-f /root/.ssh/id_dsa
2)須要進行私鑰文件密碼設定
-N/-P 
-N ""/-P ""

免交互建立密鑰對方法:

ssh-keygen -t dsa -f /root/.ssh/id_dsa -N "" # 通常咱們不設文件密碼啦

 

 

 

公鑰分發:

執行sshpass 命令

  -p參數:被管理端主機用戶登陸密碼

  -o StrictHostKeyChecking=no  :須要有確認鏈接過程,須要輸入yes/no

 sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.31" #直接這樣就OK了

 

批量分發公鑰:

 寫個lowB腳本吧

#!/bin/bash
##########ssh祕鑰鏈接##########

ips=(41 31 7) #定義須要管理的主機地址,ip建議寫在文件裏 循環讀取就ok了
rm -f /root/.ssh/id_dsa*
ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""
for ip in ${ips[@]}
do
    sshpass -p123321 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip"

done

 最後給腳本添加個執行權限 chmod +x 就能夠快了的玩耍啦!!!!!

 

 

2、部署ansible

2.1 部署安裝

前戲終於完啦哈 ,進入今天的主角啦!!

 這個就超級簡單啦,直接yum安裝

yum install -y ansible

 

 ansible是沒有客戶端的,可是呢有爲了防止selinux的干擾咱們仍是要安裝下 libselinux-python這個包

 直接在受控主機上上安裝:

yum install -y libselinux-python

 

 

2.2 編輯ansible配置文件

vim /etc/ansible/hosts

[自定義模塊名]
172.16.1.7   ##添加受控主機的ip
172.16.1.31
172.16.1.41

 能夠根據本身的業務分別自定義模塊

 

測試一下:

ansible web -m command -a "hostname"

 沒問題啦!!

 

3、ansible模塊介紹

模塊比較多哈 這裏只簡單的介紹下幾個經常使用的模塊,學習ansible必定要本身去看官方文檔哈!!

官網地址:https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

ansible模塊執行語法:

ansible 管理主機信息或者主機組信息  -m 模塊名稱 -a 相關模塊參數

  主機信息:遠程主機IP地址 遠程主機組名稱 遠程全部主機all
  -m 指定相應模塊
  -a 利用模塊中某些參數功能

 

3.1 命令類型模塊:

3.1.1 command

參數:chdir---在執行某個命令前,先切換目錄

參數:creates---判斷一個文件是否存在,若是已經存在了,後面的命令就不會執行

 

 參數:removes---判斷一個文件是否存在,若是不存在,後面的命令就不會執行

 

 

 

 3.1.2  shell模塊(萬能模塊)

 

參數:chdir---在執行莫個命令前,先切換目錄
參數:creates---判斷一個文件是否存在,若是已經存在了,後面的命令就不會執行
參數:removes---判斷一個文件是否存在,若是不存在,後面的命令就不會執行
參數(必需要有的):free_form---表示執行command模塊時,必需要有linux合法命令信息

 

 

說明:shell模塊能夠知足command模塊全部功能,而且能夠支持識別特殊字符信息 < > | ; 

3.2 文件類型模塊

3.2.1 copy----複製模塊

參數:backup---將管理主機上數據信息進行遠程備份

 參數:src---定義要推送數據信息
 參數:dest---定義將數據推送到遠程主機什麼目錄中

   參數:owner---設置複製後的文件屬主權限
   參數:group---設置複製後的文件屬組權限
   參數:mode---設置複製後的文件權限(600 755)

 

 

 3.2.2 file----文件屬性修改/目錄建立/文件建立

參數:owner---設置複製後的文件屬主權限
參數:group---設置複製後的文件屬組權限
參數:mode---設置複製後的文件權限(600 755)
參數:state---用於指定建立目錄或文件
        =touch #建立文件
        =directory

 

 

 

 

 3.3 包管理模塊類型

 3.3.1 yum---安裝軟件包模塊

name:執行要安裝軟件的名稱,以及軟件的版本
state:installed安裝  absent(卸載)
[root@m01 ~]# ansible backup -m yum -a "name=iftop state=installed"
[root@m01 ~]# ansible backup -m yum -a "name=iftop state=absent"

 

 

3.4 系統模塊類型

3.4.1 service---管理服務狀態模塊

參數:

name: 指定要管理的服務名稱(管理的服務必定在chkconfig中能夠看到)
state:stopped started restarted reloaded
enabled:yes表示服務開機自啓動 no表示服務開機不要自動啓動
ansible 172.16.1.41 -m service -a "name=crond state=started enabled=yes"

 

 

3.4.2 cron---定時任務模塊

* * * * *  /bin/sh /server/scripts/test.sh &>/dev/null

minute=0-59 * */n , -   hour  day  month weekday  job='/bin/sh /server/scripts/test.sh &>/dev/null'

 

 添加定時任務:

ansible 172.16.1.41 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
ansible 172.16.1.41 -m cron -a "name=test minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"

 

 刪除定時任務:

ansible 172.16.1.41 -m cron -a "name=oldboy02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' state=absent"
ansible 172.16.1.41 -m cron -a "name=oldboy01 state=absent"

 

 註釋定時任務:

ansible 172.16.1.41 -m cron -a "name=oldboy01 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=yes"
ansible 172.16.1.41 -m cron -a "name=oldboy01 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=no"

 

 

 

4. 總結ansible顏色信息

綠色:查看遠程主機信息,不會對遠程主機系統作任何修改
紅色:執行操做出現異常錯誤
黃色:對遠程主機系統進行修改操做
粉色:警告或者忠告信息

 

 

5. ansible軟件劇本

5.1 yaml編寫規範:

官方文檔:https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html

遵循pyyaml原則

①. - 用法說明,表示列表顯示的內容
    水果信息:
      - 蘋果
      - 香蕉
      - 西瓜
②. : 用法說明:
    姓名: 張三
    性別: 男
    人員信息:
    - 運維人員: sa
    - 開發人員: dev
    - 存儲人員: dba
③. 空格 用法說明:
    對內容進行分級時,須要有兩個空格表示分級
    軟件安裝步驟:
      - 服務端安裝步驟:
        第一個里程碑: 檢查軟件是否安裝
        第二個里程碑: 編寫配置文件內容
      - 客戶端安裝步驟:
    補充:必須使用空格分隔ansible劇本級別,必定不要使用tab鍵進行分割

 

 

5.2 執行腳本方法

ansible-playbook /etc/ansible/ansible-playbook/test.yaml
ansible-playbook -C /etc/ansible/ansible-playbook/test.yaml
相關文章
相關標籤/搜索