效率提升神器:Ansible 入門,開啟自動化運維之旅
隨著DevOps 和自動化運維的普及,越來越多的IT運維工程師開始使用工具來簡化繁瑣的手動操作。Ansible作為一款強大的自動化運維工具,因其簡潔、無代理以及易于使用的特點,受到了廣泛的關注。在這篇文章中,我們將帶你了解Ansible的基礎知識,從安裝到基礎命令、Playbook 的編寫,幫助你快速入門自動化運維的世界。
一、什么是Ansible?
Ansible是一個開源的自動化工具,用于配置管理、應用部署和任務執行。它使用簡潔的YAML語法編寫 Playbook,不需要安裝客戶端代理,并且支持SSH協議與遠程主機進行通信,適合大規模基礎設施管理。
Ansible的主要特點:
- 無代理模式:Ansible不需要在被管理的機器上安裝任何代理,所有操作都通過SSH進行通信。
- 簡單易用:使用YAML作為配置語言,語法簡單且可讀性強。
- 強大的模塊支持:Ansible提供了豐富的內置模塊,可以執行各種任務,如文件操作、服務管理、系統配置等。
- 跨平臺支持:Ansible支持Linux、Windows等多種操作系統。
- 高度可擴展:支持自定義模塊和插件,能夠滿足復雜的運維需求。
二、安裝 Ansible
1. 系統要求
Ansible支持Linux、macOS 和 Windows 系統(通過 WSL)。在Ubuntu系統上進行安裝是最為常見的做法。確保你的系統滿足以下要求:
- Python 2.7或 Python 3.x
- pip3(Python 包管理工具)
2. 安裝步驟
因為Ansible是用Python編寫的,我們建議您通過pip來安裝它。執行如下命令,這樣操作起來會更加方便哦!
pip3 install ansible
3. 驗證安裝
安裝完成后,運行以下命令驗證 Ansible 是否安裝成功:
ansible --version
如果返回版本號,如下圖所示,說明安裝成功。
三、配置和管理主機
1. 主機清單文件
Ansible使用主機清單文件來定義被管理的主機。主機清單可以是一個簡單的文件,里面列出所有需要管理的服務器地址,Ansible會根據這個文件來確定任務執行的目標主機。
- 主機清單有兩種格式:
- INI格式(默認格式)
(1) YAML格式
INI格式示例:
INI格式是Ansible的默認清單文件格式。你可以使用不同的主機組來組織主機,并為每個主機定義不同的屬性。 創建一個名為 hosts 的主機清單文件,內容如下:
[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格式中,可以通過在主機后面指定變量來配置不同的密碼和端口。變量通常以 ansible_* 開頭,后跟屬性名稱。常見的屬性有:
- ansible_ssh_user:SSH 登錄用戶名
- ansible_ssh_pass:SSH 登錄密碼
- ansible_ssh_port:SSH 端口(默認是 22)
- ansible_ssh_private_key_file:私鑰文件路徑
(2) YAML 格式示例:
YAML格式的主機清單通常用于更復雜的配置,并支持更靈活的結構。你可以使用YAML格式定義主機組及其屬性,并為每個主機設置不同的密碼、端口等。
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默認使用SSH連接到遠程主機,因此要確保能通過SSH無密碼登錄到目標主機。你可以使用ssh-keygen生成SSH密鑰對,并將公鑰復制到目標主機:
ssh-keygen -t rsa
ssh-copy-id user@192.168.1.10
四、使用Ansible命令
1. Ansible Ad-hoc 命令
Ansible的命令行工具支持Ad-hoc 命令,這是執行單個任務的簡潔方式。例如,你可以使用 ansible 命令來在目標主機上執行操作,如安裝軟件、啟動服務等。
Ping 測試目標主機
ansible -i hosts.yaml lb -m ping
這條命令會對所有主機執行 ping 模塊,測試主機是否在線。
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.
出現上述的報錯是因為你控制端和被控制端第一次通信時,需要添加指紋。可以直接修改配置文件,編輯/etc/ansible/ansible.cfg中的 host_key_checking = False 的#去掉即可。
示例:安裝軟件包
ansible webservers -m apt -a "name=nginx state=present" -i hosts
這條命令會在所有 webservers 組中的主機上使用 apt 模塊安裝 nginx。
2. 使用Playbook
Playbook是Ansible 的核心功能之一,是一組按順序執行的任務。Playbook使用YAML語法,可以定義更復雜的配置和操作。
一個簡單的 Playbook
創建一個 deploy.yml 的Playbook文件,內容如下:
---
-name:InstallandstartNginx
hosts:web
become:yes
tasks:
-name:InstallNginx
apt:
name:nginx
state:present
-name:startNginx
service:
name:nginx
state:started
使用ansible-playbook命令來執行Playbook:
ansible-playbook -i hosts deploy.yml
這條命令會按照Playbook中定義的順序在web組的目標主機上安裝和啟動 Nginx。如下圖所示:
總結
通過本文的介紹,你已經掌握了Ansible的基本概念和使用方法。作為自動化運維的重要工具,Ansible可以幫助你快速地配置、管理和部署服務器,極大地提高工作效率。
接下來,你可以通過以下幾種方式繼續深入學習:
- 通過編寫更多的Playbook,掌握Ansible的模塊和進階功能
- 了解Ansible Vault來管理敏感信息
- 探索Ansible Roles來組織和復用配置
Ansible的靈活性和易用性使其成為了現代運維工程師必備的技能之一,掌握它將為你的自動化運維之路鋪平道路。