iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0

今天來介紹一下常在公司使用來部署 code 到 prod 的工具 Ansible!

What is Ansible

Ansible is an open source IT automation engine that automates provisioning, configuration management, application deployment, orchestration, and many other IT processes.
https://ithelp.ithome.com.tw/upload/images/20241007/20150927ss9p2mbsif.png

簡單來說 Ansible 就是一個自動化組態管理工具,主要是用 Python 寫的
根據官方文件的介紹有幾個主要的 use case,它可以做到

  • Eliminate repetition and simplify workflows
    • 消除簡單和重複的工作流程
  • Manage and maintain system configuration
    • 簡單快速的管理和維護系統的設定
  • Continuously deploy complex software
    • 持續複雜的軟體部署
  • Perform zero-downtime rolling updates
    • 實現 prod 0 停機的滾動式更新

Ansible 在設計上就遵守以下準則:

  • Agent-less architecture
    避免在 IT 基礎設施上安裝額外的軟體,降低維護成本。

  • Simplicity
    自動化 Playbook 使用簡單明瞭的 YAML 語法,程式碼讀起來就像文件一樣。Ansible 也是去中心化的,透過 SSH 存取遠端機器。

  • Scalability and flexibility
    透過模組化設計,能輕鬆快速擴展自動化的系統,支援多種平台和系統。

  • Idempotence and predictability
    具有冪等性。即使多次執行 Playbook,Ansible 也不會進行任何變動。

主要的名詞解釋

Playbook:

可以想像成一本結合很多 Play (劇本)和 task (任務)的書。
可以管理 node ,執行各種 task 和 play。
每個 Playbook 都是以 .yaml 格式編輯的文件。
可以結合 Jinja2 模板進行編輯。

Play

Play 通常用於特定目的,就像一本劇本一樣,指示系統執行一系列動作。

E.g.:

  • health_check (檢查系統是否正常)
  • database_setting (資料庫的設定)

Task

Task 定義了 Play 中的步驟。
E.g.:

  • Install the postgresql (安裝 postgresql) 這就可能是 database setting 中會執行的其中一個步驟
name: Install database
apt:
    pkg:
        -postgresql
    state: preset
  • create work directory (建立工作資料夾)

Role

Role(角色) 是一種將 Playbook 的任務進行結構化和模組化的方法,你可以把他想像成負責出演劇本的演員,每個演員專注於某個特定的任務,它們分工合作來完成一個大型的自動化任務。通過使用 Role,我們可以將複雜的 Playbook 拆解成更小的單元,提高可維護和可重用性。
一般來說會有一個 roles 的資料夾,裡面會把不同服務或應用區分開來,如 database
這個角色就只會安裝、設定和重啟資料庫服務的 tasks。

roles/
└── database/
    ├── tasks/

Inventory

Inventory 是定義和管理遠端伺服器或節點的地方,Ansible 透過它來知道哪些機器需要進行操作。

  • all: vars 這裡定義一些 global varible
  • databasebackend 為 主機組,每一組主機可以有多個主機,如 backend-1backend-2,不同的主機組可以執行不同的 task。
[all: vars]  
ansible_host=192.168.1.247

[database] 
database-1

[backend]
backend-1

Module

模組是 Ansible 提供的操作方法,用於完成具體的任務。
他有提供一些常用的指令像是 create workdir
除了使用 command: 直接下指令外也可以使用內建的 file 模組

# command 的方法
command: mkdir {{folder)name}}

# 內建模組的方法
file:
    path: {{work_dir}}
    state: directory
    mode: 0755
    
# 使用 apt 套件安裝 postgresql
apt: pkg=postgresql state=present 

Ansible 有許多模組可以使用,更多詳細的可以查看 官方文件

Reference


上一篇
Day-22 | Message Queue - RabbitMQ (2) feat. Python
下一篇
Day-24 | 自動化部署的好朋友 Ansible(2) - 簡單部署 MySQL 服務
系列文
埋藏在後端工程下的地雷與寶藏30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言