1. 程式人生 > >自動化運維之Ansible模塊篇

自動化運維之Ansible模塊篇

block oss 文件的 分享 wal efault plugin 其中 自動

Ansible 簡介

一般會把自動化運維工具劃分為兩類:一類是是需要使用代理工具的,也是就基於專用的Agent程序來王朝管理功能,如: Puppet、Func、Zabbix 等:另外一類是不需要代理工具的,可以直接基於SSH 服務來完成管理功能,如Ansible、Fabric 等···

Ansible作為一個python寫的自動化部署更有自己的一些優勢, 首先就是agentless, 無需在Linux client安裝任何服務即可無縫連接Linux default ssh端口進行部署(windows需要安裝winrm 開啟ssh服務)。

ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。

ansible是基於模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:

(1)、連接插件connection plugins:負責和被監控端實現通信;

(2)、host inventory:指定操作的主機,是一個配置文件裏面定義監控的主機;

(3)、各種模塊核心模塊、command模塊、自定義模塊;

(4)、借助於插件完成記錄日誌郵件等功能;

(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性運行多個任務。

模塊

  • Core modules 合興模塊:是Absible 自帶的模塊,使用這也模塊將資源分配發送到被管理主機,是其執行的頂任務。或匹配特定的狀態
  • Custom modules 自定義模塊:用於完成模塊功能的補充。可借助相關插件完成記錄發送郵件功能

    安裝部署

角色 IP 組名 軟件
控制主機 192.168.100.20 epel-release //安裝epel源ansible
被控制主機 192.168.100.21 webaervers
被控制主機 192.168.100.22 mysql
1. 安裝epel-release  //安裝epel源            
yum install -y epel-release  //安裝epel源
yum install ansible -y

2. 在所有服務器上關閉防火和增強型安全功能

systemctl stop firewalld.service  # 關閉防火墻
setenforce 0  #關閉增強型安全功能

3. 配置主機清單

cd /etc/ansible
vi hosts       #配置主機清單 可自行定義 
[webserver]
192.168.100.21
[mysql]
192.168.100.22

4. 產生公鑰個私鑰實現免交互代理

ssh-keygen -t rsa  #使用 ssh-keygen -t rsa命令,生成密鑰文件
ssh-copy-id [email protected]  #將公鑰文件傳輸的遠程機器,並生效
ssh-copy-id [email protected]
免交互代理--------------
ssh-agent bash  #來保存公鑰身份驗證所使用的私鑰的程序
ssh-add         #ssh-add命令是把專用密鑰添加到ssh-agent的高速緩存中。

技術分享圖片
技術分享圖片

技術分享圖片
技術分享圖片

command模塊

command模塊   #Ansibler 管理工具使用-m 選項來指定使用模塊,默認使用command 模塊,即-m省略時會運行此模塊,用於被管理主機上運行命令
命令格式:ansible [主機] [-m 模塊] [-a args]
ansible-doc -l     //列出所有已安裝的模塊 註:按q退出
ansible-doc -s yum   //-s列出yum模塊描述信息和操作動作

(1) 使用IP地址指定運行主機

ansible 192.168.100.21 -m command -a ‘date‘ #查看指定主機當前時間

(2) 使用被管理主機的分類運行

ansible webservers -m command -a ‘date‘ #查詢分類中所有的IP地址主機當前時間

(3) 在所有主機清單中的所有主機

ansible all -m command -a ‘date‘  #所有hosts主機執行date命令

(4) 若省略-m 選項,默認運行command模塊

ansible all -a ‘tail-1 /etc/passwd‘ #顯示所有主機中/etc/passed/最後一行

技術分享圖片

2. cron 模塊

Ansible中的cron模塊用於定義任務計劃。
其中有兩種狀態(state):present表示天機(省略狀態時默認使用),absent表示移除

(1) 添加任務計劃

ansible mysql -m cron -a ‘minute="*/1" job="/bin/echo heihei" name="test cron job"‘ #一分鐘顯示一次heihei

(2) 移除計劃性任務

ansible webserver -m cron -a ‘name="test cron job" state=absent‘

技術分享圖片
技術分享圖片

use 模塊

  • Ansible 中的user模塊用於創建新用戶和更改,刪除已存在的用戶。體重name選項用來指明創建用戶名稱
創建用戶 ,刪除用戶,
ansible mysql -m user -a ‘name="wangwu"‘  #指定別名主機(組)創建‘wangwu‘
ansible mysql -m command -a ‘tail /etc/passwd‘ #顯示末尾10行
ansible mysql -m user -a ‘name="wangwu" state=absent‘    #刪除用戶wangwu

group 模塊

  • Ansible中group模塊用於對用戶組進行管理
    創建mysql 組 將mysql用戶添加到mysql組中
ansible mysql -m group -a ‘name=mysql gid=306 system=yes‘
#添加mysql組並且qid=306 添加到系統組中

ansible mysql -a ‘tail /etc/group‘
#查看mysql服務器中組
ansible mysql -m user -a ‘name=ccc uid=306 system=yes group=mysql‘
#創建一個用戶為ccc並且指定uid號 添加到mysql組中
ansible mysql -a ‘tail /etc/passwd‘

技術分享圖片

copy模塊

  • Ansible 中的copy 模塊用於實現文件復制和批量下發文件,其中使用src來定義本地源文件路徑,使用dest敵營別管理主機文件路徑,使用content 則是通過指定信息內容來生成目標文件
    將本地文件/etc/fstab 復制到被管理主機上,將所有這設為root 權限設置為640.
    ansible mysql -m copy -a ‘src=/etc/fstab dest=/opt/fstab.back owner=root mode=640‘
    #復制自動自動掛在主配置文件 復制到opt/目錄小並給與640權限
    ansible mysql -a ‘ls -l /opt‘
    #查看目錄
    ansible mysql -a ‘cat /opt/fstab.back‘
    #查看etc下有關於系統管理員多用戶管理文件
    ansible mysql -m copy -a ‘content="hello heihei!"
    dest=/opt/fstab.back‘  //將hello heihei!寫入/opt/fstab.back
    ansible mysql -a ‘cat /opt/fstab.back‘ 

    技術分享圖片
    技術分享圖片
    技術分享圖片

    file模塊

  • Ansible 中使用file 模塊來設置文件屬性。其中是使用path指定文件路徑,使用src 定義原味雞路徑,使用name或dest 來替換創建文件的符號連接
    將文件的屬主為mysql 所屬為mysql 權限為644 並創建軟連接文件
    ansible mysql -m user -a ‘name=mysql system=yes‘ #屬主
    ansible mysql -m group -a ‘name=mysql system=yes‘#屬組
    ansible mysql -m file -a ‘owner=mysql group=mysql mode=644 path=/opt/fstab.back‘    #修改文件的屬主屬組權限等
    ansible mysql -m file -a ‘path=/opt/fstab.link src=/opt/fstab.back state=link‘      #設置/opt/fstab.link為/opt/fstab.back的鏈接文件
    ansible mysql -m file -a "path=/opt/fstab.back state=absent"               #刪除一個文件
    ansible mysql -m file -a "path=/opt/test state=touch"             #創建一個文件

    技術分享圖片
    技術分享圖片

    ping模塊

  • 在Ansible 中使用ping 模塊來檢測指定主機的連通性
    ansible all -m ping  #ping

    技術分享圖片

    yum 模塊

  • Ansible 中模塊負責在被管理主機上安裝與卸載軟件包,但是需要提前在每個節點配置YUM倉庫,其中使用name指定要安裝軟件包,還需要帶上軟件的版本號,否則安裝最新的軟件包;使用state指定安裝包的狀態,present,latest 用來表示安裝,absentb並表示卸載。
  • 安裝httpd 卸載httpd
    ansible mysql -m yum -a ‘name=httpd‘           #yum安裝httpd
    ansible mysql -m yum -a ‘name=httpd state=absent‘     #卸載httpd

    技術分享圖片
    技術分享圖片

    service模塊

  • 在Ansible 中使用service 模塊來控制管理服務的運行狀態,其中,使用enadled表示是否開機自動啟動,取值為true或者false;使用name定義服務名稱;使用state指定服務狀態,取值分別為 started stoped restarted
    ansible webservers -m yum -a ‘name=httpd‘ #指定組安裝 httpd 服務
    ansible webservers -a ‘systemctl status httpd‘ #擦看服務
    ansible mysql -m service -a‘name=httpd enabled=true state=started‘  //開機自啟動
    systemctl list-unit-files | grep httpd   檢測httpd是否開機自啟動  enabled  為啟動 disabled是開機不啟動

    技術分享圖片
    技術分享圖片

    shell模塊

  • Ansible 中的shell模塊可以在被管理主機上運行命令,並支持像管道符號復雜命令
    ------shell模塊-----
    ansible ccc -m shell -a ‘echo abc123|passwd --stdin ccc‘       #創建用戶使用無交互模式給用戶設置密碼

    技術分享圖片

    script模塊

  • Ansible 中的script 模塊可以將本地腳本復制到被管理主機上運行,需要只要的是使用絕對路徑
ansible-doc -s script
vi test.sh
#!/bin/bash
echo "hello ansible from script"> /opt/script.txt

chmod +x test.sh
ansible mysql -m script -a ‘test.sh‘
mysql主機上查看 cat /opt/script.txt

技術分享圖片

setup模塊

  • 在Ancible 中使用setup模塊收集、產看被管理主機的facts(facts 是Ansible 采集被管理主機設備信息的一個功能)。每個被管理主機接受並運行管理命令之前,都會將自己相關信息(操作信息版本IP地址等)發送給主機
    ansible mysql -m setup           //獲取mysql組主機的facts信息

    技術分享圖片

自動化運維之Ansible模塊篇