Ansible – Công cụ Automation đã thay đổi cách vận hành hạ tầng hiện đại
Trong thế giới DevOps và Infrastructure as Code, nếu Terraform được xem là "ông vua Provisioning" thì Ansible chính là một trong những công cụ Configuration Management phổ biến nhất hiện nay. Sự thành công của Ansible đến từ một triết lý rất đơn giản: không cần cài agent trên máy đích nhưng vẫn có thể quản lý hàng nghìn hệ thống một cách tự động hóa.
Ansible là dự án mã nguồn mở được phát triển bởi công ty Ansible, sau đó được Red Hat mua lại và hiện nay thuộc hệ sinh thái IBM. Công cụ này được xây dựng bằng Python và có khả năng quản lý rất nhiều loại hệ thống khác nhau, từ Linux, Windows, thiết bị mạng, hệ thống lưu trữ cho đến các nền tảng Cloud hiện đại.
Điểm khác biệt lớn nhất giữa Ansible và nhiều công cụ Configuration Management khác là mô hình Agentless. Thay vì phải cài đặt Agent trên từng máy chủ như Puppet hay Salt, Ansible chỉ cần một máy điều khiển (Control Node) cài Ansible Engine. Sau đó kết nối tới các máy đích thông qua SSH, NETCONF, REST API hoặc các giao thức quản lý phù hợp để thực hiện công việc.
Các thành phần cốt lõi của Ansible
Ansible được xây dựng dựa trên một số thành phần rất quan trọng.
Inventory
Inventory là nơi khai báo danh sách các hệ thống cần quản lý.
Inventory có thể ở dạng file INI hoặc YAML và chứa:
[routers]
r1.cisco.com
r2.cisco.com
Khi số lượng thiết bị tăng từ vài máy lên hàng nghìn máy, việc quản lý chỉ cần thay đổi Inventory mà không phải sửa Playbook.
Module
Module là "trái tim" của Ansible.
Mỗi Module biết cách tương tác với một loại hệ thống hoặc dịch vụ cụ thể. Một trong những lý do khiến Ansible phổ biến là hàng trăm Module được tích hợp sẵn ngay từ đầu. Ngoài ra cộng đồng còn phát triển thêm rất nhiều Module khác hoặc người dùng có thể tự viết Module bằng Python.
Ví dụ:
Playbook là nơi định nghĩa các công việc cần thực hiện.
Playbook sử dụng định dạng YAML nên khá dễ đọc và dễ bảo trì. Một Playbook có thể chứa nhiều Play (nhóm công việc) và mỗi Play lại chứa nhiều Task khác nhau.
Một điểm thú vị là Ansible thực hiện công việc song song trên nhiều máy chủ. Theo mặc định, Ansible có thể xử lý đồng thời nhiều Node, giúp tăng đáng kể tốc độ triển khai trong các môi trường lớn.
Variables, Templates và khả năng tái sử dụng
Khi triển khai hạ tầng quy mô lớn, việc tái sử dụng cấu hình là vô cùng quan trọng.
Ansible hỗ trợ Variables để tách dữ liệu khỏi logic triển khai. Khi cần thay đổi giá trị, kỹ sư chỉ sửa tại một nơi thay vì chỉnh sửa hàng chục Task khác nhau.
Bên cạnh đó, Template cho phép sinh tự động các file cấu hình dựa trên biến đầu vào.
Ví dụ:
Roles và Collections
Khi Playbook bắt đầu trở nên lớn và phức tạp, Ansible cung cấp cơ chế Role. Role là cách chúng ta đóng gói các thành phần như:
Sau đây là các ví dụ:
Ngoài Role, Ansible còn hỗ trợ tính năng Collection, giúp đóng gói và phân phối Playbook, Module, Plugin và Role theo một chuẩn thống nhất. Đây là xu hướng hiện đại được sử dụng rộng rãi trong các dự án Automation quy mô lớn.
Case Study: Tự động cấu hình mạng cho CentOS
Một ví dụ thực tế là triển khai cấu hình mạng cho hai máy chủ CentOS bằng Ansible. Yêu cầu của bài lab gồm:
Giải pháp được xây dựng theo các bước:
Đầu tiên là chúng ta tạo Inventory chứa hai máy chủ.
Tiếp theo chúng ta xây dựng Template cho file cấu hình mạng. Trong Template chỉ có IP Address là thay đổi theo từng máy.
Các giá trị riêng của từng máy được lưu trong thư mục host_vars, còn các thông số dùng chung như DNS Server hoặc NTP Server được lưu trong group_vars.
Sau đó Playbook sử dụng Module template để sinh file cấu hình và chép xuống máy đích.
Khi file cấu hình được cập nhật, Module shell được sử dụng để restart interface mạng nhằm kích hoạt cấu hình mới.
Đối với NTP, VnPro khuyến nghị sử dụng Role để đóng gói toàn bộ quy trình:
Kiểm tra kết quả triển khai
Sau khi hoàn tất, Playbook được thực thi bằng:
ansible-playbook -i inventory playbook.yml
Ansible sẽ hiển thị chi tiết các Task đang thực hiện và cuối cùng là phần PLAY RECAP. Đây là nơi các kỹ sư DevOps thường nhìn đầu tiên để đánh giá kết quả triển khai.
Một đợt triển khai thành công thường có:
failed=0
unreachable=0
Điều này cho thấy tất cả Node đều truy cập được và toàn bộ Task đã hoàn thành chính xác.
TÓM TẮT BÀI ANSIBLE
Ansible trở thành một trong những công cụ Automation phổ biến nhất hiện nay nhờ sự đơn giản, khả năng mở rộng và đặc biệt là mô hình Agentless. Chỉ với SSH và một số Playbook được thiết kế tốt, đội ngũ DevOps có thể tự động hóa việc quản lý hàng nghìn máy chủ, thiết bị mạng và dịch vụ Cloud.
Trong thực tế, Terraform thường được dùng để tạo hạ tầng, còn Ansible đảm nhiệm việc cấu hình và vận hành sau khi hạ tầng được provision. Sự kết hợp giữa Terraform và Ansible hiện nay được xem là một trong những mô hình Infrastructure as Code phổ biến nhất trong các doanh nghiệp hiện đại. Cám ơn các bạn đã đọc.
#DevOps #Automation #InfrastructureAsCode #Ansible #Terraform #CloudAutomation #PlatformEngineering #NetDevOps #Linux #SRE
Trong thế giới DevOps và Infrastructure as Code, nếu Terraform được xem là "ông vua Provisioning" thì Ansible chính là một trong những công cụ Configuration Management phổ biến nhất hiện nay. Sự thành công của Ansible đến từ một triết lý rất đơn giản: không cần cài agent trên máy đích nhưng vẫn có thể quản lý hàng nghìn hệ thống một cách tự động hóa.
Ansible là dự án mã nguồn mở được phát triển bởi công ty Ansible, sau đó được Red Hat mua lại và hiện nay thuộc hệ sinh thái IBM. Công cụ này được xây dựng bằng Python và có khả năng quản lý rất nhiều loại hệ thống khác nhau, từ Linux, Windows, thiết bị mạng, hệ thống lưu trữ cho đến các nền tảng Cloud hiện đại.
Điểm khác biệt lớn nhất giữa Ansible và nhiều công cụ Configuration Management khác là mô hình Agentless. Thay vì phải cài đặt Agent trên từng máy chủ như Puppet hay Salt, Ansible chỉ cần một máy điều khiển (Control Node) cài Ansible Engine. Sau đó kết nối tới các máy đích thông qua SSH, NETCONF, REST API hoặc các giao thức quản lý phù hợp để thực hiện công việc.
Các thành phần cốt lõi của Ansible
Ansible được xây dựng dựa trên một số thành phần rất quan trọng.
Inventory
Inventory là nơi khai báo danh sách các hệ thống cần quản lý.
Inventory có thể ở dạng file INI hoặc YAML và chứa:
- Danh sách máy chủ
- Nhóm máy chủ (Groups)
- Biến cấu hình (Variables)
[routers]
r1.cisco.com
r2.cisco.com
Khi số lượng thiết bị tăng từ vài máy lên hàng nghìn máy, việc quản lý chỉ cần thay đổi Inventory mà không phải sửa Playbook.
Module
Module là "trái tim" của Ansible.
Mỗi Module biết cách tương tác với một loại hệ thống hoặc dịch vụ cụ thể. Một trong những lý do khiến Ansible phổ biến là hàng trăm Module được tích hợp sẵn ngay từ đầu. Ngoài ra cộng đồng còn phát triển thêm rất nhiều Module khác hoặc người dùng có thể tự viết Module bằng Python.
Ví dụ:
- file
- service
- package
- template
- shell
- network modules
- cloud modules
Playbook là nơi định nghĩa các công việc cần thực hiện.
Playbook sử dụng định dạng YAML nên khá dễ đọc và dễ bảo trì. Một Playbook có thể chứa nhiều Play (nhóm công việc) và mỗi Play lại chứa nhiều Task khác nhau.
Một điểm thú vị là Ansible thực hiện công việc song song trên nhiều máy chủ. Theo mặc định, Ansible có thể xử lý đồng thời nhiều Node, giúp tăng đáng kể tốc độ triển khai trong các môi trường lớn.
Variables, Templates và khả năng tái sử dụng
Khi triển khai hạ tầng quy mô lớn, việc tái sử dụng cấu hình là vô cùng quan trọng.
Ansible hỗ trợ Variables để tách dữ liệu khỏi logic triển khai. Khi cần thay đổi giá trị, kỹ sư chỉ sửa tại một nơi thay vì chỉnh sửa hàng chục Task khác nhau.
Bên cạnh đó, Template cho phép sinh tự động các file cấu hình dựa trên biến đầu vào.
Ví dụ:
- Mỗi server có IP khác nhau.
- DNS Server giống nhau.
- Gateway giống nhau.
Roles và Collections
Khi Playbook bắt đầu trở nên lớn và phức tạp, Ansible cung cấp cơ chế Role. Role là cách chúng ta đóng gói các thành phần như:
- Tasks
- Templates
- Variables
- Handlers
- Files
Sau đây là các ví dụ:
- Role dùng cho triển khai Apache
- Role để triển khai NTP
- Role để triển khai Mail Server
- Role triển khai Kubernetes Worker
Ngoài Role, Ansible còn hỗ trợ tính năng Collection, giúp đóng gói và phân phối Playbook, Module, Plugin và Role theo một chuẩn thống nhất. Đây là xu hướng hiện đại được sử dụng rộng rãi trong các dự án Automation quy mô lớn.
Case Study: Tự động cấu hình mạng cho CentOS
Một ví dụ thực tế là triển khai cấu hình mạng cho hai máy chủ CentOS bằng Ansible. Yêu cầu của bài lab gồm:
- Cấu hình địa chỉ IP
- Default Gateway
- DNS Server
- NTP Server
Giải pháp được xây dựng theo các bước:
Đầu tiên là chúng ta tạo Inventory chứa hai máy chủ.
Tiếp theo chúng ta xây dựng Template cho file cấu hình mạng. Trong Template chỉ có IP Address là thay đổi theo từng máy.
Các giá trị riêng của từng máy được lưu trong thư mục host_vars, còn các thông số dùng chung như DNS Server hoặc NTP Server được lưu trong group_vars.
Sau đó Playbook sử dụng Module template để sinh file cấu hình và chép xuống máy đích.
Khi file cấu hình được cập nhật, Module shell được sử dụng để restart interface mạng nhằm kích hoạt cấu hình mới.
Đối với NTP, VnPro khuyến nghị sử dụng Role để đóng gói toàn bộ quy trình:
- Cài package NTP
- Khởi động service
- Tạo file cấu hình
- Restart dịch vụ
Kiểm tra kết quả triển khai
Sau khi hoàn tất, Playbook được thực thi bằng:
ansible-playbook -i inventory playbook.yml
Ansible sẽ hiển thị chi tiết các Task đang thực hiện và cuối cùng là phần PLAY RECAP. Đây là nơi các kỹ sư DevOps thường nhìn đầu tiên để đánh giá kết quả triển khai.
Một đợt triển khai thành công thường có:
failed=0
unreachable=0
Điều này cho thấy tất cả Node đều truy cập được và toàn bộ Task đã hoàn thành chính xác.
TÓM TẮT BÀI ANSIBLE
Ansible trở thành một trong những công cụ Automation phổ biến nhất hiện nay nhờ sự đơn giản, khả năng mở rộng và đặc biệt là mô hình Agentless. Chỉ với SSH và một số Playbook được thiết kế tốt, đội ngũ DevOps có thể tự động hóa việc quản lý hàng nghìn máy chủ, thiết bị mạng và dịch vụ Cloud.
Trong thực tế, Terraform thường được dùng để tạo hạ tầng, còn Ansible đảm nhiệm việc cấu hình và vận hành sau khi hạ tầng được provision. Sự kết hợp giữa Terraform và Ansible hiện nay được xem là một trong những mô hình Infrastructure as Code phổ biến nhất trong các doanh nghiệp hiện đại. Cám ơn các bạn đã đọc.
#DevOps #Automation #InfrastructureAsCode #Ansible #Terraform #CloudAutomation #PlatformEngineering #NetDevOps #Linux #SRE