天天看點

自動化運維Ansible批量部署服務+shell腳本批量推送公鑰一、概述分析二、Ansible安裝----------------------驗證-------------------此時就可以進行ansible批量部署操作

一、概述分析

由于網際網路的快速發展導緻産品更新換代速度逐漸加快,運維人員每天都要進行

大量的維護操作,仍舊按照傳統方式進行維護會使得工作效率低下。這時,部署自動

化運維就可以盡可能安全、高效地完成這些工作。

一般會把自動化運維工具劃分為兩類:一類是需要使用代理工具的,也就是基于

專用的ABem程式來完成管理功能,如: Puppet、Func、 Zabbix等;另外一類是不需

要配置代理工具的,可以直接基于SSH服務來完成管理功能,如: Ansible、 Fabric等。

-

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

1. Puppet

Pup基于Rpy開發,支援Linx、UNDX、 Windows平台,可以針對使用者、系統服務

配置檔案、軟體包等進行管理,有很強的擴充性,但遠端執行指令相對較弱。

2. SaltStack

CallStack基于 Python開發,允許管理者對多個作業系統建立統一的管理系統,比

pet更輕量級

工具 開發語言 結構 配置檔案 格式 運作任務
Ansible Python YAML 支援指令行
SaltStack C/S
Puppet Ruby Ruby文法格式 通過子產品實作

Ansible基于 Python開發,集合了衆多優秀運維工具的優點,實作了批量運作指令

部署程式、配置系統等功能。預設通過SSH協定進行遠端指令執行或下發配置,無需

部署任何用戶端代理軟體,進而使得自動化環境部署變得更加簡單。可同時支援多台

主機并行管理,使得管理主機更加便捷。

官方的title是“Ansible is Simple IT Automation”——簡單的自動化IT工具。           

Ansible通過SSH協定實作遠端節點和管理節點之間的通信。理論上說,隻要管理者通過ssh登入到一台遠端主機上能做的操作,Ansible都可以做到。

Ansible跟其他IT自動化技術的差別在于其關注點并非配置管理、應用部署或IT流程工作流,而是提供一個統一的界面來協調所有的IT自動化功能,是以Ansible的系統更加易用,部署更快。

Ansible可以讓使用者避免編寫腳本或代碼來管理應用,同時還能搭建工作流實作IT任務的自動化執行。IT自動化可以降低技術門檻及對傳統IT的依賴,進而加快項目的傳遞速度。

Ansible基本架構由六個部分組成:

Ansible core 核心引擎。

Host inventory 主機清單:用來定義Ansible 所管理的主機,預設是在Ansible的host配置檔案中定義被管理主機,同時也支援自定義動态主機清單和指定其他配置檔案的位置。

Connection plugins連接配接插件:負責和被管理主機實作通信。除支援使用ssh連接配接被管理主機外, Ansible還支援其他的連接配接方式,是以需要有連接配接插件将各個主機用連接配接插件連接配接到 Ansible。

Playbooks(yaml, injaz2)劇本:用來集中定義 Ansible任務的配置檔案,即将多個任務定義在一個劇本中由 Ansible自動執行,可以由控制主機針對多台被管理主機同時運作多個任務。

Core modules核心子產品:是 Ansible自帶的子產品,使用這些子產品将資源分發到被管理主機,使其執行特定任務或比對特定的狀态。

Custom modules自定義子產品:用于完成子產品功能的補充,可借助相關插件完成記錄日志、發送郵件等功能。

ansible功能特性:

  • 應用代碼自動化部署
  • 系統管理配置自動化
  • 支援持續傳遞自動化
  • 支援雲計算,大資料平台環境
  • 輕量級,無序在用戶端安裝agent,更新時隻需在控制機上進行更行即可
  • 批量任務執行可以寫成腳本,不用分發到遠端就可以執行
  • 支援非root使用者管理操作,支援sudo
  • 使用python編寫,維護更簡單

二、Ansible安裝

Ansible 自動化運維環境由控制主機與被管理主機組成,由于Ansible是基于SSH協定進行通信的,是以控制主機安裝Ansible軟體後不需要重新開機或運作任何程式,被管理主機也不需要安裝和運作任何代理程式。

實驗安裝環境:

角色 主機名 IP位址 組名
控制主機 01 192.168.100.129
被管理主機 02 192.168.100.128 webserver
03 192.168.100.130 mysql

三台主機關閉防火牆:

[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0           

安裝步驟:

控制主機安裝ansible并生成密鑰對批量發送給被管理主機

1.yum安裝環境包與ansible:

yum install epel-release -y
yum install ansible –y           

2.檢視ansible版本

[root@01 ~]# ansible  --version           
自動化運維Ansible批量部署服務+shell腳本批量推送公鑰一、概述分析二、Ansible安裝----------------------驗證-------------------此時就可以進行ansible批量部署操作

3.yum安裝完成後會生成3個檔案

[root@01 ~]# cd /etc/ansible/
[root@01 ansible]# ls           
自動化運維Ansible批量部署服務+shell腳本批量推送公鑰一、概述分析二、Ansible安裝----------------------驗證-------------------此時就可以進行ansible批量部署操作

4.配置被管理端主機IP清單

[root@01 ansible]# vim /etc/ansible/hosts                     //配置主機清單           
自動化運維Ansible批量部署服務+shell腳本批量推送公鑰一、概述分析二、Ansible安裝----------------------驗證-------------------此時就可以進行ansible批量部署操作

5.雖然ansible的配置檔案已經設定完成被管理端的IP位址,但是因為ansible是基于ssh協定,是以還需要配置密鑰對驗證

[root@01 ~]# ssh-keygen -t rsa           //生成密鑰對           
自動化運維Ansible批量部署服務+shell腳本批量推送公鑰一、概述分析二、Ansible安裝----------------------驗證-------------------此時就可以進行ansible批量部署操作
自動化運維Ansible批量部署服務+shell腳本批量推送公鑰一、概述分析二、Ansible安裝----------------------驗證-------------------此時就可以進行ansible批量部署操作

6.ssh協定免互動代理

[root@01 ~]# ssh-agent bash
[root@01 ~]# ssh-add           
自動化運維Ansible批量部署服務+shell腳本批量推送公鑰一、概述分析二、Ansible安裝----------------------驗證-------------------此時就可以進行ansible批量部署操作

shell腳本批量發送公鑰

(1).下載下傳安裝expect

[root@01 .ssh]# yum install expect -y                   //yum安裝expect           

(2). ping通所有可互通的主機

[root@01 .ssh]# ansible all -m ping       //使用ansible中的ping子產品           
自動化運維Ansible批量部署服務+shell腳本批量推送公鑰一、概述分析二、Ansible安裝----------------------驗證-------------------此時就可以進行ansible批量部署操作

ansible是基于SSH協定,是以可以ping通的主機儲存在.ssh/known_hosts的檔案當中。當然就算不ping通也可以用shell腳本實作批量推送公鑰。

在最新版本ansible 2.7.0中,在沒有推送公鑰形成密鑰對的情況下,無法使用ping子產品ping通的情況下,很難用authorized_key子產品去推送公鑰的。是以我更改了下shell腳本,這樣就可以在無法用ping子產品ping通的情況下直接實作批量推送公鑰形成密鑰對。

[root@01 ~]# cd ~/.ssh/
[root@01 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@01 .ssh]# vim known_hosts                   //檢視下已經記錄在SSH協定的主機,不做任何修改操作           

(2).編寫shell腳本實作批量推送公鑰

[root@01 .ssh]# vim ~/.ssh/pushssh.sh            

腳本如下:

#!/bin/sh
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
host1=`cat /etc/ansible/hosts | awk -F " " '{print $1}' | grep '^192'`
#在生産情況中,有很多種獲得IP的方法,本腳本最重要的就是獲得IP位址,腳本隻是提供一個思路。

for i in $host1;

do

command1="scp ~/.ssh/authorized_keys root@$i:~/.ssh/authorized_keys"

password="123123" 

/usr/bin/expect -c "
        spawn ssh-copy-id root@$i 
        expect {
        \"*password\" { send \"$password\r\"; exp_continue }
        }     
expect eof"

done

#編寫腳本完成後儲存退出

[root@01 .ssh]# sh pushssh.sh        //執行腳本
           

PS:想要執行這個腳本,首先需要下載下傳安裝expect,同時被管理端主機的密碼需要是一緻的。

----------------------驗證-------------------

檢視下腳本是否執行成功:

此時就可以進行ansible批量部署操作

[root@01 ~]# ansible all -m command -a 'date'           

繼續閱讀