Việc quản trị thủ công từng server đơn lẻ sẽ trở thành rào cản lớn khi hệ thống mở rộng và Ansible chính là giải pháp mình đã áp dụng để đồng bộ hóa cấu hình trên hàng trăm node chỉ với một câu lệnh duy nhất. Những hướng dẫn trong bài viết này không dừng lại ở định nghĩa mà đi thẳng vào quy trình triển khai Playbook thực tế mà mình đang vận hành để tối ưu hóa thời gian quản trị. Đây là lộ trình chi tiết giúp bạn làm chủ khả năng tự động hóa trên Linux, từ bước thiết lập môi trường đến thực thi các tác vụ phức tạp một cách chuẩn xác.
Những điểm chính
Đối với mình, Ansible không chỉ là công cụ tự động hóa mà còn là giải pháp giúp quản lý hạ tầng một cách nhất quán, giảm thao tác thủ công và hạn chế sai sót khi vận hành hệ thống. Để giúp bạn hiểu rõ hơn về Ansible và cách sử dụng trong thực tế, bài viết dưới đây sẽ cung cấp các thông tin gồm:
- Khái niệm: Hiểu rõ Ansible là công cụ tự động hóa mã nguồn mở do Red Hat hỗ trợ, quản lý cấu hình server, triển khai ứng dụng và điều phối tác vụ IT trên nhiều hệ thống.
- Tính năng chính: Hiểu rõ các chức năng cốt lõi như quản lý cấu hình, cung cấp tài nguyên, triển khai ứng dụng và tự động hóa mạng, qua đó thấy được khả năng tự động hóa toàn diện của Ansible từ hạ tầng đến ứng dụng.
- Ưu điểm: Nhận diện các ưu điểm nổi bật như agentless, cú pháp YAML dễ đọc và tính bảo mật cao, giúp bạn tự tin chọn Ansible để tối ưu quy trình tự động hóa.
- Cách thức hoạt động: Nắm rõ cơ chế vận hành dựa trên Control Node, Playbook và Module, từ đó hiểu cách Ansible điều phối tác vụ trên nhiều hệ thống.
- Yêu cầu cần thiết: Xác định trước các thành phần như Control Node, Managed Hosts và SSH key để chuẩn bị môi trường cài đặt và kết nối ổn định.
- Hướng dẫn sử dụng: Làm chủ các bước thực hành từ cài đặt, thiết lập Inventory đến chạy lệnh ad-hoc để nhanh chóng áp dụng Ansible vào quản lý hệ thống.
- Câu hỏi thường gặp: Giải đáp các thắc mắc liên quan đến Ansible.
Ansible là gì?
Ansible là công cụ tự động hóa mã nguồn mở do Red Hat hỗ trợ, quản lý cấu hình server, triển khai ứng dụng và điều phối tác vụ IT trên nhiều hệ thống Windows, Linux, mạng, cloud. Ansible áp dụng mô hình agentless, sử dụng SSH cho Linux hoặc WinRM cho Windows để thực thi lệnh mà không cần phần mềm bổ sung trên máy đích. Ansible chuyển quy trình thành tập lệnh YAML dễ đọc, áp dụng Infrastructure as Code để tự động hóa công việc lặp lại và quản lý hạ tầng.
Ansible đơn giản hóa quản lý hàng loạt máy chủ từ một điểm trung tâm, thay thế Chef hay Puppet vốn yêu cầu agent phức tạp. Ansible giảm lỗi con người, tiết kiệm thời gian trong môi trường quy mô lớn. Hiện nay, Ansible ngày càng phát triển mạnh mẽ nhờ sự ưa chuộng của cộng đồng toàn cầu.

Các tính năng chính của Ansible
Ansible sở hữu bộ tính năng cốt lõi mạnh mẽ, hỗ trợ tự động hóa toàn diện từ hạ tầng đến ứng dụng. Các tính năng nổi bật của Ansible gồm:
- Quản lý cấu hình: Đảm bảo server và ứng dụng đạt trạng thái chuẩn hóa, đồng bộ trên toàn hệ thống.
- Cung cấp tài nguyên: Tạo và khởi chạy máy ảo, container trên cloud như AWS, Azure, OpenStack hoặc môi trường nội bộ.
- Triển khai ứng dụng: Tự động đẩy code lên các môi trường dev, staging và production một cách liền mạch.
- Điều phối quy trình: Xử lý workflow đa tầng, kết nối nhiều server và dịch vụ phức tạp.
- Tự động hóa mạng: Cấu hình, giám sát thiết bị từ Cisco, Juniper và các nhà cung cấp khác.

Ưu điểm khi sử dụng Ansible
Ansible nổi trội nhờ các ưu điểm cốt lõi sau, giúp vượt qua hạn chế của công cụ tự động hóa truyền thống như:
- Agentless: Loại bỏ nhu cầu agent trên máy đích, giảm gánh nặng bảo trì và tăng tốc triển khai.
- Dễ tiếp cận: YAML làm ngôn ngữ chính tạo playbook rõ ràng, trực quan cho mọi lập trình viên.
- Mã nguồn mở mạnh mẽ: Hưởng lợi từ cộng đồng rộng lớn cùng sự đầu tư từ Red Hat, bao quát đa dạng nhiệm vụ IT.
- Bảo mật cao: Dựa hoàn toàn vào SSH chuẩn mực với thiết kế tối giản, ưu tiên độ ổn định lâu dài.

Cách thức hoạt động của Ansible
Ansible vận hành theo mô hình Push-based và kiến trúc Agentless. Thay vì cài đặt phần mềm lên từng máy khách, Ansible hoạt động dựa trên một quy trình logic tuần tự từ máy điều khiển đến các máy đích:
1. Các thành phần nền tảng
Để bắt đầu, Ansible thiết lập một hệ sinh thái đơn giản bao gồm:
- Control Node: Máy chủ trung tâm (thường chạy Linux) cài đặt Ansible. Đây là nơi lưu trữ mã nguồn tự động hóa và phát lệnh điều khiển.
- Managed Nodes: Tập hợp các server, thiết bị mạng hoặc thực thể cloud được quản lý từ xa mà không cần cài đặt bất kỳ phần mềm Ansible nào.
- Inventory: Tệp danh bạ chứa danh sách địa chỉ IP và phân nhóm các Managed Nodes.
2. Quy trình thực thi nhiệm vụ
Khi bạn khởi chạy một lệnh, Ansible thực hiện điều phối qua các bước sau:
- Đọc kịch bản: Ansible tiếp nhận các hướng dẫn từ tệp YAML. Playbooks đóng vai trò như bản thiết kế, mô tả trạng thái mong muốn của hệ thống một cách dễ hiểu.
- Kích hoạt Module: Ansible chia nhỏ kịch bản thành các Modules – Những đơn vị thực thi chuyên biệt (như cài gói qua apt, sao chép file copy, hay quản lý service).
- Thiết lập kết nối: Control Node mở một kết nối tạm thời qua giao thức tiêu chuẩn: SSH cho các hệ thống Linux/Unix và WinRM cho Windows.
- Thực thi và phản hồi: Các Module được đẩy xuống máy đích, thực hiện nhiệm vụ và trả về kết quả (thành công, thất bại hoặc không thay đổi). Ngay sau khi hoàn tất, các mã lệnh tạm thời sẽ được xóa sạch trên máy đích, đảm bảo hệ thống luôn gọn gàng và bảo mật.
3. Nguyên lý Idempotency
Điểm cốt lõi trong cách hoạt động của Ansible là tính Idempotency. Trước khi thực hiện bất kỳ thay đổi nào, Ansible sẽ kiểm tra trạng thái hiện tại của Managed Node. Nếu tài nguyên đã đúng với mô tả trong Playbook, Ansible sẽ bỏ qua và không thực hiện thêm thao tác thừa, giúp tránh gây xung đột hoặc lỗi hệ thống khi chạy lệnh nhiều lần.

Yêu cầu cần thiết để cài đặt Ansible trên Ubuntu 20.04
Máy chủ cần đáp ứng các điều kiện sau trước khi tiến hành cài đặt Ansible:
- Ansible Control Node là máy chạy Ansible trên Ubuntu 20.04, kết nối và điều khiển các host qua SSH. Control Node có thể là máy cục bộ hoặc server từ xa.
- Quyền người dùng non-root yêu cầu thiết lập cho tài khoản sử dụng Ansible. Với server từ xa làm Control Node, kích hoạt firewall bằng ufw và mở quyền truy cập cho non-root user để tăng cường bảo mật.
- SSH key cần tạo và cấu hình cho người dùng Ansible.
- Ansible Hosts bao gồm một hoặc nhiều server Ubuntu 20.04 từ xa làm mục tiêu tự động hóa. Bạn cần thêm public key từ Control Node vào file authorized_keys của user trên host (user có thể là root hoặc non-root với quyền sudo).

Hướng dẫn sử dụng Ansible
Các bước cài đặt và sử dụng Ansible trên Ubuntu 20.04 bao gồm cài phần mềm, thiết lập Inventory, kiểm tra kết nối và chạy lệnh ad hoc để quản lý hệ thống hiệu quả.
Bước 1: Cài đặt Ansible
Bạn hãy cài đặt Ansible trên máy Ubuntu đóng vai trò Ansible Control Node, sử dụng cho việc điều khiển và quản lý server qua SSH. Tại Control Node, bạn nhập lệnh sau để thêm official project’s PPA vào danh sách nguồn phần mềm của hệ thống:
sudo apt-add-repository ppa:ansible/ansibleSau đó, bạn nhấn ENTER khi được yêu cầu xác nhận thêm PPA. Tiếp theo, bạn hãy cập nhật lại danh sách gói trên hệ thống bằng lệnh:
sudo apt updateSau khi hoàn tất cập nhật, bạn tiến hành cài đặt Ansible:
sudo apt install ansibleAnsible Control Node lúc này đã có đầy đủ thành phần cần thiết để quản lý các host, bước tiếp theo là thêm host vào Inventory File nhằm phục vụ việc điều khiển tập trung.
Bước 2: Thiết lập Inventory File
Inventory File lưu thông tin các host được Ansible quản lý có thể chứa từ một server đến hàng nghìn server và cho phép sắp xếp theo nhóm hoặc nhóm con phục vụ tổ chức hạ tầng. Ngoài ra, Inventory File còn hỗ trợ khai báo biến áp dụng cho từng host hoặc nhóm cụ thể, dùng trong playbooks và templates, ví dụ biến ansible_python_interpreter ảnh hưởng trực tiếp đến cách playbook thực thi.
Để sửa Inventory mặc định trên Ansible Control Node, mở file /etc/ansible/hosts bằng trình soạn thảo quen thuộc:
sudo nano /etc/ansible/hostsAnsible thường cung cấp sẵn Inventory mặc định tại /etc/ansible/hosts. Tuy vậy, bạn có thể tạo Inventory riêng ở vị trí khác và chỉ định đường dẫn bằng tham số -i khi chạy lệnh Ansible hoặc playbook nhằm tách biệt môi trường cho từng project. Cách làm này hạn chế nguy cơ playbook chạy nhầm lên nhóm server không mong muốn, đồng thời giúp quản lý cấu hình rõ ràng hơn.
Inventory mặc định đi kèm một số ví dụ mô tả cách định nghĩa nhóm và host, bạn có thể tham khảo khi viết Inventory mới. Ví dụ sau định nghĩa nhóm [servers] gồm ba server được đánh nhãn server1, server2, server3, thay địa chỉ IP bằng IP thực của Ansible hosts trong hạ tầng:
[servers]
server 1 ansible_host=203.0.113.111
server 2 ansible_host=203.0.113.111
server 3 ansible_host=203.0.113.111
[all:vars]
ansible_python_interpreter=/usr/bin/python3Nhóm con [all:vars] thiết lập tham số ansible_python_interpreter dùng chung cho tất cả host trong Inventory này, bảo đảm remote server sử dụng /usr/bin/python3 thay vì /usr/bin/python, phiên bản Python 2.7 không còn hiện diện trên các bản Ubuntu mới.
Sau khi cập nhật xong, lưu và đóng file bằng tổ hợp phím CTRL+X, tiếp theo nhấn Y rồi ENTER để xác nhận thay đổi. Để kiểm tra lại nội dung Inventory, bạn sử dụng lệnh:
ansible-inventory --list -yKết quả trả về tương tự ví dụ minh họa dưới đây nhưng chứa thông tin server thực tế trong hệ thống:
all:
chidlren:
servers
hosts:
server1:
ansible_host: 203.0.113.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 203.0.113.112
ansible_python_interpreter: /usr/bin/python3
server3:
ansible_host: 203.0.113.113
ansible_python_interpreter: /usr/bin/python3
ungrouped: {}Khi Inventory đã được thiết lập hợp lệ, bước kế tiếp là kiểm tra khả năng kết nối đến các Ansible hosts.
Bước 3: Kiểm tra kết nối
Sau khi hoàn thành Inventory, bạn cần xác minh Ansible có thể kết nối đến server được khai báo và thực thi lệnh thông qua SSH. Trong ví dụ hướng dẫn, tài khoản root trên Ubuntu được sử dụng do thường xuất hiện sẵn trên server mới, tuy nhiên nếu Ansible hosts đã có user sử dụng sudo thì nên ưu tiên tài khoản đó.
Tham số -u dùng để chỉ định user trên hệ thống remote, nếu không cung cấp thì Ansible sử dụng user hiện tại trên Control Node làm mặc định khi kết nối đến host được quản lý. Từ máy local hoặc Ansible Control Node, bạn chạy lệnh kiểm tra:
ansible all -m ping -u rootLệnh trên sử dụng ping module tích hợp trong Ansible để kiểm tra kết nối đến toàn bộ node trong Inventory mặc định với quyền root. Ping module sẽ thực hiện ba kiểm tra chính gồm khả năng truy cập host, tính hợp lệ của thông tin SSH và khả năng chạy module Ansible bằng Python trên host đích. Ví dụ phản hồi nhận được có dạng:
server1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}Nếu là lần đầu kết nối đến server bằng SSH, hệ thống sẽ yêu cầu xác nhận tính xác thực của host, bạn nhập yes và nhấn ENTER để chấp nhận. Khi nhận phản hồi từ host, Ansible đã sẵn sàng thực thi lệnh và playbook trên server tương ứng. Trường hợp không nhận được phản hồi thành công, bạn cần kiểm tra lại thông tin đăng nhập và thử các cách kết nối khác mà Ansible hỗ trợ.
Bước 4: Chạy lệnh Ad-Hoc
Sau khi đảm bảo Ansible Control Node giao tiếp được với host, bạn có thể bắt đầu sử dụng lệnh Ad-Hoc cùng playbook để quản lý hệ thống. Bất kỳ câu lệnh nào có thể chạy qua SSH trên remote server đều có thể đưa vào lệnh Ansible cho các host được định nghĩa trong Inventory. Ví dụ kiểm tra dung lượng ổ đĩa trên toàn bộ server:
ansible all -a "df -h" -u rootPhần “df -h” trong lệnh có thể thay bằng bất kỳ câu lệnh phù hợp với nhu cầu kiểm tra hoặc thao tác từ xa. Bên cạnh đó, các module của Ansible cũng có thể được gọi trực tiếp bằng lệnh ad hoc, tương tự khi sử dụng ping module để kiểm tra kết nối. Ví dụ sử dụng module apt để cài phiên bản mới nhất của vim trên tất cả server trong Inventory:
ansible all -m apt -a "name=vim state=latest" -u rootKhi cần nhắm tới các nhóm hoặc host cụ thể, bạn có thể chỉ định tên group, subgroup hoặc host alias trong câu lệnh Ansible. Ví dụ sau kiểm tra uptime cho từng host thuộc nhóm servers đã khai báo trong Inventory:
ansible servers -a "uptime" -u rootTrường hợp cần chỉ định rõ nhiều host, phân tách tên host bằng dấu hai chấm trong cùng câu lệnh:
ansible server1:server2 -m ping -u rootCách tiếp cận này giúp quản lý server linh hoạt và tiết kiệm thời gian khi vận hành hạ tầng với số lượng máy lớn.
Hiệu năng thực tế của Ansible không nằm ở việc thực thi các lệnh đơn lẻ mà ở khả năng chuẩn hóa toàn bộ hạ tầng thông qua các kịch bản có tính lặp lại cao. Với kinh nghiệm làm việc thực tế của mình nhận thấy, một sai sót kỹ thuật phổ biến là lạm dụng các lệnh Ad-Hoc cho những tác vụ phức tạp, dẫn đến khó khăn trong việc truy vết cấu hình về sau. Chiến lược tối ưu là chuyển dịch hoàn toàn sang sử dụng Playbooks, nơi mọi thay đổi được định nghĩa rõ ràng và lưu trữ như mã nguồn.
Câu hỏi thường gặp
Ansible playbook là gì?
Ansible playbook là tệp YAML mô tả danh sách host, tác vụ và trạng thái mong muốn của hệ thống để Ansible tự động thực hiện.
Ansible GitHub dùng để làm gì?
Kho GitHub của Ansible lưu mã nguồn dự án, theo dõi lỗi, đóng góp code và xem thay đổi qua các phiên bản.
Ansible inventory là gì?
Inventory là danh sách host và nhóm host Ansible quản lý, kèm biến cấu hình cho từng máy hoặc từng nhóm.
Ansible module là gì?
Module là khối chức năng thực hiện một nhiệm vụ cụ thể như quản lý gói, file, service hoặc tài nguyên cloud.
Ansible server là gì?
Ansible server thường chỉ máy Control Node cài Ansible để điều khiển host, đôi khi cũng dùng để gọi chung các server do Ansible quản lý.
Ansible mang đến cách tiếp cận rõ ràng và nhất quán cho việc tự động hóa hạ tầng, giúp quản lý cấu hình, triển khai ứng dụng và vận hành hệ thống trở nên chủ động, an toàn và dễ mở rộng. Với khả năng tận dụng các playbook linh hoạt, kết hợp cùng cộng đồng phát triển mạnh mẽ, Ansible phù hợp cho cả môi trường nhỏ lẫn hệ thống doanh nghiệp quy mô lớn, tạo nền tảng vững chắc cho quá trình hiện đại hóa và tối ưu hóa vận hành IT.




