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

  • Ansible

    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:
    • Danh sách máy chủ
    • Nhóm máy chủ (Groups)
    • Biến cấu hình (Variables)
    Ví dụ một nhóm routers có thể bao gồm:
    [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


    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.
    Thay vì tạo hàng trăm file cấu hình riêng biệt, Ansible chỉ cần một Template và bộ Variables tương ứng cho từng máy chủ.


    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
    thành một đơn vị logic hoàn chỉnh để tái sử dụng nhiều lần.
    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
    Chỉ cần gọi Role trong Playbook là toàn bộ quy trình được thực thi tự động.
    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
    Điểm đáng chú ý là chỉ cần cài Ansible trên máy quản trị. Hai máy chủ CentOS hoàn toàn không cần cài thêm bất kỳ Agent nào.
    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ụ
    Điểm hay là các Module như package và service hoạt động theo kiểu khai báo trạng thái (state-based). Nếu package đã tồn tại hoặc service đang chạy thì Ansible sẽ không thực hiện thay đổi không cần thiết.

    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
    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