Rất nhiều kỹ sư DevOps và Automation mới bắt đầu học Infrastructure as Code (IaC) thường nhầm lẫn giữa Terraform, Ansible và Puppet. Cả ba đều là công cụ tự động hóa, nhưng mục đích sử dụng lại hoàn toàn khác nhau. Điểm quan trọng nhất mà chúng ta cần hiểu là sự khác biệt giữa hai tác vụ Orchestration (Điều phối/Triển khai tài nguyên) và Configuration Management (Quản lý cấu hình). Khi hiểu sự khác nhau này thì việc phân loại các công cụ cũng trở nên dễ dàng hơn.
Đầu tiên, Configuration Management tập trung vào việc quản lý các tài nguyên đã tồn tại. Các công việc phổ biến bao gồm cài đặt phần mềm, triển khai file cấu hình, quản lý service và đảm bảo hệ thống luôn ở trạng thái mong muốn. Hai công cụ nổi tiếng trong nhóm này là Ansible và Puppet.
Còn Orchestration tập trung vào việc tạo và khởi tạo tài nguyên hạ tầng. Ví dụ như tạo VM, VPC, Network, Storage, Load Balancer hoặc Kubernetes Cluster. Terraform là công cụ tiêu biểu trong nhóm này. Terraform đảm trách việc tạo máy chủ. Còn Ansible hoặc Puppet cấu hình máy chủ đó. Một quy trình IaC điển hình thường diễn ra như sau:
Procedural vs Declarative
Ngoài việc phân biệt Orchestration và Configuration Management, chúng ta còn phải hiểu hai cách tiếp cận phổ biến trong tự động hóa:
CÁCH KHAI BÁO Procedural
Procedural mô tả các bước cần thực hiện để đạt được kết quả mong muốn. Ví dụ: "Tạo 10 VM." Nếu sau đó chúng ta đổi ý và muốn giảm còn 3 VM thì phải viết thêm các bước cụ thể (nghĩa là chúng ta dạy cho hệ thống "how to do that": " Hãy Xóa 7 VM cho anh nhe!" Ansible thường được xem là công cụ procedural vì playbook mô tả trình tự các task chi tiết phải thực hiện.
Ví dụ 3 task:
- Install nginx
- Copy config file
- Start nginx service
HÌNH THỨC KHAI BÁO Declarative
Chúng ta chỉ (Declarative) khai báo/mô tả trạng thái mong muốn cuối cùng của hạ tầng. Ví dụ: Anh muốn hạ tầng có:
vm_count = 10
Nếu muốn còn 3 VM:
vm_count = 3
Terraform sẽ tự tính toán:
Ansible hoạt động như thế nào?
Ansible sử dụng YAML Playbook, kiến trúc Agentless, Mô hình Push.
Điều này có nghĩa là không cần cài agent trên máy đích. Quy trình sử dụng Ansible:
Puppet hoạt động như thế nào?
Puppet sử dụng Declarative Language, Client/Server Architecture, Pull Model. Mỗi máy được quản lý sẽ cài một Puppet Agent. Một Puppet Master chịu trách nhiệm quản lý toàn bộ hạ tầng. Quy trình hoạt động của tool Puppet:
So sánh Push vs Pull
Một trong những khác biệt quan trọng nhất giữa Ansible và Puppet là mô hình vận hành.
Ansible (Push Model)
Máy điều khiển chủ động đẩy cấu hình đến các node.
Control Node
|
v
Server A
Server B
Server C
Muốn cập nhật phải chạy playbook.
Puppet (Pull Model)
Các Agent chủ động lấy cấu hình từ Master theo chu kỳ.
Server A ----\
Server B ----- > Puppet Master
Server C ----/
Node sẽ tự đồng bộ cấu hình mà không cần người quản trị chạy lệnh thủ công. Tổng kết
Khi xây dựng hạ tầng hiện đại bằng IaC, hãy nhớ nguyên tắc đơn giản:
Terraform → Ansible → Application
Terraform tạo VM hoặc Kubernetes Cluster, Ansible cấu hình hệ điều hành và dịch vụ, sau đó ứng dụng được triển khai lên hạ tầng đã sẵn sàng.
Đây cũng là mô hình được sử dụng rộng rãi trong các môi trường Cloud, Data Center, DevOps và NetDevOps hiện đại.
Câu hỏi ôn tập:
Công cụ nào thường được sử dụng cho vai trò Orchestration?
A. Ansible
B. Puppet
C. Terraform
D. Bash
Đáp án: ???Hãy gõ đáp án của bạn. Nếu đúng sẽ có phần quà đặc biệt.
Đầu tiên, Configuration Management tập trung vào việc quản lý các tài nguyên đã tồn tại. Các công việc phổ biến bao gồm cài đặt phần mềm, triển khai file cấu hình, quản lý service và đảm bảo hệ thống luôn ở trạng thái mong muốn. Hai công cụ nổi tiếng trong nhóm này là Ansible và Puppet.
Còn Orchestration tập trung vào việc tạo và khởi tạo tài nguyên hạ tầng. Ví dụ như tạo VM, VPC, Network, Storage, Load Balancer hoặc Kubernetes Cluster. Terraform là công cụ tiêu biểu trong nhóm này. Terraform đảm trách việc tạo máy chủ. Còn Ansible hoặc Puppet cấu hình máy chủ đó. Một quy trình IaC điển hình thường diễn ra như sau:
- Terraform tạo hạ tầng trên AWS, Azure, GCP hoặc VMware.
- Sau khi VM được tạo thành công, Ansible hoặc Puppet sẽ:
- Cài đặt Nginx, Apache hoặc Docker
- Cấu hình hệ điều hành
- Khởi động dịch vụ
- Triển khai ứng dụng
Procedural vs Declarative
Ngoài việc phân biệt Orchestration và Configuration Management, chúng ta còn phải hiểu hai cách tiếp cận phổ biến trong tự động hóa:
CÁCH KHAI BÁO Procedural
Procedural mô tả các bước cần thực hiện để đạt được kết quả mong muốn. Ví dụ: "Tạo 10 VM." Nếu sau đó chúng ta đổi ý và muốn giảm còn 3 VM thì phải viết thêm các bước cụ thể (nghĩa là chúng ta dạy cho hệ thống "how to do that": " Hãy Xóa 7 VM cho anh nhe!" Ansible thường được xem là công cụ procedural vì playbook mô tả trình tự các task chi tiết phải thực hiện.
Ví dụ 3 task:
- Install nginx
- Copy config file
- Start nginx service
HÌNH THỨC KHAI BÁO Declarative
Chúng ta chỉ (Declarative) khai báo/mô tả trạng thái mong muốn cuối cùng của hạ tầng. Ví dụ: Anh muốn hạ tầng có:
vm_count = 10
Nếu muốn còn 3 VM:
vm_count = 3
Terraform sẽ tự tính toán:
- VM nào cần tạo thêm
- VM nào cần xóa
Ansible hoạt động như thế nào?
Ansible sử dụng YAML Playbook, kiến trúc Agentless, Mô hình Push.
Điều này có nghĩa là không cần cài agent trên máy đích. Quy trình sử dụng Ansible:
- Xây dựng Inventory
- Viết Playbook
- Chạy Playbook
Puppet hoạt động như thế nào?
Puppet sử dụng Declarative Language, Client/Server Architecture, Pull Model. Mỗi máy được quản lý sẽ cài một Puppet Agent. Một Puppet Master chịu trách nhiệm quản lý toàn bộ hạ tầng. Quy trình hoạt động của tool Puppet:
- Agent thu thập thông tin hệ thống (Facts)
- Agent gửi yêu cầu đến Puppet Master
- Master biên dịch Manifest thành Catalog
- Catalog được gửi lại Agent
- Agent áp dụng cấu hình
- Agent gửi báo cáo kết quả
So sánh Push vs Pull
Một trong những khác biệt quan trọng nhất giữa Ansible và Puppet là mô hình vận hành.
Ansible (Push Model)
Máy điều khiển chủ động đẩy cấu hình đến các node.
Control Node
|
v
Server A
Server B
Server C
Muốn cập nhật phải chạy playbook.
Puppet (Pull Model)
Các Agent chủ động lấy cấu hình từ Master theo chu kỳ.
Server A ----\
Server B ----- > Puppet Master
Server C ----/
Node sẽ tự đồng bộ cấu hình mà không cần người quản trị chạy lệnh thủ công. Tổng kết
Khi xây dựng hạ tầng hiện đại bằng IaC, hãy nhớ nguyên tắc đơn giản:
- Terraform → Provision Infrastructure
- Ansible → Configure Infrastructure
- Puppet → Maintain Desired State
Terraform → Ansible → Application
Terraform tạo VM hoặc Kubernetes Cluster, Ansible cấu hình hệ điều hành và dịch vụ, sau đó ứng dụng được triển khai lên hạ tầng đã sẵn sàng.
Đây cũng là mô hình được sử dụng rộng rãi trong các môi trường Cloud, Data Center, DevOps và NetDevOps hiện đại.
Câu hỏi ôn tập:
Công cụ nào thường được sử dụng cho vai trò Orchestration?
A. Ansible
B. Puppet
C. Terraform
D. Bash
Đáp án: ???Hãy gõ đáp án của bạn. Nếu đúng sẽ có phần quà đặc biệt.