效率提升神器:Ansible 入門,開啟自動(dòng)化運(yùn)維之旅
隨著DevOps 和自動(dòng)化運(yùn)維的普及,越來(lái)越多的IT運(yùn)維工程師開始使用工具來(lái)簡(jiǎn)化繁瑣的手動(dòng)操作。Ansible作為一款強(qiáng)大的自動(dòng)化運(yùn)維工具,因其簡(jiǎn)潔、無(wú)代理以及易于使用的特點(diǎn),受到了廣泛的關(guān)注。在這篇文章中,我們將帶你了解Ansible的基礎(chǔ)知識(shí),從安裝到基礎(chǔ)命令、Playbook 的編寫,幫助你快速入門自動(dòng)化運(yùn)維的世界。
一、什么是Ansible?
Ansible是一個(gè)開源的自動(dòng)化工具,用于配置管理、應(yīng)用部署和任務(wù)執(zhí)行。它使用簡(jiǎn)潔的YAML語(yǔ)法編寫 Playbook,不需要安裝客戶端代理,并且支持SSH協(xié)議與遠(yuǎn)程主機(jī)進(jìn)行通信,適合大規(guī)?;A(chǔ)設(shè)施管理。
Ansible的主要特點(diǎn):
- 無(wú)代理模式:Ansible不需要在被管理的機(jī)器上安裝任何代理,所有操作都通過(guò)SSH進(jìn)行通信。
- 簡(jiǎn)單易用:使用YAML作為配置語(yǔ)言,語(yǔ)法簡(jiǎn)單且可讀性強(qiáng)。
- 強(qiáng)大的模塊支持:Ansible提供了豐富的內(nèi)置模塊,可以執(zhí)行各種任務(wù),如文件操作、服務(wù)管理、系統(tǒng)配置等。
- 跨平臺(tái)支持:Ansible支持Linux、Windows等多種操作系統(tǒng)。
- 高度可擴(kuò)展:支持自定義模塊和插件,能夠滿足復(fù)雜的運(yùn)維需求。
二、安裝 Ansible
1. 系統(tǒng)要求
Ansible支持Linux、macOS 和 Windows 系統(tǒng)(通過(guò) WSL)。在Ubuntu系統(tǒng)上進(jìn)行安裝是最為常見的做法。確保你的系統(tǒng)滿足以下要求:
- Python 2.7或 Python 3.x
- pip3(Python 包管理工具)
2. 安裝步驟
因?yàn)锳nsible是用Python編寫的,我們建議您通過(guò)pip來(lái)安裝它。執(zhí)行如下命令,這樣操作起來(lái)會(huì)更加方便哦!
pip3 install ansible
3. 驗(yàn)證安裝
安裝完成后,運(yùn)行以下命令驗(yàn)證 Ansible 是否安裝成功:
ansible --version
如果返回版本號(hào),如下圖所示,說(shuō)明安裝成功。
三、配置和管理主機(jī)
1. 主機(jī)清單文件
Ansible使用主機(jī)清單文件來(lái)定義被管理的主機(jī)。主機(jī)清單可以是一個(gè)簡(jiǎn)單的文件,里面列出所有需要管理的服務(wù)器地址,Ansible會(huì)根據(jù)這個(gè)文件來(lái)確定任務(wù)執(zhí)行的目標(biāo)主機(jī)。
- 主機(jī)清單有兩種格式:
- INI格式(默認(rèn)格式)
(1) YAML格式
INI格式示例:
INI格式是Ansible的默認(rèn)清單文件格式。你可以使用不同的主機(jī)組來(lái)組織主機(jī),并為每個(gè)主機(jī)定義不同的屬性。 創(chuàng)建一個(gè)名為 hosts 的主機(jī)清單文件,內(nèi)容如下:
[lb]
ansible_host=192.168.31.217 ansible_ssh_user=root ansible_ssh_pass='password@123' ansible_ssh_port=10022
192.168.31.158
[lb:vars]
ansible_ssh_user='root'
ansible_ssh_pass='password'
ansible_ssh_port='22'
在INI格式中,可以通過(guò)在主機(jī)后面指定變量來(lái)配置不同的密碼和端口。變量通常以 ansible_* 開頭,后跟屬性名稱。常見的屬性有:
- ansible_ssh_user:SSH 登錄用戶名
- ansible_ssh_pass:SSH 登錄密碼
- ansible_ssh_port:SSH 端口(默認(rèn)是 22)
- ansible_ssh_private_key_file:私鑰文件路徑
(2) YAML 格式示例:
YAML格式的主機(jī)清單通常用于更復(fù)雜的配置,并支持更靈活的結(jié)構(gòu)。你可以使用YAML格式定義主機(jī)組及其屬性,并為每個(gè)主機(jī)設(shè)置不同的密碼、端口等。
all:
hosts:
192.168.31.158:
ansible_ssh_user:ubuntu
ansible_ssh_pass:secret_pass
ansible_ssh_port:2222
192.168.31.217:
ansible_ssh_user:ubuntu
ansible_ssh_pass:secret_pass
ansible_ssh_port:2222
children:
webservers:
hosts:
192.168.1.10:{}
192.168.1.11:{}
dbservers:
hosts:
192.168.1.20:
ansible_ssh_user:admin
ansible_ssh_pass:db_pass
ansible_ssh_port:2200
2. 配置 SSH 免密登錄
Ansible默認(rèn)使用SSH連接到遠(yuǎn)程主機(jī),因此要確保能通過(guò)SSH無(wú)密碼登錄到目標(biāo)主機(jī)。你可以使用ssh-keygen生成SSH密鑰對(duì),并將公鑰復(fù)制到目標(biāo)主機(jī):
ssh-keygen -t rsa
ssh-copy-id user@192.168.1.10
四、使用Ansible命令
1. Ansible Ad-hoc 命令
Ansible的命令行工具支持Ad-hoc 命令,這是執(zhí)行單個(gè)任務(wù)的簡(jiǎn)潔方式。例如,你可以使用 ansible 命令來(lái)在目標(biāo)主機(jī)上執(zhí)行操作,如安裝軟件、啟動(dòng)服務(wù)等。
Ping 測(cè)試目標(biāo)主機(jī)
ansible -i hosts.yaml lb -m ping
這條命令會(huì)對(duì)所有主機(jī)執(zhí)行 ping 模塊,測(cè)試主機(jī)是否在線。
root@ansible:~# ansible lb -m shell -a 'update'
192.168.31.217 | FAILED | rc=-1 >>
Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.
192.168.31.158 | FAILED | rc=-1 >>
Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.
出現(xiàn)上述的報(bào)錯(cuò)是因?yàn)槟憧刂贫撕捅豢刂贫说谝淮瓮ㄐ艜r(shí),需要添加指紋??梢灾苯有薷呐渲梦募庉?etc/ansible/ansible.cfg中的 host_key_checking = False 的#去掉即可。
示例:安裝軟件包
ansible webservers -m apt -a "name=nginx state=present" -i hosts
這條命令會(huì)在所有 webservers 組中的主機(jī)上使用 apt 模塊安裝 nginx。
2. 使用Playbook
Playbook是Ansible 的核心功能之一,是一組按順序執(zhí)行的任務(wù)。Playbook使用YAML語(yǔ)法,可以定義更復(fù)雜的配置和操作。
一個(gè)簡(jiǎn)單的 Playbook
創(chuàng)建一個(gè) deploy.yml 的Playbook文件,內(nèi)容如下:
---
-name:InstallandstartNginx
hosts:web
become:yes
tasks:
-name:InstallNginx
apt:
name:nginx
state:present
-name:startNginx
service:
name:nginx
state:started
使用ansible-playbook命令來(lái)執(zhí)行Playbook:
ansible-playbook -i hosts deploy.yml
這條命令會(huì)按照Playbook中定義的順序在web組的目標(biāo)主機(jī)上安裝和啟動(dòng) Nginx。如下圖所示:
總結(jié)
通過(guò)本文的介紹,你已經(jīng)掌握了Ansible的基本概念和使用方法。作為自動(dòng)化運(yùn)維的重要工具,Ansible可以幫助你快速地配置、管理和部署服務(wù)器,極大地提高工作效率。
接下來(lái),你可以通過(guò)以下幾種方式繼續(xù)深入學(xué)習(xí):
- 通過(guò)編寫更多的Playbook,掌握Ansible的模塊和進(jìn)階功能
- 了解Ansible Vault來(lái)管理敏感信息
- 探索Ansible Roles來(lái)組織和復(fù)用配置
Ansible的靈活性和易用性使其成為了現(xiàn)代運(yùn)維工程師必備的技能之一,掌握它將為你的自動(dòng)化運(yùn)維之路鋪平道路。