初識Ansible自動化運維工具

前言

2010年左右1,當時系統多數運行在小型機上,如HP、Sun、IBM小型機,如某系統當時使用10臺小型機,但隨着業務量不斷增加,前幾年去IOE的火熱進行,開源技術的不斷髮展,原先使用10臺小型機的系統在現在可能已暴漲似增漲到使用百來臺X86 Linux主機。html

如何運維成百上千臺的主機成爲一個挑戰,本人經歷過以下3階段:python

  1. 延用管理小型機時的方法:編寫shell腳本,然後經過scp拷貝到各臺主機,最後ssh遠程執行腳本,但此方法的弊端是:shell腳本很難重複運行,如若腳本中間環節報錯,則腳本前面所作的事情需清理,費時費力;
  2. 使用puppet自動運維工具,其提供了一系列經常使用模塊可用,但此工具過於複雜,其需在被管理主機安裝agent,如其提供的模塊未能知足管理需求,則擴展模塊比較難2
  3. 使用ansible自動運維工具,其一樣提供了經常使用模塊可用,但較於puppet輕量,無需在被管主機安裝agent,其核心是經過ssh登陸主機執行命令,使用方式簡單,學習成本低。

最近一項目做者使用ansible批量管理了200多臺PC Server,所作事情簡單描述以下:linux

  • 配置網卡主備綁定(bonding)並進行切換測試;
  • 配置主機磁盤Raid,格式化磁盤,掛載文件系統,建立用戶;
  • 主機安裝Jdk、Oracle客戶端、TimesTen等客戶端;
  • 配置ZK、Weblogic、Redis等集羣;

ansible爲什麼如此強大且好用,做者決定使用實戰方式帶領初學者迅速掌握此工具,從入門到精通。shell

環境描述

本示例準備了兩臺虛擬機,操做系統版本爲Centos 7.6,主機均採用最小化模式安裝。centos

% cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 

% cat /root/anaconda-ks.cfg
...
%packages
@^minimal
@core
kexec-tools
...

兩主機IP地址以下:ruby

% cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

okd-l01 192.168.18.2
okd-i01 192.168.18.3

Ansible安裝

對於非RHEL系列主機安裝ansible可參考官方文檔Installation Guide運維

控制節點

okd-l01主機能鏈接英特網,下面將在此主機上安裝ansible軟件。dom

  1. ansible在epel源裏,故先爲系統配置epel源:
% rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-7.noarch.rpm
  1. 安裝ansible:
% yum -y install ansible
  1. 執行以下命令查看當前版本:
% ansible --version
ansible 2.7.5
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Apr  9 2019, 14:30:50) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

被控節點

okd-l01與okd-i01均做爲ansible被管主機,需知足以下條件:python2.7

  1. 機器必須開啓ssh服務,控制節點必須能經過ssh鏈接到被控節點,而對於任何Linux發行版原本說,ssh都是默認開啓的;
  2. 機器必須安裝有python命令,索性的是centos 7即便最小化安裝也會安裝python 2.7;
  3. 主機若關閉了selinux(/etc/selinux/config文件中設置SELINUX=disabled並重啓)則無需安裝libselinux-python軟件包,不然需安裝此軟件包以免copy/file等模塊報錯。ssh

    % yum -y install libselinux-python

運行第一個任務

假設咱們需在遠程主機okd-i01上建立/test目錄,若採用ssh方式,咱們可在okd-l01執行命令:

ssh 192.168.18.3 'mkdir /test'

那麼,採用ansible如何作一樣的事情呢?首先需將被控主機的主機名或ip地址寫入到清單文件inventory)中,做者在okd-l01上使用root用戶3爲本實驗在/root/test目錄下建立清單文件hosts4

% mkdir /root/test && cd /root/test
% echo 192.168.18.3 > hosts

如同ssh命令相似,咱們其替換爲ansible後執行以下命令便可:

  1. ssh命令替換爲ansible命令;
  2. -i hosts參數指定清單文件名爲hosts,然後緊接着輸入ansible管理的被控主機ip地址;
  3. -a參數後接執行的命令mkdir /test
  4. -k參數提示輸入被控主機的用戶密碼。
% ansible -i hosts 192.168.18.3 -a"mkdir /test" -k
# 因做者採用root用戶執行,故默認此命令將使用root鏈接到遠程主機,
# 此處需輸入被控主機的ssh密碼:
SSH password:  
# 告警信息:
 [WARNING]: Consider using the file module with state=directory rather than running mkdir. If you need to use command because file is insufficient you can add warn=False to this command task or set command_warnings=False in ansible.cfg to
get rid of this message.
# 命令返回結果:
192.168.18.3 | CHANGED | rc=0 >>

如上爲最簡單的ansible使用方式,其僅是替換爲以前運行的ssh命令,接下來做者將詳細講解用於生產時所需知曉的必要知識。


  1. 本人從10年進入電信業工做,經歷過系統從幾十臺小型機遷移到上百臺X86 PC Server或雲計算虛擬化主機上的過程。
  2. 需掌握ruby語言知識。
  3. 可以使用任何用戶運行ansible命令。
  4. 文件名稱隨意,但建議名爲hosts或inventory。
相關文章
相關標籤/搜索