歡迎來到「50 天內的 50 個 DevOps 工具」系列的第 30 天!今天,我們將探討 Ansible,它是 DevOps 工具包中最重要的工具之一。本部落格將向您介紹 Ansible 的基礎知識,分解其關鍵元件並向您展示如何從簡單的範例開始。我們會讓事情變得簡單,使其成為初學者的完美起點。
Ansible 是一種開源自動化工具,可簡化設定管理、應用程式部署和編排等任務。它的設計簡單但功能強大,可讓您自動執行重複性任務並更有效地管理您的基礎架構。
無代理: Ansible 不需要在遠端系統上安裝任何代理,這減少了開銷。
人類可讀的 YAML Playbook: Ansible 使用 YAML(另一種標記語言)編寫易於閱讀和編寫的 Playbook。
冪等:您可以多次執行同一劇本,而不必擔心意外的更改。
無代理架構:由於 Ansible 是無代理程式的,因此無需在客戶端系統上安裝任何額外的軟體,從而減少了開銷和潛在的安全風險。
簡單的語法: Ansible 使用 YAML 作為其 playbook,易於閱讀和編寫,甚至對於自動化新手來說也很容易使用。
冪等性: Ansible 確保無論目前狀態如何,都能達到所需的狀態。這意味著多次執行劇本不會導致問題或重複操作。
廣泛的社群支援: Ansible 擁有龐大且活躍的社區,擁有豐富的角色、模組和劇本,可重複使用和客製化以滿足您的需求。
可擴展性:無論是管理幾台伺服器還是數千台伺服器,Ansible 都可以很好地擴展,使其適合各種規模的組織。
庫存:這是 Ansible 管理的主機(伺服器)清單。庫存可以是靜態的(在文件中定義)或動態的(由腳本產生)。
模組:模組是 Ansible 的主力。它們在遠端主機上執行,以執行安裝套件、複製檔案或管理服務等任務。
Playbooks: Playbooks 是 Ansible 的設定、部署和編排語言。它們以 YAML 編寫,描述了要在主機上執行的一系列任務。
角色:角色可讓您將劇本分解為可重複使用的元件,從而更輕鬆地管理和組織大型專案。
變數:變數用於儲存可在整個劇本中重複使用的值。它們提供了靈活性,允許您自訂劇本而無需硬編碼值。
處理程序:處理程序是特殊任務,僅在被其他任務觸發時執行。它們通常用於重新啟動服務之類的事情。
讓我們從在控制節點上安裝 Ansible 開始。安裝過程非常簡單,並且根據您的作業系統而略有不同。
在 Ubuntu/Debian 上安裝 Ansible
sudo apt update
sudo apt install ansible -y
在 CentOS/RHEL 上安裝 Ansible
sudo yum install epel-release -y
sudo yum install ansible -y
驗證安裝
安裝後,您可以透過執行以下命令來驗證 Ansible 是否已正確安裝:
ansible --version
讓我們建立一個簡單的劇本來在遠端伺服器上安裝 Nginx。我們將從定義庫存開始。
第 1 步:建立庫存文件
建立一個名為hosts的檔案:
[webservers]
34.42.111.35
34.42.111.66
此清單檔案定義了一個名為 Webservers 的群組,其中包含兩個伺服器。
第 2 步:編寫劇本
接下來,我們將編寫一個劇本來在這些伺服器上安裝和啟動 Nginx。
建立一個名為 nginx_setup.yml 的檔案:
---
- name: Install Nginx on web servers
hosts: webservers
become: yes
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
- name: Start Nginx service
service:
name: nginx
state: started
enabled: true
名稱:對劇本或任務的作用的人類可讀的描述。
主機:指定應執行 playbook 的主機群組(來自清單)。
成為:指示 Ansible 應該使用提升的權限(如 sudo)。
任務:列出 Ansible 將要執行的步驟。在這裡,我們正在安裝 Nginx 並確保服務在啟動時啟動並啟用。
第 3 步:執行 Playbook
若要執行該劇本,請執行以下命令:
ansible-playbook -i hosts nginx_setup.yml
此指令告訴 Ansible 在主機清單檔案中定義的主機上執行 nginx_setup.yml 中的任務。
考慮一個場景,您需要在多台伺服器上安裝一組軟體包。手動執行此操作非常耗時且容易出錯。借助 Ansible,您可以輕鬆地自動執行此任務。
這是一個安裝多個軟體包的簡單手冊:
---
- name: Install essential packages
hosts: all
become: yes
tasks:
- name: Install packages
apt:
name:
- git
- curl
- htop
state: present
在此劇本中,Ansible 在清單中列出的所有伺服器上安裝 git、curl 和 htop。 apt 模組確保每個軟體包都已安裝。
想像一下,您需要在多個伺服器上建立一個新使用者並將它們指派給特定的群組。在每台伺服器上手動執行此任務將非常乏味。有了 Ansible,一切變得輕而易舉。
您可以這樣做:
---
- name: Create a new user
hosts: all
become: yes
tasks:
- name: Create user "devuser"
user:
name: devuser
state: present
groups: sudo
此劇本在所有託管伺服器上建立一個新用戶 devuser 並將它們新增至 sudo 群組。
一致性: Ansible 確保您的系統配置一致,從而降低配置漂移的風險。
效率:自動化重複性任務可以騰出時間處理更重要的工作。
可擴充性:無論是管理少量伺服器還是數千台伺服器,Ansible 都可以輕鬆擴充。
靈活性: Ansible 的模組化方法可讓您根據需要自訂和擴充其功能。
Ansible 是一款功能強大且易於使用的工具,可大幅簡化基礎架構的管理。只需幾行程式碼,您就可以自動執行複雜的任務,確保整個環境的一致性和可靠性。無論您是設定伺服器、部署應用程式還是管理配置,Ansible 都可以幫助您更有效率地完成工作。
明天,我們將深入探討更進階的 Ansible 主題,探索可以將您的自動化提升到新境界的功能。敬請關注!
👉請務必在 LinkedIn 上關注我以獲取最新動態: Shiivam Agnihotri