Trong cộng đồng DevOps, hai công cụ cấu hình và cung cấp phổ biến là Terraform và Ansible luôn cạnh tranh gay gắt với nhau. DevOps là một phương pháp phát triển ứng dụng phổ biến và đương nhiên các nhà phát triển muốn có những công cụ tốt nhất theo ý của họ. Ngoài ra, mức độ phổ biến ngày càng tăng của Cơ sở hạ tầng dưới dạng mã (Infrastructure as Code - IaC) càng khiến sự cạnh tranh giữa Terraform và Ansible thêm khốc liệt.
Vì thế, trong bài viết này, Quản Trị Mạng sẽ cùng các bạn so sánh sự khác biệt giữa Terraform và Ansible. Bên cạnh đó, chúng ta cũng xem xét các trường hợp nên và không nên sử dụng chúng.
Đầu tiên, chúng ta sẽ tìm hiểu một chút về cả hai sản phẩm.
Terraform là gì?
Theo trang web mô tả sản phẩm, Terraform là một công cụ cơ sở hạ tầng dưới dạng mã (IaC) cho phép bạn xây dựng, thay đổi và phiên bản hóa cơ sở hạ tầng một cách an toàn và hiệu quả. Điều này bao gồm các thành phần cấp thấp như phiên bản điện toán, lưu trữ và kết nối mạng cũng như các thành phần cấp cao như các điểm truy cập DNS, tính năng SaaS... Terraform có thể quản lý cả nhà cung cấp dịch vụ hiện có và giải pháp nội bộ tùy chỉnh.
Bạn có thể tìm hiểu thêm về Terraform tại đây: Terraform là gì? Những tính năng chính, tại sao nó lại quan trọng và cách sử dụng
Ansible là gì?
Theo Red Had, Ansible là một công cụ tự động hóa CNTT nguồn mở với khả năng tự động hóa việc cung cấp, quản lý cấu hình, triển khai ứng dụng, điều phối và nhiều quy trình CNTT khác.
Ansible là một công cụ quản lý cấu hình tập trung vào việc triển khai và cung cấp các ứng dụng với IaC.
Những điểm tương đồng và khác biệt giữa Terraform và Ansible
Trước khi bắt đầu so sánh Terraform và Ansible, chúng ta cần lưu ý rằng những công cụ này được thiết kế để thực hiện những việc khác nhau và bộ tính năng của chúng không hoàn toàn giống nhau. Do đó, bài viết này không phải là bài so sánh trực tiếp như so sánh Microsoft Excel với Google Sheets.
Dưới đây là bảng so sánh những điểm tương đồng và khác biệt giữa Terraform và Ansible:
Terraform | Ansible | |
Danh mục | Công cụ điều phối, cung cấp | Công cụ quản lý cấu hình |
Cách tiếp cận mặc định | Tuân theo cách tiếp cận khai báo IaC | Thực hiện theo một cách tiếp cận thủ tục |
Ngôn ngữ | Tuyên bố | Mệnh lệnh |
Tiêu điểm | Cung cấp cơ sở hạ tầng | Quản lý cấu hình trong cơ sở hạ tầng |
Nổi tiếng nhất về | Phối hợp thiết lập cơ sở hạ tầng đám mây và dịch vụ đám mây từ con số 0 | Định cấu hình máy chủ bằng phần mềm và bản cập nhật chính xác trên đám mây đã được định cấu hình |
Triển khai | Có thể được sử dụng để triển khai cân bằng tải, lưu trữ, điện toán và VPC | Có thể triển khai các ứng dụng trên đám mây |
Cung cấp | Chuyên cung cấp hạ tầng. Không hỗ trợ cung cấp bare-metal theo mặc định | Hỗ trợ hạn chế cho việc cung cấp cơ sở hạ tầng. Hỗ trợ việc cung cấp cho các máy chủ bare-metal |
Quản lý vòng đời | Nó nhận thức được vòng đời và duy trì trạng thái triển khai. Rất phụ thuộc vào vòng đời hoặc quản lý trạng thái | Không có nhận thức về vòng đời. Không có bất kỳ quản lý nào về vòng đời |
Can thiệp của người dùng | Sau khi đưa ra một hướng dẫn kết thúc, có thể thực hiện tất cả các bước đểtrình bài đầu ra cuối cùng | Người dùng phải ra lệnh cho từng bước để đạt được kết quả cuối cùng |
Đóng gói và tạo khuôn mẫu | Không cung cấp đóng gói và kuoon mẫu tốt hơn | Cung cấp đầy đủ cho việc đóng gói và tạo khuôn mẫu |
Không có Agent? | Đúng | Đúng |
Không có Master? | Đúng | Đúng |
Cú pháp | HCL (Hashicorp Configuration Language) | YAML (YAML không phải là ngôn ngữ đánh dấu) |
Cơ sở hạ tầng | Cơ sở hạ tầng bất biến. Được coi là lý tưởng để giữ cho môi trường ở trạng thái ổn định | Cơ sở hạ tầng có thể thay đổi. Sửa chữa các vấn đề thay vì thay thế toàn bộ cơ sở hạ tầng |
Bây giờ, chúng ta sẽ xem xét kỹ hơn một số điểm tương đồng và khác biệt cụ thể giữa Terraform và Ansible.
Điểm tương đồng giữa Terraform và Ansible
Cả Terraform và Ansible đều cho phép cung cấp cơ sở hạ tầng bằng IaC do vậy chúng ta có thể nói rằng cả hai đều được sử dụng làm nền tảng IaC.
Ngoài ra, cả hai công cụ đều có thể thực thi các lệnh từ xa trên một máy ảo mới được tạo. Hay nói cách khác, cả hai đều không cần tác nhân (agent).
Điều phối và cung cấp là khi người dùng tạo cơ sở hạ tầng, bao gồm máy ảo, cơ sở dữ liệu, thành phần mạng và các tài nguyên khác. Mặt khác, quản lý cấu hình tự động cài đặt thành phần theo phiên bản, các tác vụ cấu hình hệ điều hành, cấu hình mạng và tường lửa cũng như các tác vụ liên quan. Mặc dù cả Terraform và Ansible đều có thể thực hiện các tác vụ quản lý cấu hình nhưng Ansible thực hiện công việc đó tốt hơn nhiều.
Cả hai đều hoạt động với các API đám mây và đều là nguồn mở. Các nhà phát triển cũng có thể sử dụng đồng thời Terraform và Ansible do đó hai công cụ này bổ sung cho nhau thay vì thay thế cho nhau. Chúng ta sẽ nói thêm về ý tưởng này trong phần sau của bài viết.
Sự khác biệt giữa Terraform và Ansible
Có rất nhiều khác biệt giữa Terraform và Ansible. Dưới đây là những khác biệt chính, được trình bày theo kiểu có tổ chức hơn:
- Tuyên bố so với mệnh lệnh: Điều đầu tiên chúng ta cần nói đó là cách tiếp cận tuyên bố so với mệnh lệnh. Ví dụ: Nếu bạn muốn tạo 10 máy chủ web bằng Terraform, bạn sẽ nói: "Tôi muốn tạo 10 máy chủ web". Đó là cách tiếp cận kiểu tuyên bố. Tuy nhiên, nếu bạn đang sử dụng Ansible, bạn sẽ nói: "Nếu các máy chủ web chưa tồn tại, hãy tạo 1 máy chủ trước, sau đó tạo 9 máy chủ còn lại". Đó là cách tiếp cận kiểu mệnh lệnh.
- Không thay đổi so với có thể thay đổi: Bạn không thể thay đổi máy chủ không cho phép thay đổi. Người dùng muốn thực hiện thay đổi trong máy chủ ảo không được phép thay đổi sẽ phải hủy phiên bản cũ và thay thế bằng phiên bản mới đã bao gồm các thay đổi. Một máy chủ ảo có thể thay đổi cho phép người dùng thực hiện các thay đổi mà không làm hỏng toàn bộ máy chủ. Ansible nhấn mạnh khả năng biến đổi trong khi Terraform được coi là bất biến. Tuy nhiên, những điều kiện này là mặc định; cả hai công cụ này đều có thể tiến hành các hoạt động có thể thay đổi và có các yếu tố bất biến ở mức độ này hay mức độ khác.
- Cung cấp: Terraform hướng tới tự động hóa cơ sở hạ tầng và diễn giải các mô hình được mô tả trong HCL. Với Terraform, các yếu tố môi trường bắt buộc (ví dụ: mạng, máy chủ...) được mô tả riêng biệt, cùng với mối quan hệ của chúng với nhau. Sau đó, Terraform đánh giá và xác định mô hình, phát triển một kế hoạch dựa trên các phụ thuộc và cung cấp các lệnh được tối ưu hóa cho IaaS. Các lần chạy lặp đi lặp lại sẽ không có tác dụng gì nếu không có thay đổi nào về môi trường hay kế hoạch. Tuy nhiên, mọi cập nhật trong kế hoạch hoặc môi trường sẽ đồng bộ hóa cơ sở hạ tầng đám mây với ý định của kế hoạch mới.
Ansible tuân theo cách tiếp cận theo thủ tục hoặc mệnh lệnh. Người dùng tạo "playbooks" được đánh giá thông qua cách tiếp cận từ trên xuống dưới và được thực hiện theo trình tự. Playbook thường chịu trách nhiệm định cấu hình các máy chủ và thiết bị mạng riêng lẻ để hỗ trợ quy trình thủ tục. Ansible cũng có thể cung cấp cơ sở hạ tầng đám mây nhưng bản chất thủ tục của nó giới hạn việc triển khai cơ sở hạ tầng quy mô lớn.
Vì Ansible lý tưởng cho việc quản lý cấu hình nên nó không giới hạn ở các ứng dụng đám mây; nó có thể định cấu hình máy chủ bare-metal và các máy chủ ảo.
Khi nào không nên sử dụng Terraform hoặc Ansible?
Dưới đây là các tình huống mà bạn không nên sử dụng Terraform hoặc Ansible:
Ansible: Nếu sự trôi cấu hình là một vấn đề với bạn, đừng sử dụng Ansible. Trôi cấu hình xảy ra khi người dùng thay đổi cài đặt để các phiên bản mới của cơ sở hạ tầng ảo "trôi" khỏi cấu hình ban đầu.
Terraform: Nếu bạn đang sử dụng image để cung cấp máy ảo, bạn có thể phải cần tới hàng tá image để chứa các máy chủ ứng dụng, máy chủ nhắn tin, máy chủ web... Terraform không cho phép bạn tự thay đổi image nên bạn cần có một image có trạng thái chính xác mà bạn muốn. Nếu bạn đang thực hiện 3 thay đổi mỗi ngày trong 1 tuần làm việc của mình sẽ tạo ra 15 bản sao của máy chủ. Điều này sẽ khiến không gian lưu trữ bị tiêu tốn rất nhiều. Khi đó, bạn không nên sử dụng Terraform.
Kết luận: Chọn Terraform hay Ansible?
Terraform hay Ansible tốt hơn? Câu trả lời phụ thuộc vào những gì bạn đang tìm kiếm và những tính năng nào quan trọng với bạn. Nếu đang tìm kiếm một công cụ thân thiện với người dùng với khả năng lập lịch trình tốt và tích hợp Docker mượt mà thì hãy đến với Terraform. Mặt khác, nếu quan tâm nhiều hơn đến bảo mật, chức năng ACL tốt và thứ gì đó hoạt động tốt với các framework tự động truyền thống thì Ansible là câu trả lời dành cho bạn.
Ngoài ra, bạn còn có thể kết hợp Terraform và Ansible. Lý do là vì Ansible thực hiện xuất sắc công việc cung cấp và quản lý cấu hình. Trong khi đó, Terraform vượt trội trong việc cung cấp cơ sở hạ tầng trên nhiều nền tảng đám mây với sự hỗ trợ cho nhiều nhà cung cấp.
Bạn có thể kết hợp Terraform để tận dụng các điểm mạnh trong phối hợp của nó, tạo ra các tài nguyên và dịch vụ cần thiết. Sau đó, bạn chuyển sang Ansible để quản lý cấu hình cơ sở hạ tầng của bạn và tận hưởng những thứ tốt nhất mà cả hai công cụ này mang lại.
Quản Trị mạng hy vọng rằng bài viết này sẽ có ích đối với bạn!