absible原理及基礎應用

一饶号、ansible的作用及工作結構

1涩禀、ansible簡介:
ansible是新出現(xiàn)的自動化運維工具屿岂,基于Python開發(fā),集合了眾多運維工具(puppet霉撵、cfengine剥啤、chef牺丙、func则涯、fabric)的優(yōu)點,實現(xiàn)了批量系統(tǒng)配置冲簿、批量程序部署粟判、批量運行命令等功能。ansible是基于模塊工作的峦剔,本身沒有批量部署的能力档礁。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架吝沫。主要包括:
(1)呻澜、連接插件connection plugins:負責和被監(jiān)控端實現(xiàn)通信递礼;
(2)、host inventory:指定操作的主機羹幸,是一個配置文件里面定義監(jiān)控的主機宰衙;
(3)、各種模塊核心模塊睹欲、command模塊供炼、自定義模塊;
(4)窘疮、借助于插件完成記錄日志郵件等功能袋哼;
(5)、playbook:劇本執(zhí)行多個任務時闸衫,非必需可以讓節(jié)點一次性運行多個任務

2涛贯、ansible的總體架構:連接其他主機默認使用ssh協(xié)議

由上面的圖可以看到 Ansible 的組成由 5 個部分組成:

Ansible: 核心
Modules: 包括 Ansible 自帶的核心模塊及自定義模塊
Plugins: 完成模塊功能的補充,包括連接插件蔚出、郵件插件等
Playbooks: 劇本(編排好一步一步的執(zhí)行)弟翘;定義 Ansible 多任務配置文件,有 Ansible 自動執(zhí)行
Inventory: 定義 Ansible 管理主機的清單

二骄酗、ansible的安裝以及常用的模塊使用

1稀余、ansible無服務器端,使用時直接運行命令即可趋翻,同時不需要在被管控主機上安裝任何客戶端睛琳,因此ansible是一個十分輕量級的工具,可以再epel源進行安裝踏烙。

配置好epel源直接安裝yum安裝ansible

[root@centos7 ~]#yum -y install ansible

查看生成的主要文件:

[root@centos7 ~]#rpm -ql ansible
/etc/ansible
/etc/ansible/ansible.cfg   #配置文件
/etc/ansible/hosts   #主機庫(host inventory)
/usr/bin/ansible   #主程序
/usr/bin/ansible-doc   #文檔
/usr/bin/ansible-playbook   #劇本
......

2师骗、ansible命令的使用方法
語法:

ansible <host-pattern> [-f forks] [-m module_name] [-a args]
    
    host-pattern:host inventory文件的一個組名,可以為all
    -f forks:并行處理的個數(shù)讨惩,默認為5
    -m module_name:模塊名辟癌,默認為command
    -a args:參數(shù)
ansible-doc:
    -l:查看模塊列表
    -s:查看相關模塊參數(shù)

Ansible默認安裝好后有一個配置文件/etc/ansible/ansible.cfg,改配置文件中定義了ansible的主機的默認配置部分荐捻,如默認是否需要輸入密碼黍少、是否開啟sudo認證、action_plugins插件的位置靴患、hosts主機組的位置仍侥、是否需要開啟log功能要出、默認端口鸳君、key文件位置等。

[defaults]
    # some basic default values...
    hostfile       = /etc/ansible/hosts   \\指定默認hosts配置的位置
    # library_path = /usr/share/my_modules/
    remote_tmp     = $HOME/.ansible/tmp
    pattern        = *
    forks          = 5
    poll_interval  = 15
    sudo_user      = root  \\遠程sudo用戶
    #ask_sudo_pass = True  \\每次執(zhí)行ansible命令是否詢問sudo密碼
    #ask_pass      = True  \\每次執(zhí)行ansible命令時是否詢問ssh密碼
    transport      = smart
    remote_port    = 22
    module_lang    = C
    gathering = implicit
    host_key_checking = False    \\關閉第一次使用ansible連接客戶端是輸入命令提示
    log_path    = /var/log/ansible.log \\需要時可以自行添加患蹂。chown -R root:root ansible.log
    system_warnings = False    \\關閉運行ansible時系統(tǒng)的提示信息或颊,一般為提示升級
    # set plugin path directories here, separate with colons
    action_plugins     = /usr/share/ansible_plugins/action_plugins
    callback_plugins   = /usr/share/ansible_plugins/callback_plugins
    connection_plugins = /usr/share/ansible_plugins/connection_plugins
    lookup_plugins     = /usr/share/ansible_plugins/lookup_plugins
    vars_plugins       = /usr/share/ansible_plugins/vars_plugins
    filter_plugins     = /usr/share/ansible_plugins/filter_plugins
    fact_caching = memory
    [accelerate]
    accelerate_port = 5099
    accelerate_timeout = 30
    accelerate_connect_timeout = 5.0
    # The daemon timeout is measured in minutes. This time is measured
    # from the last activity to the accelerate daemon.
    accelerate_daemon_timeout = 30

下面對一些常用的模塊進行演示說明:
首先準備測試環(huán)境:四臺主機砸紊,一臺作為ansible的控制主機,另外三臺作為被管理的機器節(jié)點

1囱挑、ansible的連接:
通過前面的介紹我們知道醉顽,ansible是基于ssh協(xié)議來進行數(shù)據(jù)傳輸,ssh連接一般由兩種方法平挑,一種是使用密碼密鑰游添,一種是使用公私密碼免密碼登陸,為了順利使用ansible通熄,下面配置基于公私密碼免密碼登錄

(1)生成密鑰對

[root@centos7 ~]#ssh-keygen -t rsa
\\-t表示使用的加密類型唆涝,其中rsa1表示version1版本,rsa唇辨、dsa廊酣、ecdsa的加密是對于version2版本

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):   \\這里詢問你要把生成的密鑰文件保存在哪里,默認是在家目錄下的.ssh文件夾中赏枚,回車保存默認目錄

Enter passphrase (empty for no passphrase):
\\ 這里是對密鑰文件加密亡驰,不輸入則表示不加密
 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
e3:39:0e:4b:f0:a1:4f:23:aa:f2:d2:5f:d6:90:8e:af root@centos7.3.zj.com
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|       .         |
|    . + S        |
|     * = o       |
| .  + X =        |
|o .. O = .       |
|o+o.E.+ .        |
+-----------------+

(2)查看已經(jīng)成功生成了一對密鑰

[root@centos7 ~]#ls /root/.ssh
id_rsa  id_rsa.pub  known_hosts
\\其中id_rsa為私鑰,id_rsa.pub為公鑰

(3)在生成完密鑰對之后將公鑰上傳給服務器對應用戶的家目錄

[root@centos7 ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.16.252.190

[root@centos7 ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.16.252.192

[root@centos7 ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.16.250.129

已經(jīng)配置好無需密碼登錄了饿幅,下面進行ansible的配置

2凡辱、配置ansible需要控制的主機列表,其配置在/etc/ansible/hosts文件中

[test表示控制的組可以根據(jù)實際進行定義栗恩,下面添加主機列表]

3煞茫、命令模塊

這也是默認的模塊,也就是不加-m指定模塊時默認的模塊摄凡,這個模塊不能使用包含管道的命令续徽。

[root@centos7 ~]#ansible-doc -s command

演示:

[root@centos7 ~]#ansible test -a 'date'

4、shell模塊

shell模塊也是可以執(zhí)行命令亲澡,與command模塊不同的是钦扭,command模塊不能執(zhí)行包含管道的模塊,而shell可以

[root@centos7 ~]#ansible-doc -s shell

演示:

[root@centos7 ~]#ansible test -m shell -a 'echo 111 > /tmp/test.txt'
172.16.250.129 | SUCCESS | rc=0 >>


172.16.252.190 | SUCCESS | rc=0 >>


172.16.252.192 | SUCCESS | rc=0 >>

客戶端查看已經(jīng)生成文件

[root@centos7 ~]#cat /tmp/test.txt 
111

5床绪、copy模塊:可以把本機的文件拷貝至被管理的機器客情,通常用于分發(fā)配置文件

[root@centos7 ~]#ansible-doc -s copy

演示:

[root@centos7 ~]#ansible test -m copy -a 'src=/etc/issue dest=/tmp/issue.txt mode=600'

查看測試成功

[root@centos7 ~]#ansible test -a 'ls /tmp/issue.txt'

6、cron模塊:分發(fā)定期任務

[root@centos7 ~]#ansible-doc -s cron

演示:每5分鐘同步ntp服務器

[root@centos7 ansible]#ansible test -m cron -a 'name="test" minute=*/5 hour=* day=*  month=* weekday=* job="usr/sbin/ntpdate 172.16.0.1"'

7癞己、yum模塊:顧名思義膀斋,該模塊可以管理軟件的安裝和卸載,state=present(安裝) absent(卸載)

[root@centos7 ~]#ansible-doc -s yum

演示:

[root@centos7 ~]#ansible test -m yum -a 'name=tree state=present'

測試安裝是否成功

[root@centos7 ~]#ansible test -a 'rpm -q httpd'

8痹雅、service模塊
state=started/stopped/restarted

[root@centos7 ~]#ansible-doc -s service

演示:

現(xiàn)在的httpd服務是停止的仰担,我們重啟一下

[root@centos7 ~]#ansible test -m service -a 'name=httpd state=started '

查看已經(jīng)啟動成功

[root@centos7 ~]#ansible test -m shell -a 'ss -tnl|grep 80'

三、ansible的playbook使用

由上面的演示我們體會到了ansible的強大绩社,但是上面的演示都是一條一條指令的輸入摔蓝,這樣未免影響了效率赂苗,這里可以使用playbook劇本像shell腳本一樣一次執(zhí)行多條語句

1:playbook組織格式:YAML語言格式

playbook是ansible更強大的配置管理組件,實現(xiàn)基于文本文件編排執(zhí)行的多個任務贮尉,且多次重復執(zhí)行

(1)YAML簡介

  • YAML:YAML Ain‘t Markup Language; Yet Another Markup Language;
  • 類似于半結構化數(shù)據(jù)拌滋,聲明配置;可讀性較高的用來表達資料序列的格式猜谚,易于與腳本語言交互
  • 官方站點:http://www.yaml.org
    (2)語法格式
  • 任何數(shù)據(jù)結構都用縮進來標識败砂,可以嵌套
  • 每一行是一個鍵值數(shù)據(jù)key:value,冒號隔開魏铅。若想在一行標識需要用{ } 和吠卷,分隔格式
  • 列表用-標識
    (3)playbook組成結構
  • Tasks:任務,即調(diào)用模塊完成的操作
  • Variables:變量
  • Templates:模板
  • Handlers:處理器沦零,由某個條件觸發(fā)執(zhí)行的操作
  • Roles:角色
    基本結構:
- host:webservices
 remote_user:
   - tasks:
   - task1
   module_name

YAML文件擴展名通常為.yaml祭隔,如test.yaml

2、playbook的使用:
前面已經(jīng)介紹了playbook的存儲在*.yaml文件中路操,我們創(chuàng)建一個yaml文件驗證一下

[root@centos7 ansible]#cat /etc/ansible/test.yaml
- hosts: test
  remote_user: root
  tasks:
  - name: user a group
    group: gid=1111 name=test system=no
  - name: show command
    shell: date

正式使用時我們最好先運行下看有沒有錯誤

[root@centos7 ansible]#ansible-playbook --check test.yaml

沒有問題就可以正式運行命令腳本了

[root@centos7 ansible]#ansible-playbook test.yaml 

檢查測試成功

[root@centos7 ansible]#ansible test -a 'tail -1 /etc/group'

3疾渴、playbook變量
(1)變量命名:字母、數(shù)字和下劃線組成屯仗,僅能以字母開頭搞坝;
(2)變量種類:

  • facts:由遠程主機發(fā)回主機特有的屬性信息,這些信息被保存在ansible變量中魁袜;無需聲明桩撮,可直接調(diào)用
  • 自定義變量:
  • 通過命令行傳遞:ansible-playbook test.yaml -extra-vars "host=www user=test"
  • 通過roles傳遞
  • 主機變量:定義在inventory中的主機之后的變量;直接傳遞給單個主機的變量
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末峰弹,一起剝皮案震驚了整個濱河市店量,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鞠呈,老刑警劉巖融师,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蚁吝,居然都是意外死亡旱爆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門窘茁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怀伦,“玉大人,你說我怎么就攤上這事山林》看” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吴攒。 經(jīng)常有香客問我,道長砂蔽,這世上最難降的妖魔是什么洼怔? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮左驾,結果婚禮上镣隶,老公的妹妹穿的比我還像新娘。我一直安慰自己诡右,他們只是感情好安岂,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著帆吻,像睡著了一般域那。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猜煮,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天次员,我揣著相機與錄音,去河邊找鬼王带。 笑死淑蔚,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的愕撰。 我是一名探鬼主播刹衫,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搞挣!你這毒婦竟也來了带迟?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤囱桨,失蹤者是張志新(化名)和其女友劉穎邮旷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝇摸,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡婶肩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了貌夕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片律歼。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖啡专,靈堂內(nèi)的尸體忽然破棺而出险毁,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布畔况,位于F島的核電站鲸鹦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏跷跪。R本人自食惡果不足惜馋嗜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吵瞻。 院中可真熱鬧葛菇,春花似錦、人聲如沸橡羞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卿泽。三九已至莺债,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間签夭,已是汗流浹背九府。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留覆致,地道東北人侄旬。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像煌妈,于是被迫代替她去往敵國和親儡羔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

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

  • 一.ansible (1) ansible: ansible是一款新出現(xiàn)的自動化運維系統(tǒng)璧诵,基于python開發(fā)并集...
    楠人幫閱讀 1,927評論 0 8
  • ###### Ansible總結 ##### 運維工作: 系統(tǒng)安裝(物理機汰蜘、虛擬機)-->程序包安裝、配置之宿、服務啟...
    二郎5閱讀 2,013評論 0 4
  • ansible介紹ansible常用模塊使用playbooktemplates族操,模板條件測試和循環(huán)迭代roles,...
    哈嘍別樣閱讀 1,402評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理比被,服務發(fā)現(xiàn)色难,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139