自動化運維之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安裝與模塊應用