Ansible讀書筆記

1. 什么是Ansible杖们,它有什么用?

Ansible它是個集配置管理和應(yīng)用部署于一體的自動化運維工具撤蟆。

應(yīng)用情況:1)自動化批量部署應(yīng)用牵寺;2)自動化管理配置文件械姻;3)自動化云服務(wù)器妒蛇;4)自動化持續(xù)交付。

它默認通過ssh協(xié)議管理機器楷拳。真正具有批量部署的是ansible所運行的模塊绣夺,ansible只是提供一種框架。主要包括:

(1)欢揖、連接插件connection plugins:負責和被監(jiān)控端實現(xiàn)通信陶耍;

(2)、host inventory:指定操作的主機她混,是一個配置文件里面定義監(jiān)控的主機烈钞;

(3)泊碑、各種模塊核心模塊、command模塊毯欣、自定義模塊馒过;

(4)、借助于插件完成記錄日志郵件等功能酗钞;

(5)腹忽、playbook:劇本執(zhí)行多個任務(wù)時,非必需可以讓節(jié)點一次性運行多個任務(wù)砚作。

它的優(yōu)點

1. 輕量級窘奏,無需在客戶端安裝agent,更新時葫录,只需在操作機上進行一次更新即可着裹;

2. 批量任務(wù)執(zhí)行可以寫成腳本,而且不用分發(fā)到遠程就可以執(zhí)行压昼;

3. 使用python編寫求冷,維護更簡單,ruby語法過于復雜窍霞;

4.? 支持sudo匠题。

需求:

管理主機:本地電腦或者筆記本一臺,安裝ansible軟件但金。

托管節(jié)點(被管理對象):一組遠程服務(wù)器韭山,已安裝python2.4以上版本。如節(jié)點未開啟sftp冷溃,則需要在ansible.cfg 配置文件中配置成 scp 的方式钱磅,以完成通訊。

進階話題:chroot似枕,lxc盖淡,jailcontainers這些本地管理選項。還有一個ansible-pull模式凿歼,反轉(zhuǎn)主控關(guān)系褪迟,讓托管節(jié)點,定期從中央git目錄答憔,拉取配置并實現(xiàn)北京連接通信味赃。

2. 安裝ansible,筆者為mac筆記本虐拓,故而僅介紹mac ox上安裝方式心俗。

brew install ansible

接著編輯(或創(chuàng)建)/etc/ansible/hosts (這是默認配置路徑),并在其中加入一個或多個遠程系統(tǒng).

3.? 重要的配置文件Inventory, ansible.cfg

ansible可以對同一個組的主機進行批量配置,組與主機的關(guān)系城榛,就是通過Inventory文件的配置項確認的揪利。

以下內(nèi)容為某個簡要的案例配置

[ECSServers]

主機名? ? ansible_ssh_host=主機ip? ? ansible_ssh_port=(22為默認項 )? ?ansible_ssh_user=root

[組名:vars]

[組名A:children]? ? # 參數(shù)都是組名,假設(shè)為組名B吠谢,children意味著組名A的變量都可以被組名B繼承

動態(tài)Inventory配置

這里僅適用一個python文件的方式土童,展示動態(tài)Inventory配置方法,其他方法請查詢網(wǎng)上資料工坊。一般生產(chǎn)上是從cmdb献汗,從數(shù)據(jù)庫中獲取動態(tài)的Inventory配置信息。然后實行配置王污。這里的python文件方式僅僅只是個展示罢吃。

#! /usr/bin/env python

# coding=utf-8

import json

hostip1 = ['192.168.1.15']

hostip2 = ['192.168.1.35']

group1 = 'test1'

group2 = 'test2'

hostdata = {group1:{"hosts":hostip1},group2:{"hosts":hostip2}}

print json.dumps(hostdata,indent=4)


關(guān)于ansible.cfg,查看stackflow資料昭齐。

如果是linux系統(tǒng)尿招,一般可能位于以下位置:

ANSIBLE_CONFIG (an environment variable)

ansible.cfg (in the current directory)

.ansible.cfg (in the home directory)

/etc/ansible/ansible.cfg

重要的配置項有:

inventory = /etc/ansible/hosts? #默認inventory文件路徑

forks = 5? # 執(zhí)行命令時,一次性啟動的并行線程數(shù)阱驾,以便批量處理服務(wù)器的配置部署就谜。

sudouser = root #默認情況,一般不用改里覆,但是特殊的情況下丧荐,要改

remote_port

timeout? ? # 連接持續(xù)多久算超時失敗

log_path = xxx/xxx/xxx.log? ? # 默認情況下,不記錄日志喧枷,如果想開啟日志記錄虹统,必須設(shè)置log_path的值

transport = smart? ? # 用戶通常可以這個設(shè)置為‘smart’,讓playbook在需要的條件自己選擇‘connection:’參數(shù).


4.? 新手任務(wù):測試ping命令隧甚,嘗試能否ping的通一組服務(wù)器.(ps:筆者只有一臺可測試用)

ansible? all? -m? ping? -u? root? --ask-pass

all:所有主機车荔;? ? -m ping:測試ping命令;? ? -u root:使用root用戶戚扳;? ? --ask-pass:要求輸入密碼忧便。

擴展知識,如果不想要【--ask-pass】選項帽借,希望免密碼登錄珠增,則需要在本機設(shè)置ssh的秘鑰。以下為簡要步驟:

首先是原理解釋圖:



接著是操作步驟:參考資料

假設(shè)ansible管理主機A宜雀,要求免密登錄到遠程節(jié)點服務(wù)器B切平。

A主機上

ssh-keygen -t rsa -C 'ForECSServer'

scp id_sra.pub root@服務(wù)器ip:/root/.ssh? # 筆者曾用MyMac.pub測試握础,莫名失敗辐董,標記該事項。

B服務(wù)器上

cd?/root/.ssh

cat id_sra.pub >> authorized_keys

A主機上測試免密登錄

ssh?root@服務(wù)器ip? ? # 注意禀综,如果A主機上執(zhí)行命令的用戶不是root简烘,那么必須要用root@ip的形式才能免密碼登錄

最后測試下ansible的免密登錄,執(zhí)行以下命令

ansible all -m ping -u root # ok苔严,登錄成功。

5.? Ansible的ad-hoc命令

使用案例1孤澎,在服務(wù)器上執(zhí)行重啟命令

ansible? [你的組名]? -a "/sbin/reboot"? -f? 10?

a:args的意思届氢,參數(shù),f:forks覆旭,指定線程數(shù)退子,該案例說明一次開啟10個線程,重啟10臺節(jié)點服務(wù)器型将。想象下管理成百上千個服務(wù)器的情形寂祥。

使用案例2,在一臺服務(wù)器上執(zhí)行shell命令

ansible ?[你的組名]? -m shell -a'echo $TERM'

-m參數(shù)指定ansible使用的模塊七兜,默認是command模塊丸凭,這里指定shell,-a:參數(shù)腕铸,不提惜犀。

使用案例3,將本地文件copy到一組服務(wù)器上

ansible [你的組名] -m copy -a"src=/etc/hosts dest=/tmp/hosts"

-m:使用copy模塊狠裹;? ? -a:src和dest

使用案例4虽界,yum和apt的支持

ansible [你的組名] -m yum -a"name=acme state=present"

使用案例5,使用git部署web-app酪耳,好方便的方法

ansible? [你的組名]? -m service -a"name=httpd state=started"

使用案例6浓恳,管理服務(wù)service

ansible webservers -m service -a"name=httpd state=started"

-a:args的意思,其中state可以為stated碗暗,restarted颈将,stopped,確認已啟動/重啟/停止

使用案例7言疗,將進程掛后臺執(zhí)行晴圾,以及查詢

ansible all -m ping -B 3600 -P 0

-B 3600:表示異步后臺執(zhí)行,在3600秒后失敗噪奄,-P :設(shè)定Poll Interval時間死姚,默認值為15秒;

ansible all -m async_status "jid='上一條命令獲得的ansible_job_id的值' "

使用案例8勤篮,file模塊的使用都毒,詳見圖片資料

使用案例9,cron計劃任務(wù)模塊的使用碰缔,詳見圖片資料

使用案例10账劲,yum和get_url模塊的使用,詳見圖片資料

參考資料截圖如下:









6. Ansible 提供了7個命令,執(zhí)行不同操作

ansible:核心指令瀑焦,用于執(zhí)行ad-hoc單條命令腌且。類似linux的shell中執(zhí)行一條指令

操作指令格式:ansible? [服務(wù)器組名/服務(wù)器主機名] -m 模塊 -a 參數(shù) -f 線程數(shù)。具體查-h幫助文檔

ansible-doc:用于查看模塊信息榛瓮。-l 列出模塊铺董,

ansible-galaxy:用于方便的下載第三方模塊

ansible-lint:用于playbook語法檢查的命令。

ansible-playbook:生產(chǎn)商最為常用的命令禀晓。

ansible-pull:pull模式精续,一個很重要的模式,必須學會使用粹懒。

ansible-vault:加密解密命令驻右。重要的安全命令,導致使用復雜崎淳,但是更高的安全性堪夭。

7. Playbooks

Playbooks是 Ansible的配置,部署,編排語言.他們可以被描述為一個需要希望遠程主機執(zhí)行命令的方案,或者一組IT程序運行的命令集合.

一個簡單的ansible例子:(ps:這是個yml文件,由你來命名拣凹,例如website.yml)

---

- hosts: webservers

vars:

http_port: 80

max_clients: 200

remote_user: root

tasks:

- name: ensure apache is at the latest version

yum: pkg=httpd state=latest

- name: write the apache config file

template: src=/srv/httpd.j2 dest=/etc/httpd.conf

notify:

- restart apache

- name: ensure apache is running

service: name=httpd state=started

handlers:

- name: restart apache

service: name=httpd state=restarted

這里主要討論它各個模塊的作用:

1)host:組名或者主機名森爽,指定被操作的服務(wù)器

2)task:不用說了吧,任務(wù)

3)notify:位于task中嚣镜,與handlers結(jié)合使用爬迟,主要用于服務(wù)重啟或者服務(wù)器重啟,其他場景用的很少菊匿。思考playbook的執(zhí)行順序以便理解付呕。task中一系列任務(wù)完成后,可能任務(wù)A觸發(fā)一個notify restart nginx跌捆;任務(wù)B也觸發(fā)一個notfiy restart nginx徽职。。佩厚。姆钉。最后handlers僅在觸發(fā)notify的情況下,執(zhí)行一次抄瓦。

4)include和roles:重要的功能潮瓶,主要是復用代碼的思想。

5)vars:自定義變量钙姊,關(guān)于自定義變量毯辅,存在三種定義變量的方法,

方法一:在Inventory文件(默認為/etc/ansible/hosts)中設(shè)定變量煞额,直接{{ 變量名 }}來使用

方法二:在playbook文檔中思恐,vars:模塊設(shè)定赤屋,如上所述,同樣通過{{ 變量名 }}來使用壁袄。

方法三:引用其他playbook文檔,vars_files:模塊設(shè)定媚媒,通過{{ 變量名 }}引用嗜逻,如下所示。

vars_files:? ?#

? ? - var.yml??

6)register模塊缭召,從5)小點引申而來栈顷,用來進行任務(wù)間通信,主要是任務(wù)間的信息傳遞嵌巷,這個模塊功能很重要萄凤,如下所示


該案例中,注冊了一個info變量搪哪。該變量用于記錄


8. Playbooks提升

1)Playbook的一個頂層結(jié)構(gòu)組織方式靡努,參考資料。注意兩個入口文件晓折,site.yml是劇本playbook的入口文件惑朦,main.yml是角色對應(yīng)功能的入口文件。

production? ? ? ? ? ? ? ? # inventory file for production servers 關(guān)于生產(chǎn)環(huán)境服務(wù)器的清單文件

stage? ? ? ? ? ? ? ? ? ? ? ? # inventory file for stage environment 關(guān)于 stage 環(huán)境的清單文件

group_vars/

? ? ? ?group1? ? ? ? ? ? ? ? # 這里我們給特定的組賦值

? ? ? ?group2? ? ? ? ? ? ? ? # ""

host_vars/

? ? ? ? hostname1? ? ? ? # 如果系統(tǒng)需要特定的變量, 把它們放置在這里.

? ? ? ? hostname2? ? ? ? # ""

library/? ? ? ? ? ? ? ? ? ? ? ?#如果有自定義的模塊,放在這里(可選)

filter_plugins/? ? ? ? ? ? ?# 如果有自定義的過濾插件,放在這里(可選)

site.yml? ? ? ? ? ? ? ? ? ? ? # master playbook 主 playbook

webservers.yml? ? ? ? ?# playbook for webserver tier Web 服務(wù)器的 playbook

dbservers.yml? ? ? ? ? ? # playbook for dbserver tier 數(shù)據(jù)庫服務(wù)器的 playbook

roles/

? ? ? ? common/? ? ? ? ? ? # this hierarchy represents a "role" 這里的結(jié)構(gòu)代表了一個 "role"

? ? ? ? ? ? ? ? tasks/? ? ? ? ? ? #

? ? ? ? ? ? ? ? ? ? ? ? main.yml? ? ? #? <-- tasks file can include smaller files if warranted

? ? ? ? ? ? ? ? handlers/? ? ? ? #

? ? ? ? ? ? ? ? ? ? ? ? main.yml? ? ? #? <-- handlers file

? ? ? ? ? ? ? ? templates/? ? ? ? #? <-- files for use with the template resource

? ? ? ? ? ? ? ? ? ? ? ? ?ntp.conf.j2? #? <------- templates end in .j2

? ? ? ? ? ? ? ? ?files/? ? ? ? ? ? #

? ? ? ? ? ? ? ? ? ? ? ? ? bar.txt? ? ? #? <-- files for use with the copy resource

? ? ? ? ? ? ? ? ? ? ? ? ? foo.sh? ? ? ? #? <-- script files for use with the script resource

? ? ? ? ? ? ? ? ?vars/? ? ? ? ? ? #

? ? ? ? ? ? ? ? ? ? ? ? ? ?main.yml? ? ? #? <-- variables associated with this role

? ? ? ? ? ? ? ? ?defaults/? ? ? ? #

? ? ? ? ? ? ? ? ? ? ? ? ? ? main.yml? ? ? #? <-- default lower priority variables for this role

? ? ? ? ? ? ? ? ?meta/? ? ? ? ? ? #

? ? ? ? ? ? ? ? ? ? ? ? ? ? main.yml? ? ? #? <-- role dependencies

? ? ? ? webtier/? ? ? ? ? ? ? # same kind of structure as "common" was above, done for the webtier role

? ? ? ? monitoring/? ? ? ? ? # ""

? ? ? ? fooapp/? ? ? ? ? ? ? # ""

2)變量

3)條件判斷:when

4)循環(huán)

5)過濾器的使用漓概,例如

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漾月,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胃珍,更是在濱河造成了極大的恐慌梁肿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件觅彰,死亡現(xiàn)場離奇詭異吩蔑,居然都是意外死亡,警方通過查閱死者的電腦和手機填抬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門哥纫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人痴奏,你說我怎么就攤上這事蛀骇。” “怎么了读拆?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵擅憔,是天一觀的道長。 經(jīng)常有香客問我檐晕,道長暑诸,這世上最難降的妖魔是什么蚌讼? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮个榕,結(jié)果婚禮上篡石,老公的妹妹穿的比我還像新娘。我一直安慰自己西采,他們只是感情好凰萨,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著械馆,像睡著了一般胖眷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霹崎,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天珊搀,我揣著相機與錄音,去河邊找鬼尾菇。 笑死境析,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的派诬。 我是一名探鬼主播簿晓,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼千埃!你這毒婦竟也來了憔儿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤放可,失蹤者是張志新(化名)和其女友劉穎谒臼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耀里,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蜈缤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了冯挎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片底哥。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖房官,靈堂內(nèi)的尸體忽然破棺而出趾徽,到底是詐尸還是另有隱情,我是刑警寧澤翰守,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布孵奶,位于F島的核電站,受9級特大地震影響蜡峰,放射性物質(zhì)發(fā)生泄漏了袁。R本人自食惡果不足惜朗恳,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望载绿。 院中可真熱鬧粥诫,春花似錦、人聲如沸崭庸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冀自。三九已至,卻和暖如春秒啦,著一層夾襖步出監(jiān)牢的瞬間熬粗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工余境, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驻呐,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓芳来,卻偏偏與公主長得像含末,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子即舌,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容