Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Terraform, Ansible và Puppet: Ai sẽ tạo hạ tầng? Ai sẽ lo việc cấu hình hạ tầng?

    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, AnsiblePuppet. 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)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à AnsiblePuppet.
    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
    Đây là lý do Terraform và Ansible thường được sử dụng cùng nhau trong rất nhiều pipeline DevOps hiện đại.

    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
    Người quản trị không cần mô tả từng bước. Các công cụ nhóm declarative phổ biến gồm Terraform và Puppet.. Trên thực tế, Ansible ngày nay cũng có nhiều module hoạt động theo kiểu declarative nên được xem là công cụ lai (Hybrid).

    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
    Ansible sẽ kết nối SSH đến các node và thực hiện từng task theo thứ tự. Ví dụ ansible-playbook deploy.yml Sau khi chạy xong, Ansible ngắt kết nối đến hạ tầng và tự dọn dẹp các thư viện. Nếu ai đó chỉnh sửa thủ công cấu hình trên server thì Ansible sẽ không tự động sửa lại cho đến khi playbook được chạy lần tiếp theo.


    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ả
    Quá trình này diễn ra định kỳ. Điểm đặc biệt là nếu quản trị viên sửa thủ công cấu hình trên máy chủ thì Puppet sẽ phát hiện sự khác biệt và tự động đưa hệ thống trở lại trạng thái đã khai báo trong Manifest. Đây chính là sức mạnh của mô hình Desired State Configuration.

    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
    Một kiến trúc DevOps phổ biến hiện nay là:
    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.​
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X