1. 程式人生 > >自動化運維之Ansible安裝與模塊應用

自動化運維之Ansible安裝與模塊應用

text cto ecb 命令 輸入密碼 插件 conn firewall 統一

自動化運維之Ansible

Ansible概述

由於互聯網快速展導致產品更新換代速度逐漸加快,運維人員每天都要進行大量維護操作,人就按照傳統方式進行維護會使工作效率低下,只是,部署自動化運維就盡可能安全,高校的完成工作

一般會把自動化運維工具劃分為兩類

(一)需要使用代理工具的,也就是基於專用的Agent程序完成管理功能,如:Puppet、Func、Zabbix等
(二)不需要配置代理工具,可以直接基於SSH服務來管理完成,如:Ansible,Fabric等

下面介紹幾款空能和類似的自動化運維工具

  • Puppet
    Puppet基於Ruby開發,支持Linux、UNIX、Windows平臺,可以針對用戶、系統服務、配置文件、軟件包等進行管裏,有很強的擴展性、但遠程執行命令相對較弱
  • SaltStack
    SaltStack基於Python開發,允許管理員對多個操作系統創建統一的管理系統,比Puppet更輕量級
  • Ansible
    Ansible基於Pythpn開發,集合了眾多優秀運維工具的優點,實現批量運行命令、部署程序、配置系統等功能。默認通過SSH協議進行遠程命令執行或下發配置,無需部署任何客戶端代理軟件,從而使得自動化環境部署變得更加簡單

Ansible核心組件

Ansilbe基本結構框架如下圖:
---插圖---

可以看出Ansible由六個部分組成

  • Ansible core核芯引擎
  • Host inventory主機清單:用來定義Ansible所管理的主機,默認在Ansible的hosts配置文件中定義被管理主機,同時也支持自定義狀態主機清單和制定其他配置文件位置
  • Connection plugins連接插件:負責和被管理主機實現通信,除支持使用SSH連接被管理主機外,還支持其他連接方式
  • Playbooks (yam1,jinja2)劇本:用來定義Ansible任務配置文件,即將多個任務定義在同一個劇本中有Ansible執行,可以自由控制主機針對多臺被管理主機同時運行多個任務
  • Core modules核心模塊:是Ansible自帶模塊,使用這些模將資源分配到被管理主機
  • Custom modules自定義模塊:用完成模塊功能的補充,可借助相關插件完成記錄日誌、發送郵件等功能

部署Ansible服務

案例環境

角色 主機名 IP地址 組名
控制主機 n1 192.168.179.134
被管理主機 n2 192.168.179.135 mysql
被管理主機 n3 192.168.179.141 hostserver

(1)安裝Ansible

[root@localhost ~]# yum install -y epel-release #//安裝epel源
[root@localhost ~]# yum install ansible -y #//安裝ansible
[root@localhost ~]# ansible --version #//查看版本 
ansible 2.6.2 
[root@localhost ~]# yum install tree -y #//安裝樹狀結構工具
[root@localhost ~]# tree /etc/ansible #//樹狀結構展示文件夾
/etc/ansible/
├── ansible.cfg   #ansible的配置文件
├── hosts         #ansible的主倉庫,用於存儲需要管理的遠程主機的相關信息
└── roles         #角色

(2)配置ansible

[root@localhost ~]# vim /etc/ansible/hosts  #////配置主機清單
[mysql]
192.168.179.135

[hostserver]
192.168.179.141

(3)配置密鑰

#關閉防火墻<三個都要關>
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

[root@localhost ~]# ssh-keygen -t rsa
Enter file in which to save the key (/root/.ssh/id_rsa):[回車默認] #輸入保存密鑰的文件(/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):  #//輸入密碼(無密碼):

Enter same passphrase again:  再次輸入相同的密碼:

The key‘s randomart image is:
+---[RSA 2048]----+
|    .=+++B++     |
|    ..o * oo .   |
|  .      *  +    |
| o      . *  E   |
|o       So +     |
|.= ..  ..+  .    |
|..*oo o o.       |
| oo= + =.        |
|  ++= .o+        |
+----[SHA256]-----+

[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa [email protected]  #//遠程復制
Are you sure you want to continue connecting (yes/no)? yes  #//是否確認連接
#/usr/bin/ssh-copy-id: INFO:嘗試使用新鍵登錄,以過濾任何已經安裝的鍵
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
#/usr/bin/ssh-copy-id: INFO: 1 key(s)仍然需要安裝——如果您現在收到提示,它將安裝新的key
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

[email protected]‘s password:[輸入root密碼] 

Number of key(s) added: 1 #新增鍵數:1

#現在嘗試登錄到機器,:“ssh [email protected]”並且檢查確保只添加了你想要的密鑰。
Now try logging into the machine, with:   "ssh ‘[email protected]‘"
and check to make sure that only the key(s) you wanted were added.

到此為止Ansible環境部署就算完成了


Ansible命令模塊

(1)commoand模塊

命令格式:ansible [主機] [-m 模塊] [-a args]

ansible-doc -l     //列出所有已安裝的模塊 註:按q退出

ansible-doc -s yum   //-s列出yum模塊描述信息和操作動作

--command模塊操作,下圖:

1.1:指定192.168.179.135執行查看日期datwe操作
技術分享圖片

-----------------密鑰面交互設置------------------------
[root@localhost ~]# ssh-agent bash
[root@localhost ~]# ssh-add
Enter passphrase for /root/.ssh/id_rsa: 
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
----------------------------------------------

1.2:ansible hostserver -m command -a ‘date‘ //指定分類執行date
技術分享圖片

ansible mysql -m command -a ‘date‘
技術分享圖片

1.3:ansible all -m command -a ‘date‘ 技術分享圖片

1.4:如果不加-m 則默認運行command模塊
技術分享圖片

--cron模塊

1:cron模塊,如下圖:
兩種狀態(state):present表示添加(可以省略),absent表示移除。

1.1:ansible-doc -s cron //查看cron模塊信息
技術分享圖片

1.2:添加計劃性任務
技術分享圖片

查看任務
技術分享圖片

1.3:移除計劃任務,假如該計劃任務沒有取名字,name=None即可
技術分享圖片

--user模塊

1:user模塊操作,如下圖:

user模塊是請求的是useradd, userdel, usermod三個指令

ansible-doc -s user #查看模塊信息

1.1:創建用戶test01並查看有沒有添加test01這個用戶
技術分享圖片

1.2:刪除用戶test01
技術分享圖片

--group模塊

group模塊請求的是groupadd, groupdel, groupmod 三個指令。

1:查看模塊信息
ansible-doc -s group

1.1:創建名為mysql的用戶gid是306 system=yes是添加到系統用戶
技術分享圖片

創建一個test01的用戶,添加到mysql組,添加到系統用戶,查看添加的用戶
技術分享圖片

1.2:查看組:
ansible mysql -a ‘tail /etc/group‘
技術分享圖片

--copy模塊

查看模塊信息:
ansible-doc -s copy
1.在mysql主機上操作復制etc低下fstab到opt低下名為fstab.back 添加到root組
技術分享圖片

--file模塊

1:創建名為mysql的用戶並指定用戶和組

    ansible mysql -m user -a ‘name=mysql system=yes‘
ansible mysql -m group -a ‘name=mysql system=yes‘

技術分享圖片

    //修改文件的屬主屬組權限等

技術分享圖片

  //設置/opt/fstab.link為/opt/fstab.back的鏈接文件

技術分享圖片

          //刪除一個文件

技術分享圖片

      創建一個文件

技術分享圖片

      創建目錄

技術分享圖片

--ping模塊

ansible all -m ping
技術分享圖片

--service模塊

ansible-doc -s service #//查看模塊

#在hostserver主機上安裝httpd服務

[root@localhost ~]# yum install httpd 
#//啟動httpd服務
ansible hostserver -m service -a ‘enabled=true name=httpd state=started‘

技術分享圖片

#//在hostserver主機上查看是否開啟
systemctl status httpd

技術分享圖片

script模塊

ansible-doc -s script #//查看模塊信息

技術分享圖片

--yum模塊

#//查看模塊信息

    ansible-doc -s yum
ansible mysql -m yum -a ‘name=zsh‘  

技術分享圖片

去mysql主機查看zsh

技術分享圖片

--setup模塊

    #//查看模=模塊信息
    ansible-doc -s setup
ansible mysql -m setup           
//獲取mysql組主機的facts信息

技術分享圖片

自動化運維之Ansible安裝與模塊應用