Ansible實踐(一):初識Ansible自動化運維工具及主機清單配置

環境聲明

  • 阿里雲ECS Centos7.7.1908 ×1
  • Azure虛擬機 Centos7.7.1908 ×1
  • AwsEC2 Centos7.7.1908 ×1
  • Vmware Centos7虛擬機 Centos7.7.1908 ×1

構建自己的Server集羣

構建屬於自己的服務器集羣,聽起來似乎很遙不可及,需要巨大成本的樣子。但其實,將幾臺服務器聯合起來管理使用,已經可以稱得上一個小集羣了.
方法一、作爲學生黨,可以藉助BAT三個國內雲服務商提供的學生主機各買一臺,在40元以內的成本構建起屬於自己的"服務集羣",由於樓主本身用於AWS和Azure的一年優惠體驗,所以只採購了阿里雲的學生主機
方法二、另一種方法在Vmware創建多個虛擬主機,同時運行,也可以作爲"服務集羣 "。前提需要您的物理主機配置過關,否則同時開啓多個虛擬主機,物理主機承受的工作負載很大。如果您擁有兩臺或以上個人主機,可以考慮將一臺電腦部署爲Esxi虛擬化平臺,再創建多個虛擬機,使用另一臺物理主機進行管理。本來也想使用Esxi的,只可惜樓主在學校的那臺聯想服務器忘了做內網穿透。

本文中Server集羣指代的是虛擬主機服務集羣,Machine集羣指代的是物理主機集羣。由於公有云服務商提供的主機本質上也屬於虛擬主機,故本文實踐和討論的是Server集羣。

認識Ansible

Ansible是一款基於Python開發的自動化運維工具,能夠實現批量系統配置、批量程序部署、批量運行命令等
ANsible基於模塊工作,常用模塊包括shell模塊、複製模塊、用戶模塊、軟件包模塊、服務模塊、文件模塊、劇本模塊等待
Ansible官網: https://docs.ansible.com/

安裝Ansible模塊及基本配置

我們無需爲集羣中的每臺服務器部署Ansible,只需爲一臺主機安裝Ansible作爲Ansible服務器,其餘作爲Ansible客戶機即可。爲了節約雲服務器資源,本文使用一臺Vmware主機作爲Ansible服務器。下面開始安裝。

  • 安裝紅帽拓展源
	yum install -y epel-release
  • 安裝Ansible
	yum install  -y ansible

安裝完成後,爲了方便其他Ansible客戶機的管理,在Ansible服務器的本地解析文件中添加相關信息

	vim /etc/hosts 

爲每臺客戶機配置易於記憶的域名
本文將三臺客戶機分別命名爲
aliserver、awsserver、azuserver
在配置完成後,您可以使用

	ping [hostname]  

檢測是否可以正確解析

Ansible主機清單配置

/etc/ansible/hosts是Ansible的主機清單文件,包含連接Ansible客戶機的基本信息。注意,Ansible服務器和客戶機的通信是基於ssh的。接下來,由淺入深配置主機清單文件。

  • 僅添加客戶機
	vim /etc/ansible/hosts

在末尾加入`

	[ip] aliserver
	[ip] awsserver
	[ip] azuserver

保存退出後,輸入

	ansible aliserver -m ping -o -u root -k

輸入密碼後以及同意ssh主機密鑰檢測的安全提示後,得到如下提示,證明測試連通性成功

`aliserver ' SUCCESS => {
"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},
"changed": false, "ping": "pong"}`

另外兩臺客戶機的測試同上測試連通性語句參數說明
aliserver 目標主機或主機組
-m 指定模塊ping
ping 模塊
-u 用戶
-k 使用密碼

  • 添加組
    編輯 /etc/hosts文件在三臺主機的上一行,添加[server]字段,即定義了一個客戶機組再次使用測試連通性語句`
	ansible server -m ping -o -u 

依此輸入密碼即可測試組中所有主機的連通性

  • 添加主機的連接相關信息
    如果不想每次測試連通性都輸入一串參數,您可以在主機清單文件中添加主機配置信息,在每一行主機後面,以[參數]=參數值,空格作爲參數分隔符的形式添加連接信息。例如
	aliserver  ansible_ssh_user='root'  ansible_ssh_pass='xxx'`

常見可選參數
在這裏插入圖片描述

  • 利用變量簡化信息的填寫
    在您命名的server集羣組中,如果它們的連接信息具有一致的部分,您可以使用Vars變量將參數簡化。例如在定義的server組中,具有相同的端口號,用戶,可以使用以下格式同一組中的主機一次性配置參數
	[server]``host[1:4]   #主機名的填寫支持類似正則的簡化填寫  
	[server:vars]
	ansible_ssh_user='root'
	ansible_ssh_pass='xxx'
  • 分組組合
    分組不僅支持將主機劃分至某個組,同時支持將組劃分至一個組中,作爲子組,方便集羣機器的靈活管理。爲了將組與主機區分,您需要使用children聲明。
	[server1]
	host[1:2]
	
	[server2]
	host[3:4]
	
	[server:children]
	server1 
	server2
  • 指定清單文件,方便主機清單的跨設備遷移使用
    使用ansible語句操作時默認的主機清單文件是/etc/ansible/hosts。爲了方便清單文件的重複和跨設備使用,您可以在主機或組參數前添加主機清單文件參數。例如存在主機清單文件hostlist,,可以使用以下語句進行操作`
	ansible -i hostlist host1 -m ping -o

總結

  • Ansible作爲運維自動化工具,在僅使用一臺主機作爲ansible服務器的情況下,實現客戶機的批量化管理和部署。
  • Ansible服務器與客戶機之間的通信基於ssh協議,請確保服務器sshd服務的正常,ssh端口號,防火牆與雲服務商安全組的配置。另外,使用密碼的方式進行通信並不安全,尤其是將連接信息寫入主機清單文件時,存在關鍵信息暴露的危險
  • 本文舉例用到的ping如上所示,是基於ssh的通信行爲,與ICMP協議無關,ping是Ansible的一個模塊,Ansible的工作都是基於模塊工作的,下一篇我們也會詳細介紹Ansible的常用模塊。

個人博客同步更新

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章