Kiến thức Hữu ích 😍

Cài đặt Ansible trên Ubuntu 20.04: Hướng dẫn chi tiết từ A đến Z


Trong thế giới quản trị hệ thống hiện đại, tự động hóa không còn là một lựa chọn mà đã trở thành yêu cầu bắt buộc. Việc quản lý thủ công hàng chục, thậm chí hàng trăm máy chủ không chỉ tốn thời gian mà còn tiềm ẩn nhiều rủi ro sai sót. Ansible nổi lên như một công cụ tự động hóa hàng đầu, giúp các kỹ sư hệ thống và lập trình viên đơn giản hóa mọi quy trình. Tuy nhiên, nhiều người dùng, đặc biệt là những ai mới làm quen, vẫn gặp không ít khó khăn khi bắt đầu cài đặt công cụ mạnh mẽ này trên một hệ điều hành phổ biến như Ubuntu 20.04. Bài viết này được tạo ra để giải quyết chính xác vấn đề đó. Chúng tôi sẽ hướng dẫn bạn từng bước chi tiết, từ việc chuẩn bị môi trường, cài đặt Ansible một cách chuẩn xác, cho đến cấu hình cơ bản và xử lý các lỗi thường gặp. Hãy cùng AZWEB khám phá cách làm chủ Ansible trên Ubuntu 20.04 để tối ưu hóa hiệu suất công việc của bạn.

Giới thiệu về Ansible và Ubuntu 20.04

Trước khi đi sâu vào các bước kỹ thuật, việc hiểu rõ về công cụ và nền tảng chúng ta sắp làm việc là vô cùng quan trọng. Ansible và Ubuntu 20.04 là một cặp đôi hoàn hảo để xây dựng một hệ thống tự động hóa mạnh mẽ và ổn định.

Ansible là gì?

Ansible là một công cụ tự động hóa mã nguồn mở được phát triển bởi Red Hat. Điểm khác biệt lớn nhất và cũng là ưu điểm vượt trội của Ansible so với các công cụ khác như Puppet hay Chef là kiến trúc “agentless” – không cần cài đặt bất kỳ phần mềm (agent) nào trên các máy chủ được quản lý (client). Giao tiếp được thực hiện hoàn toàn qua giao thức SSH là gì (cho Linux/Unix) hoặc WinRM (cho Windows), giúp việc triển khai trở nên cực kỳ đơn giản và nhanh chóng.

Ansible sử dụng ngôn ngữ YAML (YAML Ain’t Markup Language) để viết các kịch bản tự động hóa, được gọi là “Playbook”. YAML có cú pháp rất gần gũi với ngôn ngữ tự nhiên, dễ đọc và dễ viết ngay cả với những người không chuyên về lập trình. Nhờ vậy, bạn có thể định nghĩa các tác vụ phức tạp như cài đặt phần mềm, quản lý cấu hình, triển khai ứng dụng, và điều phối các luồng công việc (orchestration) một cách tường minh và hiệu quả.

Hình minh họa

Ubuntu 20.04 – Phiên bản LTS ổn định

Ubuntu 20.04, với tên mã “Focal Fossa”, là một phiên bản LTS (Long-Term Support – Hỗ trợ Dài hạn) của hệ điều hành Ubuntu. Các phiên bản LTS được phát hành hai năm một lần và nhận được sự hỗ trợ cập nhật bảo mật và vá lỗi trong suốt 5 năm từ Canonical. Điều này mang lại sự ổn định và tin cậy vượt trội so với các phiên bản thông thường, vốn chỉ được hỗ trợ trong 9 tháng.

Đối với một hệ thống tự động hóa, sự ổn định của máy chủ điều khiển (Control Node) – nơi cài đặt Ansible – là yếu tố sống còn. Việc lựa chọn Ubuntu 20.04 LTS đảm bảo rằng bạn có một nền tảng vững chắc, ít bị ảnh hưởng bởi những thay đổi đột ngột và luôn được bảo vệ bởi các bản vá bảo mật mới nhất. Đây chính là lý do tại sao Ubuntu 20.04 là môi trường lý tưởng để cài đặt và vận hành Ansible trong các hệ thống từ nhỏ đến lớn.

Chuẩn bị môi trường trước khi cài đặt

Một sự chuẩn bị kỹ lưỡng là chìa khóa cho quá trình cài đặt suôn sẻ. Trước khi cài đặt Ansible, chúng ta cần đảm bảo hệ điều hành Ubuntu 20.04 được cập nhật và có đủ các gói phụ thuộc cần thiết.

Cập nhật hệ thống

Bước đầu tiên và quan trọng nhất là cập nhật toàn bộ hệ thống. Việc này giúp đảm bảo bạn có được danh sách gói phần mềm mới nhất từ các kho lưu trữ và các bản vá bảo mật quan trọng, tránh các xung đột phụ thuộc có thể xảy ra trong quá trình cài đặt.

Hãy mở Terminal và chạy lệnh sau:

sudo apt update && sudo apt upgrade -y

Lệnh sudo apt update sẽ tải về danh sách các gói phần mềm mới nhất từ các kho chứa của Ubuntu. Sau đó, lệnh sudo apt upgrade -y sẽ tự động nâng cấp tất cả các gói đã cài đặt trên hệ thống lên phiên bản mới nhất. Tùy chọn -y giúp tự động xác nhận mọi câu hỏi, giúp quá trình diễn ra liền mạch. Bạn cũng cần chắc chắn rằng máy chủ có kết nối internet ổn định để quá trình tải về không bị gián đoạn.

Hình minh họa

Cài đặt các gói phụ thuộc

Ansible được xây dựng dựa trên ngôn ngữ lập trình Python. Do đó, việc cài đặt Python và một số gói quản lý phần mềm là điều bắt buộc để Ansible có thể hoạt động. Ubuntu 20.04 thường đã cài sẵn Python 3, nhưng chúng ta cần cài thêm một gói quan trọng là software-properties-common.

Gói software-properties-common cung cấp các công cụ để quản lý các kho phần mềm, đặc biệt là PPA (Personal Package Archives), mà chúng ta sẽ sử dụng để cài đặt Ansible ở bước tiếp theo. Hãy chạy lệnh sau để cài đặt:

sudo apt install software-properties-common -y

Việc chuẩn bị môi trường Python đầy đủ và các công cụ quản lý kho phần mềm sẽ giúp quá trình cài đặt Ansible từ PPA chính thức diễn ra một cách trơn tru, đảm bảo bạn nhận được phiên bản Ansible mới nhất và tương thích hoàn toàn với hệ thống của mình.

Các bước cài đặt Ansible trên Ubuntu 20.04

Sau khi môi trường đã sẵn sàng, chúng ta sẽ tiến hành cài đặt Ansible. Phương pháp được khuyến khích nhất là sử dụng PPA chính thức do đội ngũ Ansible cung cấp, vì nó đảm bảo bạn luôn có phiên bản mới và ổn định nhất.

Sử dụng PPA chính thức của Ansible

PPA (Personal Package Archive) là một kho phần mềm đặc biệt cho phép các nhà phát triển phân phối các phiên bản phần mềm mới nhất trực tiếp đến người dùng Ubuntu. Sử dụng PPA chính thức của Ansible sẽ tốt hơn so với kho mặc định của Ubuntu, vốn thường chứa các phiên bản cũ hơn.

Đầu tiên, hãy thêm PPA của Ansible vào hệ thống của bạn bằng lệnh sau:

sudo add-apt-repository –yes –update ppa:ansible/ansible

Lệnh này sẽ thêm kho lưu trữ ppa:ansible/ansible vào danh sách nguồn phần mềm của bạn và tự động chạy apt update để làm mới danh sách gói. Khi PPA đã được thêm, bạn có thể tiến hành cài đặt Ansible một cách dễ dàng thông qua apt:

sudo apt install ansible -y

Hình minh họa

Hệ thống quản lý gói apt sẽ tự động xử lý việc tải về Ansible và tất cả các gói phụ thuộc cần thiết từ PPA mà bạn vừa thêm. Quá trình này rất nhanh chóng và đảm bảo tính toàn vẹn của gói cài đặt.

Kiểm tra phiên bản Ansible sau khi cài đặt

Để xác nhận rằng Ansible đã được cài đặt thành công và kiểm tra phiên bản hiện tại, hãy chạy lệnh sau trong Terminal:

ansible –version

Nếu cài đặt thành công, bạn sẽ thấy một loạt thông tin hiển thị trên màn hình, bao gồm:

  • ansible [core X.Y.Z]: Phiên bản của Ansible core.
  • config file = /etc/ansible/ansible.cfg: Đường dẫn đến file cấu hình mặc định.
  • configured module search path: Nơi Ansible tìm kiếm các module.
  • ansible python module location: Đường dẫn thư viện Python của Ansible.
  • executable location = /usr/bin/ansible: Đường dẫn file thực thi chính.
  • python version = 3.X.X: Phiên bản Python đang được Ansible sử dụng.

Hình minh họa

Việc nhìn thấy những thông tin này là một dấu hiệu tốt, khẳng định Ansible đã được cài đặt đúng cách và sẵn sàng để bạn bắt đầu tự động hóa các tác vụ của mình. Đây là một bước kiểm tra quan trọng trước khi chuyển sang phần cấu hình.

Thiết lập file hosts để quản lý máy chủ từ xa

Sau khi cài đặt thành công, bước tiếp theo là cấu hình để Ansible biết nó cần quản lý những máy chủ nào. Điều này được thực hiện thông qua một file inventory, hay còn gọi là file hosts.

Cấu trúc file hosts của Ansible

File hosts mặc định của Ansible nằm tại /etc/ansible/hosts. Đây là một file văn bản đơn giản theo định dạng INI, nơi bạn liệt kê địa chỉ IP hoặc tên miền của các máy chủ bạn muốn quản lý. Bạn có thể nhóm các máy chủ lại với nhau để dễ dàng thực thi lệnh trên một nhóm cụ thể.

Ví dụ, bạn có thể tạo các nhóm như [webservers][dbservers]. Điều này rất hữu ích khi bạn muốn chạy một tác vụ chỉ trên các máy chủ web mà không ảnh hưởng đến máy chủ cơ sở dữ liệu.

Đây là một ví dụ về cấu trúc file /etc/ansible/hosts:

[webservers] web1.azweb.vn ansible_host=192.168.1.10 web2.azweb.vn ansible_host=192.168.1.11 [dbservers] db1.azweb.vn ansible_host=192.168.1.20 [all:vars] ansible_user=azadmin ansible_ssh_private_key_file=~/.ssh/id_rsa

Trong ví dụ trên, chúng ta định nghĩa hai nhóm máy chủ. ansible_host là một biến để chỉ định địa chỉ IP kết nối. Phần [all:vars] cho phép bạn định nghĩa các biến áp dụng cho tất cả các máy chủ trong file inventory, như user và khóa SSH để đăng nhập.

Hình minh họa

Kiểm tra kết nối với máy chủ từ xa

Để đảm bảo máy chủ Ansible (Control Node) có thể kết nối đến các máy chủ được quản lý (Managed Nodes), bạn cần chắc chắn rằng khóa SSH công khai của Control Node đã được thêm vào file ~/.ssh/authorized_keys trên các Managed Nodes.

Sau khi thiết lập file hosts và cấu hình SSH, bạn có thể sử dụng module ping của Ansible để kiểm tra kết nối. Module này không phải là lệnh ping ICMP thông thường, mà nó sẽ thực hiện một kết nối SSH, chạy một đoạn mã Python nhỏ trên máy chủ từ xa và trả về kết quả.

Chạy lệnh sau từ Control Node:

ansible -m ping all

Nếu kết nối thành công, bạn sẽ nhận được phản hồi “pong” màu xanh lá cây cho mỗi máy chủ:

web1.azweb.vn | SUCCESS => { “changed”: false, “ping”: “pong” } db1.azweb.vn | SUCCESS => { “changed”: false, “ping”: “pong” }

Nếu bạn gặp lỗi màu đỏ, các nguyên nhân phổ biến thường liên quan đến quyền truy cập SSH, sai tên người dùng, hoặc tường lửa chặn kết nối trên cổng 22. Việc kiểm tra kết nối thành công ở bước này là rất quan trọng trước khi bạn bắt đầu viết các Playbook phức tạp hơn.

Hình minh họa

Các thiết lập cấu hình cơ bản để sử dụng Ansible hiệu quả

Để tối ưu hóa quy trình làm việc và tăng cường bảo mật, việc tinh chỉnh file cấu hình ansible.cfg và hiểu cách quản lý biến là rất cần thiết.

Cấu hình ansible.cfg

File ansible.cfg là nơi bạn có thể tùy chỉnh hầu hết các hành vi mặc định của Ansible. Ansible sẽ tìm kiếm file này theo thứ tự ưu tiên: trong thư mục dự án hiện tại (./ansible.cfg), trong thư mục chính của người dùng (~/.ansible.cfg), và cuối cùng là file hệ thống (/etc/ansible/ansible.cfg).

Một số tùy chọn quan trọng bạn nên biết:

  • inventory: Chỉ định đường dẫn đến file hosts của bạn. Điều này rất hữu ích khi bạn quản lý nhiều dự án với các inventory khác nhau. Ví dụ: inventory = /path/to/my/project/hosts.
  • remote_user: Thiết lập người dùng mặc định để kết nối SSH, thay vì phải khai báo ansible_user trong file hosts.
  • private_key_file: Đường dẫn đến khóa SSH cá nhân của bạn, ví dụ: private_key_file = /home/user/.ssh/id_rsa.
  • forks: Số lượng tiến trình song song Ansible sẽ chạy. Tăng giá trị này (ví dụ: forks = 10) có thể tăng tốc đáng kể việc thực thi trên nhiều máy chủ.
  • ask_pass: Nếu đặt là true, Ansible sẽ luôn hỏi mật khẩu SSH. Mặc định là false và nên sử dụng xác thực bằng khóa SSH để bảo mật hơn.

Hình minh họa

Việc tạo một file ansible.cfg riêng cho mỗi dự án là một thói quen tốt, giúp môi trường làm việc của bạn trở nên gọn gàng và dễ quản lý.

Quản lý biến và module cơ bản

Biến là một phần không thể thiếu trong Ansible, cho phép bạn tạo ra các Playbook linh hoạt và tái sử dụng được. Bạn có thể khai báo biến ở nhiều nơi: trực tiếp trong Playbook, trong file inventory (như ví dụ [all:vars] ở trên), hoặc trong các file riêng biệt (group_vars, host_vars).

Module là các đơn vị công việc mà Ansible thực thi trên máy chủ từ xa. Ansible có hàng ngàn module tích hợp sẵn cho hầu hết mọi tác vụ quản trị hệ thống. Một vài module cơ bản và phổ biến nhất bao gồm:

  • apt: Quản lý các gói phần mềm trên hệ thống Debian/Ubuntu (cài đặt, gỡ bỏ, cập nhật).
  • service: Quản lý các dịch vụ hệ thống (khởi động, dừng, khởi động lại).
  • copy: Sao chép file từ máy chủ điều khiển sang các máy chủ được quản lý.
  • file: Quản lý quyền, chủ sở hữu và trạng thái của file và thư mục.
  • user: Quản lý tài khoản người dùng và nhóm.

Ví dụ, để cài đặt Nginx trên tất cả máy chủ trong nhóm webservers, bạn có thể viết một Playbook đơn giản như sau:

— – hosts: webservers become: yes tasks: – name: Install Nginx apt: name: nginx state: present

Hiểu cách sử dụng module và quản lý biến là nền tảng để bạn có thể tự động hóa các quy trình phức tạp hơn trong tương lai.

Các lỗi thường gặp và cách khắc phục (Troubleshooting)

Trong quá trình cài đặt và sử dụng Ansible, bạn có thể gặp phải một số lỗi phổ biến. Dưới đây là cách nhận biết và khắc phục chúng một cách hiệu quả.

Lỗi không thêm được PPA hoặc cập nhật gói

Một trong những vấn đề đầu tiên bạn có thể gặp là lỗi khi chạy lệnh add-apt-repository hoặc apt update. Nguyên nhân thường đến từ kết nối mạng không ổn định, tường lửa chặn truy cập, hoặc file sources.list của hệ thống bị lỗi.

Nếu gặp lỗi này, hãy thử các bước sau:

  1. Kiểm tra kết nối mạng: Dùng lệnh ping 8.8.8.8 để chắc chắn máy chủ có thể kết nối ra internet.
  2. Kiểm tra DNS: Thử ping google.com để xem hệ thống phân giải tên miền có hoạt động không.
  3. Kiểm tra PPA: Nếu lỗi xảy ra khi thêm PPA, hãy chắc chắn rằng bạn đã cài đặt gói software-properties-common. Nếu đã cài mà vẫn lỗi, có thể do máy chủ PPA tạm thời không truy cập được.
  4. Làm mới cache của apt: Chạy sudo apt clean và thử lại sudo apt update.

Đôi khi, việc khởi động lại hệ thống cũng có thể giải quyết các vấn đề tạm thời liên quan đến mạng hoặc dịch vụ hệ thống.

Hình minh họa

Lỗi kết nối SSH khi chạy lệnh ansible -m ping

Lỗi phổ biến nhất khi bắt đầu sử dụng Ansible là lỗi kết nối SSH, thường hiển thị thông báo như Permission denied (publickey,password) hoặc UNREACHABLE!.

Nguyên nhân chính thường là:

  • Khóa SSH không chính xác: Khóa công khai (id_rsa.pub) của máy chủ Ansible chưa được thêm vào file ~/.ssh/authorized_keys trên máy chủ đích.
  • Sai người dùng: User bạn dùng để kết nối (remote_user hoặc ansible_user) không tồn tại trên máy chủ đích hoặc không có quyền đăng nhập SSH.
  • Quyền file SSH không đúng: Thư mục ~/.ssh trên máy chủ đích phải có quyền 700 và file authorized_keys phải có quyền 600. Nếu quyền sai, SSH sẽ từ chối kết nối để đảm bảo an toàn. Bạn có thể sửa bằng lệnh chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys trên máy chủ đích.
  • Tường lửa (Firewall): Tường lửa trên máy chủ đích hoặc trên đường mạng đang chặn kết nối đến cổng 22.

Để gỡ lỗi, hãy thử kết nối SSH thủ công từ máy chủ Ansible đến máy chủ đích: ssh user@remote_host. Lệnh này sẽ cung cấp thông báo lỗi chi tiết hơn, giúp bạn xác định chính xác nguyên nhân và khắc phục nó.

Các phương pháp hay nhất (Best Practices)

Để sử dụng Ansible một cách chuyên nghiệp, an toàn và dễ bảo trì, bạn nên tuân thủ một số nguyên tắc và phương pháp hay nhất được cộng đồng khuyến nghị.

Luôn cập nhật hệ thống và Ansible: Giữ cho máy chủ điều khiển và các máy chủ được quản lý luôn được cập nhật các bản vá bảo mật mới nhất. Nhờ sử dụng PPA, bạn có thể dễ dàng cập nhật Ansible lên phiên bản mới nhất bằng lệnh sudo apt upgrade ansible.

Sử dụng user không phải root với quyền sudo: Thay vì kết nối trực tiếp bằng user root, hãy tạo một user riêng cho Ansible với quyền sudo không cần mật khẩu. Điều này tuân thủ nguyên tắc đặc quyền tối thiểu (principle of least privilege) và tăng cường bảo mật. Trong Playbook, bạn có thể dùng become: yes để thực thi các tác vụ cần quyền root.

Chia nhỏ playbook, tận dụng roles: Khi các Playbook trở nên phức tạp, hãy chia nhỏ chúng thành các file logic hơn và sử dụng “roles”. Roles là một cách để tổ chức các tác vụ, biến, file mẫu và trình xử lý (handlers) thành các đơn vị có thể tái sử dụng. Cấu trúc này giúp dự án của bạn trở nên gọn gàng, dễ đọc và dễ bảo trì hơn rất nhiều.

Không chỉnh sửa trực tiếp file hosts hệ thống: Thay vì sửa file /etc/ansible/hosts, hãy tạo một file inventory riêng cho từng dự án hoặc môi trường (ví dụ: production_hosts, staging_hosts). Bạn có thể chỉ định file inventory cần dùng khi chạy lệnh Ansible với cờ -i: ansible-playbook -i staging_hosts my_playbook.yml.

Hình minh họa

Kết luận

Qua bài viết này, chúng ta đã cùng nhau đi qua một hành trình chi tiết để cài đặt và cấu hình Ansible trên Ubuntu 20.04. Từ việc chuẩn bị môi trường, cập nhật hệ thống, cho đến việc cài đặt Ansible thông qua PPA chính thức để đảm bảo phiên bản mới nhất. Chúng ta cũng đã tìm hiểu cách kiểm tra cài đặt, thiết lập file inventory để quản lý máy chủ, và thực hiện kiểm tra kết nối SSH đầu tiên. Các cấu hình cơ bản trong ansible.cfg và cách khắc phục những lỗi thường gặp cũng đã được đề cập để giúp bạn có một khởi đầu suôn sẻ.

Tự động hóa là một kỹ năng thiết yếu trong ngành công nghệ thông tin hiện đại, và Ansible là một công cụ mạnh mẽ nhưng lại rất dễ tiếp cận. AZWEB khuyến khích bạn hãy bắt tay vào thực hành ngay theo từng bước đã hướng dẫn. Đừng ngần ngại thử nghiệm, bởi đó là cách tốt nhất để bạn thực sự làm quen và làm chủ công cụ này. Hãy bắt đầu tự động hóa các tác vụ quản trị máy chủ của mình ngay hôm nay! Để tiếp tục, bạn có thể tìm hiểu sâu hơn về cách viết các Playbook phức tạp, sử dụng các module nâng cao và quản lý môi trường đa máy chủ một cách hiệu quả với Ansible Roles và Vault.

Đánh giá