聊一聊Ansible自動(dòng)化運(yùn)維架構(gòu)
??想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:??
一、ANSIBLE介紹
1、什么是ansible
ansible是一個(gè)自動(dòng)化運(yùn)維工具,基于Python開發(fā),集合了眾多運(yùn)維工具(puppet、cfengine、chef、func、fabric)的優(yōu)點(diǎn),實(shí)現(xiàn)了批量系統(tǒng)配置、批量程序部署、批量運(yùn)行命令等功能。
2、ansible的歷史
Ansible 工具由供應(yīng)服務(wù)器應(yīng)用程序 Cobbler 的作者 Michael DeHaan 開發(fā),他是 Fedora 統(tǒng)一網(wǎng)絡(luò)控制器(Func)遠(yuǎn)程管理框架的共同作者。
紅帽于 2015 年 10 月收購了 Ansible。
Ansible 是 Red Hat 旗下的 Fedora Linux 發(fā)行版的一部分,也可以通過 Extra Linux for Enterprise Linux(EPEL)以及其他操作系統(tǒng)用于 Red Hat Enterprise Linux,CentOS,Scientific Linux 和 Oracle Linux。
3、Ansible有很多重要的優(yōu)勢(shì):
- 跨平臺(tái)支持:Ansible為物理、虛擬、云和容器環(huán)境中的Linux、Windows、UNIX和網(wǎng)絡(luò)設(shè)備提供無代理支持。
- 人類可讀的自動(dòng)化:Ansible Playbooks以YAML文本文件的形式編寫,易于閱讀,并有助于確保每個(gè)人都理解他們將做什么。
- 應(yīng)用程序的完美描述:Ansible Playbooks可以做出每一個(gè)更改,應(yīng)用程序環(huán)境的每一個(gè)方面都可以描述和記錄。
- 易于管理的版本控制:Ansible Playbooks和項(xiàng)目是純文本。 它們可以像源代碼一樣處理,并放在現(xiàn)有的版本控制系統(tǒng)中。
- 支持動(dòng)態(tài)清單:Ansible管理的機(jī)器列表可以從外部來源動(dòng)態(tài)更新,以便隨時(shí)獲取所有被管理服務(wù)器的正確的當(dāng)前列表,無論基礎(chǔ)設(shè)施或位置如何。
- 可與其他系統(tǒng)輕松集成的編排:HP SA、Puppet、Jenkins、Red Hat 衛(wèi)星和其他存在于您環(huán)境中的系統(tǒng)可以被利用和集成到您的Ansible工作流程中。
4、ansible工作原理
二、安裝ansible
1、關(guān)閉防火墻
setenforce 0
systemctl stop firewalld
2、修改主機(jī)名
hostname ansible /client
3、修改映射文件
vim /etc/hosts
4、下載epel-release軟件包
yum -y install epel-release
5、安裝ansible
yum -y install ansible
6、創(chuàng)建SSH面交互登錄
(1)發(fā)送密鑰需要passwd和yes。
ssh-keygen -t rsa
服務(wù)端:
客戶端:
復(fù)制密鑰到其他機(jī)器:
ssh-copy-id 192.168.253.128
復(fù)制密鑰時(shí)忽略passwd和yes(一鍵復(fù)制)。
sshpass -p passwd ssh -p 用戶名主機(jī)IP -o StrictHostKeyChecking=no
三、使用ansible
1、寫inventory(相當(dāng)于/etc/ansible/hosts)
里面就是主機(jī)的localhost或者ip:
vim inventory
web1.example.com
web2.example.com
db1.example.com
db2.example.com
192.0.2.42
2、寫ansible.cfg
vim ansible.cfg
[defaults]
inventory = ./inventory
remote_user = user
ask_pass = false
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false
指令 | 描述 |
inventory | 指定目錄文件的路徑。 |
remote_user | 在被管理主機(jī)上登錄的用戶名。如果未指定,使用當(dāng)前用戶名。 |
ask_pass | 是否提示SSHpasswd??梢匀绻褂肧SH公鑰認(rèn)證,則為false。 |
become | 是否自動(dòng)切換被管用戶連接后的主機(jī)(通常到root)。這也可以是戲劇指定的:戲劇指定的。 |
become_method | 如何切換用戶(通常是sudo,這是默認(rèn)的,但是su是一個(gè)選項(xiàng))。 |
become_user | 在托管主機(jī)上切換到的用戶(通常是Root,這是默認(rèn)值)。 |
become_ask_pass | 是否提示為你的become_method輸入passwd。 默認(rèn)值為false。 |
[defaults] | 設(shè)置Ansible操作的默認(rèn)值 |
[privilege_escalation] | 配置Ansible對(duì)managed的權(quán)限升級(jí)方式主機(jī) |
優(yōu)先級(jí)最高的,還是自己創(chuàng)建的ansible.cfg |
3、ansible的adhoc
ansible all -m ping
在ansible外面直接執(zhí)行模塊。
注:
Ansible的返回結(jié)果非常友好,一般會(huì)用三種顏色來表示執(zhí)行結(jié)果:紅色,綠色和橘黃色。
①其中紅色表示執(zhí)行過程中有異常。
②橘黃色表示命令執(zhí)行后目標(biāo)有狀態(tài)變化。
③綠色表示執(zhí)行成功且沒存對(duì)目標(biāo)機(jī)器做修改。
參數(shù)的含義:
- -v(–verbose):輸出詳細(xì)的執(zhí)行過程信息,可以得到執(zhí)行過程所有信息。
- -i PATH(–inventory=PATH):指定inventory信息,默認(rèn)為/etc/ansible/hosts。
- -f NUM(–forks=NUM):并發(fā)線程數(shù),默認(rèn)為5個(gè)線程。
- –private-key=PRIVATE_KEY_FILE指定秘鑰文件,(不經(jīng)常使用)。
- -m NAME,–moudle-name=NAME:指定執(zhí)行時(shí)使用的模塊。
- -M DIRECTORY (–module-path=DIRECTORY):指定模塊存放路徑,默認(rèn)為/usr/share/ansible,也可以通過ANSIBLE_LIBRARY設(shè)定默認(rèn)目錄。(不經(jīng)常使用)。
- -a ARGUMENTS ( --args=ARGUMENTS):指定模塊參數(shù)。
- -u USERNAME (–user=USERNAME);指定遠(yuǎn)程主機(jī) USERNAME運(yùn)行命令。
- -l subset (–limit=SUBSET):限定運(yùn)行主機(jī)。
- –list-hosts:列出符合條件的主機(jī)列表,不執(zhí)行任何命令。
4、Ansible 基礎(chǔ)模塊
模塊類別 | 模塊 |
文件模塊 | ? copy: Copy a local file to the managed host- |
軟件包模塊 | ? yum: Manage packages using the YUM package manager |
系統(tǒng)模塊 | ? firewalld: Manage arbitrary ports and services using firewalld |
Net Tools模塊 | ? get_url: Download files over HTTP, HTTPS, or FTP |
5、ansible-doc
ansible-doc用來查詢ansible模塊文檔的說明(幫助文檔),類似于man命令。
(1)列出支持的模塊。
ansible-doc -l
ansible-doc -s command
ansible-doc -s raw
ansible-doc -s ping
6、ansible-playbook
Ansible-playbook是日常應(yīng)用中使用頻率最高的命令,類似于Linux系統(tǒng)中的sh或source命令,用來執(zhí)行系列任務(wù),其工作機(jī)制是,通過讀取編寫好的 playbook文件實(shí)現(xiàn)集中處理任務(wù),ansible-playbook命令后跟yml或者yaml格式的playbook文件,playbook文件存放了要執(zhí)行的任務(wù)代碼。
playbook核心元素
- Hosts:執(zhí)行的遠(yuǎn)程主機(jī)列表。
- Tasks:任務(wù)集。
- Varniables: 內(nèi)置變量或自定義變量在playbook中調(diào)用。
- Templates:模板,可替換模板文件中的變量并實(shí)現(xiàn)一些簡單邏輯的文件。
- Handlers 和 notity 結(jié)合使用,由特定條件觸發(fā)的操作,滿足條件才執(zhí)行,否則不執(zhí)行。
- Tags:標(biāo)簽 指定某條任務(wù)執(zhí)行,用于選擇運(yùn)行playbook中的部分代碼,ansible具有冪等性,因此會(huì)自動(dòng)跳過沒有變化的部分,即便如此,有些代碼為測(cè)試其確實(shí)沒有發(fā)生變化的時(shí)間依然會(huì)非常地長,此時(shí),如果確信其沒有變化,就可以通過tags跳過此些代碼片段。
語法: ansible-playbook playbook.yml
檢查語法是否錯(cuò)誤。
ansible-playbook --syntax-check webserver.yml
7、ansible-console虛擬終端
ansible-console是 ansible為用戶提供的一款交互式工具,類似于 Windows中的cmd以及Linux中的shell,用戶可以在 ansible-console虛擬出來的終端上做像shell一樣使用ansible內(nèi)置的各種命令,這為習(xí)慣于使用 shell交互方式的用戶提供了良好的體驗(yàn),在終端輸入ansible-console命令后顯示如下。
所有的操作類似于shell,而且支持Tab鍵補(bǔ)全,按快捷鍵Ctrl+D或Ctrl+C即可退出當(dāng)前虛擬終端。
8、 ansible-galaxy
ansible-galaxy指令用于方便的從https://galaxy.ansible.com/站點(diǎn)下載第三方擴(kuò)展模塊。
創(chuàng)建rolrs目錄架構(gòu):
ansible galaxy init 目錄
9、 ansible-vault
ansible-vault主要應(yīng)用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以幫你加密/解密這個(gè)配置文件,屬高級(jí)用法。主要對(duì)于playbooks里比如涉及到配置passwd或其他變量時(shí),可以通過該指令加密,這樣我們通過cat看到的會(huì)是一個(gè)passwd串類的文件,編輯的時(shí)候需要輸入事先設(shè)定的passwd才能打開。這種playbook文件在執(zhí)行時(shí),需要加上 --ask-vault-pass參數(shù),同樣需要輸入passwd后才能正常執(zhí)行。
10、 ansible-pull
該指令使用需要談到ansible的另一種模式---pull 模式,這和我們平常經(jīng)常用的push模式剛好相反,其適用于以下場(chǎng)景:你有數(shù)量巨大的機(jī)器需要配置,即使使用非常高的線程還是要花費(fèi)很多時(shí)間;你要在一個(gè)沒有網(wǎng)絡(luò)連接的機(jī)器上運(yùn)行Anisble,比如在啟動(dòng)之后安裝。
四、一些常見的命令
輸出facts變量的內(nèi)容:
ansible 主機(jī) -m setup
創(chuàng)建加密變量文件:
ansible-vault create secret.yml
查看加密變量文件:
ansible-vault view secret1.yml
編輯加密變量文件:
ansible-vault edit secret.yml
可以使文件加密:
ansible-vault encrypt secret1.yml secret2.yml
解密變量文件:
ansible-vault decrypt secret1.yml --output=secret1-decrypted.yml
更改加密文件的passwd:
ansible-vault rekey secret.yml
執(zhí)行加密變量文件:
ansible-playbook --vault-id site.yml