Ansible 安裝&使用入門

1. Ansible 概念

  • Control node
    任何安裝了 Ansible 的機(jī)器弦叶±撩蓿可以通過從任何控制節(jié)點(diǎn)調(diào)用ansibleoransible-playbook命令來運(yùn)行 Ansible 命令和 playbook 。可以使用任何安裝了 Python 的計(jì)算機(jī)作為控制節(jié)點(diǎn)——筆記本電腦手负、共享桌面和服務(wù)器都可以運(yùn)行 Ansible, 并可以控制多個(gè)控制節(jié)點(diǎn)。但是巍沙,不能將 Windows 機(jī)器用作控制節(jié)點(diǎn)犯祠。
  • Managed nodes
    使用 Ansible 管理的網(wǎng)絡(luò)設(shè)備(和/或服務(wù)器)。受管節(jié)點(diǎn)有時(shí)也稱為“主機(jī)”窖铡。Ansible 未安裝在受管節(jié)點(diǎn)上疗锐。
  • Inventory
    受管節(jié)點(diǎn)列表。清單文件有時(shí)也稱為“主機(jī)文件”费彼。您的清單可以為每個(gè)受管節(jié)點(diǎn)指定 IP 地址等信息滑臊。清單還可以組織受管節(jié)點(diǎn),創(chuàng)建和嵌套組以便于擴(kuò)展箍铲。要了解有關(guān)庫存的更多信息雇卷,請(qǐng)參閱使用庫存部分。
  • Collections
    集合是 Ansible 內(nèi)容的分發(fā)格式颠猴,可以包括劇本聋庵、角色、模塊和插件芙粱。您可以通過Ansible Galaxy安裝和使用集合。要了解有關(guān)集合的更多信息氧映,請(qǐng)參閱使用集合春畔。
  • Modules
    Ansible 執(zhí)行的代碼單元。每個(gè)模塊都有特定的用途,從管理特定類型數(shù)據(jù)庫上的用戶到管理特定類型網(wǎng)絡(luò)設(shè)備上的 VLAN 接口律姨≌窬可以使用任務(wù)調(diào)用單個(gè)模塊,或調(diào)用劇本中的多個(gè)不同模塊择份。從 Ansible 2.10 開始扣孟,模塊被分組到集合中。有關(guān) Ansible 包含多少集合的想法荣赶,請(qǐng)查看集合索引凤价。
  • Tasks
    Ansible 中的動(dòng)作單元“未矗可以使用臨時(shí)命令執(zhí)行一次單個(gè)任務(wù)利诺。
  • Playbooks
    已保存的有序任務(wù)列表,以便可以按該順序重復(fù)運(yùn)行這些任務(wù)剩燥。劇本可以包括變量和任務(wù)慢逾。Playbooks 是用 YAML 編寫的,易于閱讀灭红、編寫侣滩、共享和理解。要了解有關(guān) playbook 的更多信息变擒,請(qǐng)參閱playbook 簡(jiǎn)介君珠。

2. 安裝 Ansible

2.1 控制節(jié)點(diǎn)要求

控制節(jié)點(diǎn)(運(yùn)行 Ansible 的機(jī)器), 建議使用任何安裝了 Python 3.8 或更新版本的機(jī)器。這包括 Red Hat赁项、Debian葛躏、CentOS、macOS悠菜、任何 BSD 等等舰攒。控制節(jié)點(diǎn)不支持 Windows悔醋。

2.2 受控節(jié)點(diǎn)要求

盡管托管節(jié)點(diǎn)上不需要守護(hù)進(jìn)程摩窃,但需要一種 Ansible 與它們進(jìn)行通信的方式。對(duì)于大多數(shù)受管節(jié)點(diǎn)芬骄,Ansible 通過 SSH 建立連接并使用 SFTP 傳輸模塊猾愿。如果 SSH 有效但 SFTP 在您的某些受管節(jié)點(diǎn)上不可用,您可以在ansible.cfg 中切換到 SCP 账阻。對(duì)于任何可以運(yùn)行 Python 的機(jī)器或設(shè)備蒂秘,您還需要 Python 2(版本 2.6 或更高版本)或 Python 3(版本 3.5 或更高版本)。

2.3 在特定系統(tǒng)上安裝 Ansible

Fedora:  $ sudo dnf install ansible
RHEL: $ sudo yum install ansible
CentOS: $ sudo yum install epel-release 
        $ sudo yum install ansible
Ubuntu:
    $ sudo apt update
    $ sudo apt install software-properties-common
    $ sudo add-apt-repository --yes --update ppa:ansible/ansible
    $ sudo apt install ansible

2.4 pip 安裝 Ansible

2.4.1 通過 ansible 用戶安裝

$ python -m pip install --user ansible

2.4.2 全局安裝

sudo python -m pip install ansible

3. Ansible 配置設(shè)置

3.1 配置文件介紹

Ansible 支持多種來源來配置其行為淘太,包括名為 的 ini 文件ansible.cfg姻僧、環(huán)境變量规丽、命令行選項(xiàng)、劇本關(guān)鍵字和變量撇贺。有關(guān)每個(gè)源的相對(duì)優(yōu)先級(jí)的詳細(xì)信息赌莺,請(qǐng)參閱控制 Ansible 的行為:優(yōu)先級(jí)規(guī)則

3.2 配置文件查看&瀏覽

ansible-config 命令 允許用戶查看所有可用的配置設(shè)置松嘶、默認(rèn)值艘狭、設(shè)置方式以及當(dāng)前值的來源。有關(guān)更多信息翠订,請(qǐng)參閱ansible-config巢音。

3.3 配置文件查找順序

Ansiblw將按以下順序搜索的配置文件中進(jìn)行和使用更改:

  • ANSIBLE_CONFIG (如果設(shè)置了環(huán)境變量)
  • ansible.cfg (在當(dāng)前目錄中)
  • ~/.ansible.cfg (在主目錄中)
  • /etc/ansible/ansible.cfg

Ansible 將處理上面的列表并使用找到的第一個(gè)文件,所有其他文件都將被忽略蕴轨。

3.4 配置文件覆蓋優(yōu)先級(jí)

Ansible 提供了四種控制其行為的來源港谊。按照從最低(最容易覆蓋)到最高(覆蓋所有其他)的優(yōu)先級(jí)順序,類別是:

  • 配置設(shè)置
  • 命令行選項(xiàng)
  • 劇本關(guān)鍵詞
  • 變量

每個(gè)類別都會(huì)覆蓋所有優(yōu)先級(jí)較低的類別中的任何信息橙弱。例如歧寺,劇本關(guān)鍵字將覆蓋任何配置設(shè)置。

在每個(gè)優(yōu)先級(jí)類別中棘脐,都適用特定的規(guī)則斜筐。但是,一般來說蛀缝,“最后定義”會(huì)勝出并覆蓋任何先前的定義顷链。

4. Ansible 入門

4.1 Ansible 工作原理

一個(gè)基本的Ansible 命令 或 playbook 執(zhí)行流程如下:

  1. 從主機(jī)列表選擇要執(zhí)行的機(jī)器
  2. 通過SSH 連接到這些機(jī)器
  3. 將一個(gè)或多個(gè)模塊復(fù)制到遠(yuǎn)程機(jī)器上執(zhí)行命令

4.2 基本使用

4.2.1. 編輯或創(chuàng)建 /etc/ansible/hosts, 并向其中添加ip 或者 FQDNs

192.168.11.50
aserver.example.org
bserver.example.org

4.2.2. 連接到遠(yuǎn)程節(jié)點(diǎn)

注: 確保可以使用相同的用戶名連接到主機(jī)列表中的所有節(jié)點(diǎn)屈梁,最好對(duì)所有節(jié)點(diǎn)都設(shè)置了免密登錄, 所以建議控制節(jié)點(diǎn)和管理節(jié)點(diǎn)都創(chuàng)建ansible 用戶嗤练,并根據(jù)需求設(shè)置用戶權(quán)限.

可以通過多種方式覆蓋默認(rèn)遠(yuǎn)程用戶名(當(dāng)前執(zhí)行命令的用戶),包括:

  • -u 在命令行傳遞參數(shù)

  • 在主機(jī)列表中設(shè)置用戶信息

  • 在配置文件中設(shè)置用戶信息

  • 設(shè)置環(huán)境變量

4.2.3. 復(fù)制和執(zhí)行模塊

ssh連接后,Ansible 會(huì)將命令或劇本所需的模塊傳輸?shù)竭h(yuǎn)程機(jī)器以供執(zhí)行。

4.2.3.1 運(yùn)行Ansible 命令

  1. 使用 ping 模塊 ping 主機(jī)列表中所有節(jié)點(diǎn):
$ ansible all -m ping
aserver.example.org | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

注: 可以使用 -u 來指定要連接的用戶县好,默認(rèn)情況下 Ansible 使用 SSH,默認(rèn)為當(dāng)前用戶革答。

  1. 在所有節(jié)點(diǎn)運(yùn)行實(shí)時(shí)命令
ansible all -a "/bin/echo hello"
server.example.org | CHANGED | rc=0 >>
hello

4.2.3.2 運(yùn)行第一個(gè)playbook

  1. 創(chuàng)建或編輯 mytask.yaml
---
- name: My playbook
  hosts: all
  tasks:
     - name: Leaving a mark
       command: "touch /tmp/ansible_was_here"

2, 運(yùn)行 playbook

$ ansible-playbook mytask.yaml
PLAY [My playbook] **********************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************
ok: [aserver.example.org]
ok: [aserver.example.org]
ok: [192.0.2.50]
fatal: [192.0.2.50]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.0.2.50 port 22: No route to host", "unreachable": true}

TASK [Leaving a mark] *******************************************************************************************************************
[WARNING]: Consider using the file module with state=touch rather than running 'touch'.  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.
changed: [aserver.example.org]
changed: [bserver.example.org]

PLAY RECAP ******************************************************************************************************************************
aserver.example.org        : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
bserver.example.org        : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.0.2.50                 : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
  1. 提升權(quán)限來運(yùn)行命令
# as bruce
$ ansible all -m ping -u bruce
# as bruce, sudoing to root (sudo is default method)
$ ansible all -m ping -u bruce --become
# as bruce, sudoing to batman
$ ansible all -m ping -u bruce --become --become-user batman
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市曙强,隨后出現(xiàn)的幾起案子残拐,更是在濱河造成了極大的恐慌,老刑警劉巖碟嘴,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溪食,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡娜扇,警方通過查閱死者的電腦和手機(jī)眠菇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門边败,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捎废,你說我怎么就攤上這事≈略铮” “怎么了登疗?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嫌蚤。 經(jīng)常有香客問我辐益,道長(zhǎng),這世上最難降的妖魔是什么脱吱? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任智政,我火速辦了婚禮,結(jié)果婚禮上箱蝠,老公的妹妹穿的比我還像新娘续捂。我一直安慰自己,他們只是感情好宦搬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布牙瓢。 她就那樣靜靜地躺著,像睡著了一般间校。 火紅的嫁衣襯著肌膚如雪矾克。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天憔足,我揣著相機(jī)與錄音胁附,去河邊找鬼。 笑死滓彰,一個(gè)胖子當(dāng)著我的面吹牛控妻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播找蜜,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼饼暑,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了洗做?” 一聲冷哼從身側(cè)響起弓叛,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诚纸,沒想到半個(gè)月后撰筷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡畦徘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年毕籽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抬闯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡关筒,死狀恐怖溶握,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒸播,我是刑警寧澤睡榆,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站袍榆,受9級(jí)特大地震影響胀屿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜包雀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一宿崭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧才写,春花似錦葡兑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至房资,卻和暖如春蜕劝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背轰异。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工岖沛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搭独。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓婴削,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親牙肝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子唉俗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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