Ansible là gì?

Bài toán đặt ra

Tôi có một ứng dụng muốn cài đặt lên nhiều con server khác nhau, tôi có thể thực hiện việc này một cách thủ công, đó là SSH tới từng con server và chạy các command line khác nhau, nhưng việc này tốn khá nhiều thời gian và công sức. Liệu có cách nào tự động hoá việc này, chẳng hạn như chỉ cần chạy một lệnh và tất cả các server sẽ được cấu hình hoàn chỉnh?

Định nghĩa Ansible

Ansible là phần mềm nguồn mở cho việc cấu hình, cài đặt, và triển khai ứng dụng cho phép biến hạ tầng phần mềm thành code (infrastructure as code). – wikipedia

Cụ thể:

  • Provisioning: Ansible giúp cài đặt các server khác nhau.
  • Configuration management: Thay đổi cấu hình ứng dụng, hệ điều hành hoặc thiết bị, bật tắt service, cài đặt hay cập nhật ứng dụng, thực thi bảo mật, hoặc các cấu hình khác.
  • Application deployment: Tự động deploy ứng dụng lên các môi trường khác nhau.

Ansible có thể chạy trên hệ điều hành Unix hay Windows và dùng kết nối SSH hoặc Windows Remote Management để thực thi.

Một số ví dụ sử dụng Ansible

Cấu hình webserver

Điều tuyệt vời ở Ansible là bạn không cần biết các lệnh để làm một task nào đó, mà bạn chỉ cần chỉ rõ trạng thái của hệ thống mà bạn muốn và Ansible sẽ lo phần còn lại. Chẳng hạn ở ví dụ sau bạn muốn các web server chạy bản Apache mới nhất, bạn có thể dùng một playbook như dưới đây:

---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:  
  - name: ensure apache is at the latest version
    yum: name=httpd state=latest
  - name: write the apache config file
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf
    notify:
    - restart apache
  - name: ensure apache is running (and enable it at boot)
    service: name=httpd state=started enabled=yes
  handlers:
    - name: restart apache
      service: name=httpd state=restarted

Ở ví dụ này playbook sẽ cài đặt hoặc cập nhật Apache ở dòng “yum: name=httpd state=latest”. Bạn chỉ cần chỉ rõ tên của software package (httpd) và trạng thái mong muốn (latest) và Ansible sẽ làm phần còn lại.

Ví dụ file playbook của bạn tên là my_playbook.yml, bạn sẽ run như sau:

ansible-playbook my_playbook.yml

Tự động cài đặt và cấu hình software cho Macbook

Khi bạn có nhiều máy Mac, hoặc tậu một con Macbook mới để thay cho con Mac đã quá “luống tuổi”, thì điều bạn mong muốn nhất có lẽ là cấu hình và cài đặt máy mới giống với con máy cũ bạn đã quá quen thuộc.

Có một project trên Github dùng Ansible để tự động hoá quá trình cài đặt này, với một lưu ý “nhỏ” là một số thao tác vẫn cần thực hiện thủ công, chẳng hạn cài đặt mail box hoặc điền licence cho các ứng dụng trả phí.

Bạn có thể truy cập project tại đây

Tại sao dùng Ansible

Có nhiều công cụ tự động hoá ngoài Ansible, kể cả các công cụ đã phát triển trước đó như Puppet hay Chef, vậy tại sao lại dùng Ansible thay vì những công cụ đó?

Câu trả lời là sự đơn giản. Vì Ansible rất đơn giản.

Ansible dùng YAML cho file cấu hình (playbook) trong khi Puppet hay Chef dùng Ruby – một ngôn ngữ khó học hơn. Hơn nữa Ansible không dùng agent (agentless), tức là không cần phải cài đặt một ứng dụng quản lý (agent) trên mỗi hệ thống bạn muốn quản lý. Ansible chỉ yêu cầu hệ thống đó có Python (với Linux server) hoặc PowerShell (với Windows server) và SSH.

Kết luận

Ansible là một công cụ tự động hoá mạnh mẽ mà đơn giản, nó có thể giúp tăng tốc công việc của cá nhân bạn hay công ty bạn. Hơn nữa nếu bạn muốn trở thành DevOps Engineer thì Ansible là một công cụ hoàn hảo để bắt đầu.

Leave a comment