現在做運維的估計都對ansible不陌生了,如果還沒有使用過的,我建議盡快嘗試下這個技術,入門非常簡單,一旦你運用熟練,将大大減輕運維工作的壓力,ansible隻需要在主要端安裝,用戶端無需做任何操作即可對被控端進行批量操作,這也是相對于saltstack的一個優點,saltstack除了在主要端安裝外,客戶機要安裝用戶端,其它不多說了,如果有興趣的可以百度,這種文章已經滿大街都是了,回到正題,今天這篇我們還是主要來介紹介紹ansible如果在運維中的應用,本來我剛開始打算用一篇來完成對ansible的介紹,在實際寫的過程中才發現,如果隻用一篇來寫,那篇幅就會非非常的長,為了讓大家閱讀起來不那麼痛苦,我最後決定分三篇來寫完,三篇分别介紹ansible的常用子產品,然後講解playbook配置,最後介紹ansible的api,這篇是開頭篇,是以暫不涉及python的編碼工作,學習起來也比較輕松,廢話不多說了,我們接下來開始我們的正題:
首先,我們安裝ansible
#yum install ansible
然後輸入個Y,就完成了,就是這麼簡單。
安裝完,我們說下基本的配置,運作指令:
#cd /etc/ansible/ #ll 總用量 20 -rw-r--r-- 1 root root 8625 10月 11 02:41 ansible.cfg -rw-r--r-- 1 root root 979 3月 1 23:13 hosts drwxr-xr-x 2 root root 4096 10月 11 02:41 roles
我們看到有2個檔案和1個目錄,,其它先不用管,我們先隻看hosts檔案,用vi打開,除[webservers],[dbservers]這兩行外,其它全部注釋掉,這二行的作用的定義主機組,主機組名下可以寫成員主機的IP(或域名),我們可以把的客戶機的IP放到[webservers]主機組下,這樣,定義主機群組的規則就算完成了,接下來進入我們子產品學習部分。
不得不說ansible的子產品真是豐富,基本上我們日常運維用到功能全部都有了,運作指令
#ansible-doc -l
可以看到全部的子產品名稱,對子產品的使用還是要看業務場景,比如你如果沒有在aws上機器,那麼像ec2你也不會用到,是以今天我們就隻會對日常運維最常用的子產品做說明,剩餘的子產品可以根據自己的業務用到了,再去學習了解,我們在講子產品前,會先給出每個子產品的應用場景,友善大家快速上手使用:
場景1:需要在客戶機上執行指令,可以用command子產品,指令如下:
#ansible webservers -m command -a 'uptime'
其中webservers是主機組名稱,在該主機組名稱下的所有主機都會運作uptime指令,-m後是子產品名稱,-a 後是子產品參數,後續指令都基本一個模子,不再贅述。
場景2:需要執行客戶機上的腳本,可以用shell子產品,指令如下:
#ansible webservers -m shell -a '/root/run.sh'
場景三:腳步在主要端,但需要在客戶機上執行,可以用script子產品,指令如下:
#ansible webservers -m shell -a '/root/local.sh'
請注意,你主要端/root/下必須有local.sh腳本。
場景四:檔案釋出,這種需求很多,比如日常的配置檔案更新,程式版本釋出等,基本都會用到,可以用copy子產品:
#ansible webservers -m copy -a 'dest=/root/ src=/root/xl2pdf'
注意我這裡xl2pdf是個目錄。
場景5:想在客戶機上安裝軟體,可以用yum子產品,這個用的還是挺多的,比如用ansible去連結低版本的centos時,就乎出現”ansible requires a json module, none found! “的錯誤,需要遠端機安裝samplejson包。
ansible webservers -m raw -a 'yum -y install python-simplejson'
raw是什麼鳥?莫急,我們看看幫助文檔怎麼說:#ansible-doc raw
> RAW Executes a low-down and dirty SSH command, not going through the module subsystem............
第一句就說明了問題,raw子產品是靠底層ssh的通訊,不依靠python的子產品,是以如果碰到低版本的系統,如果command和shell子產品無法使用,可以先用這條指令安裝完需要的包。
場景6:重新開機客戶機服務,可以用service子產品:
#ansible webserves -m service -a "name=vsftpd state=restarted"
對服務操作有started,stopped,restarted,reloaded四個參數。
以上主要的子產品就說完了,還有ping子產品,setup子產品(擷取遠端主機資訊),cron子產品等大家可以按以上子產品使用的思路去參考運作,不知道怎麼使用的,就看看幫助文檔,這篇就到這裡了,下篇我們開始聊聊如何将這些子產品組合起來滿足更複雜的業務操作,這就要用到我們的playbook了,先不多說,我們下篇見。