Tất cả bài viết
Ubuntu & LinuxUbuntu 26.04cloud-initTự động hóa serverQuản trị LinuxDevOpsCấu hình hệ thống

Hướng dẫn sử dụng cloud-init để tự động hóa cấu hình Server Ubuntu 26.04 từ A đến Z

Hướng dẫn sử dụng cloud-init để tự động hóa cấu hình Server Ubuntu 26.04 từ A đến Z

Tìm hiểu cách triển khai cloud-init trên Ubuntu 26.04 để tự động hóa quá trình thiết lập server, tạo người dùng và cài đặt gói phần mềm chỉ trong tích tắc. Giải pháp này giúp loại bỏ các thao tác thủ công lặp đi lặp lại, tối ưu hóa quy trình quản trị hệ thống cho DevOps và SysAdmin.

Cloud-init là gì và tại sao bạn cần nó trên Ubuntu 26.04?

Việc cài đặt và cấu hình cloud-init trên phiên bản Ubuntu 26.04 giúp đơn giản hóa đáng kể quy trình tự động hóa máy chủ, đặc biệt là khi làm việc với hệ thống Cloud VPS, máy ảo (VM) hoặc các phòng Lab tại nhà. Nếu bạn đã từng phải ngồi hàng giờ để tạo tài khoản người dùng, thiết lập mã khóa SSH, cấu hình mạng và cài đặt hàng loạt gói phần mềm cho một server mới, cloud-init chính là giải pháp giải phóng sức lao động cho bạn. Đây là một dịch vụ khởi tạo hệ thống được hầu hết các nền tảng đám mây lớn tin dùng, cho phép đọc dữ liệu cấu hình ngay trong lần khởi động đầu tiên để áp dụng các thiết lập như tên máy chủ (hostname), tạo user, cài đặt ứng dụng và thực thi các lệnh tùy chỉnh.

Tại thị trường Việt Nam, khi các doanh nghiệp đang đẩy mạnh chuyển đổi số và sử dụng nhiều hạ tầng đám mây như AWS, Google Cloud hay các nhà cung cấp nội địa, việc làm chủ cloud-init giúp các kỹ sư DevOps triển khai hàng trăm server đồng nhất chỉ với một mẫu cấu hình duy nhất. Mặc dù các bản Ubuntu Cloud Image thường tích hợp sẵn công cụ này, việc hiểu rõ cơ chế vận hành của nó sẽ giúp bạn kiểm soát hoàn toàn quy trình triển khai mà không phụ thuộc vào giao diện thủ công.

Cơ chế hoạt động và các giai đoạn boot của cloud-init

Cloud-init hoạt động bằng cách đọc tệp định cấu hình có tên là 'user-data' viết dưới định dạng YAML. Tùy thuộc vào môi trường triển khai, tệp này có thể được cung cấp thông qua dịch vụ metadata của các nhà cung cấp như DigitalOcean, AWS, Azure, hoặc thông qua nguồn dữ liệu NoCloud cho máy ảo cục bộ. Quá trình khởi động của cloud-init được chia làm 5 giai đoạn chính: Detect (Phát hiện nền tảng), Local (Thiết lập sớm trước khi có mạng), Network (Thiết lập kết nối mạng), Config (Áp dụng hầu hết các module cấu hình) và Final (Thực hiện các tác vụ cuối như cài gói phần mềm và lệnh tùy chỉnh).

Hướng dẫn cài đặt và kiểm tra trạng thái trên Ubuntu 26.04

Mặc dù đã có sẵn trên các bản cloud image, nhưng nếu bạn dùng bản Desktop hoặc cài đặt thủ công trên thiết bị vật lý (Bare-metal), bạn cần tự cài đặt. Đầu tiên, hãy kiểm tra xem hệ thống đã có cloud-init chưa bằng lệnh sau:

bash
cloud-init --version

Nếu chương trình chưa xuất hiện, hãy thực hiện cập nhật kho lưu trữ và cài đặt nó thông qua trình quản lý gói apt của Ubuntu:

bash
sudo apt update
sudo apt install cloud-init -y

Sau khi cài đặt, bạn nên kiểm tra xem dịch vụ có đang hoạt động ổn định hay không. Trạng thái 'status: done' nghĩa là mọi thứ đã hoàn tất. Nếu xuất hiện trạng thái 'error', bạn cần kiểm tra ngay các tệp nhật ký tại /var/log/cloud-init.log để tìm lỗi định dạng YAML hoặc lệnh sai.

bash
cloud-init status

Để xem chi tiết hơn về nguồn dữ liệu (Datasource) đang được sử dụng, chẳng hạn như DataSourceEc2 trên AWS hay DataSourceNoCloud cho máy cục bộ, hãy sử dụng tùy chọn mở rộng:

bash
cloud-init status --long

Cấu trúc thư mục quan trọng cần lưu ý

Việc quản trị cloud-init chuyên nghiệp đòi hỏi bạn phải nắm rõ nơi lưu trữ các tệp tin hệ thống. Tệp tin /etc/cloud/cloud.cfg đóng vai trò cấu hình chính, trong khi thư mục /etc/cloud/cloud.cfg.d/ chứa các tệp ghi đè (overrides). Đối với dữ liệu runtime, bạn hãy truy cập /var/lib/cloud/. Ngoài ra, nhật ký xuất (stdout/stderr) của các lệnh thực thi được lưu tại /var/log/cloud-init-output.log - đây là nơi cực kỳ hữu ích để debug khi script của bạn không chạy như ý muốn.

Tạo tệp cấu hình User-Data hoàn chỉnh

Tệp user-data là trái tim của toàn bộ quy trình. Lưu ý quan trọng nhất là dòng đầu tiên phải luôn khởi đầu bằng thẻ #cloud-config, nếu không cloud-init sẽ hiểu nhầm đây chỉ là tệp văn bản thường và bỏ qua toàn bộ logic bên trong. Dưới đây là ví dụ cấu hình chuẩn để tạo user 'tecmint', cấp quyền sudo không cần mật khẩu, cài đặt các công cụ như Vim, Git, Htop và thiết lập tường lửa UFW:

yaml
#cloud-config
# Create a new user with sudo access
users:
  - name: tecmint
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh_authorized_keys:
      - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA <your-public-key>

# Install packages on first boot
packages:
  - vim
  - htop
  - git
  - ufw

package_update: true
package_upgrade: true

# Set the hostname
hostname: tecmint-server

# Write a custom motd
write_files:
  - path: /etc/motd
    content: |
      Welcome to TecMint Server
      Managed by cloud-init on Ubuntu 26.04

# Run commands after packages are installed
runcmd:
  - ufw allow OpenSSH
  - ufw --force enable

Đừng quên thay thế phần mã khóa công khai <your-public-key> bằng mã thực tế của bạn. Bạn có thể lấy mã này bằng lệnh cat ~/.ssh/id_ed25519.pub trên máy cá nhân.

Kiểm tra và chạy thử nghiệm cấu hình cục bộ

Để tránh lỗi cú pháp YAML gây treo hệ thống khi deploy thực tế, hãy luôn chạy trình kiểm tra schema tích hợp. Một lỗi lùi đầu dòng sai cũng có thể khiến máy chủ khởi động mà không có cấu hình bạn mong muốn.

bash
sudo cloud-init schema --config-file ~/user-data.yaml

Nếu bạn muốn giả lập quy trình chạy lần đầu trên một máy ảo đang có sẵn mà không cần thuê Cloud VPS mới, bạn có thể sử dụng phương pháp NoCloud bằng cách chép file vào thư mục seed và dọn dẹp trạng thái cũ:

bash
sudo mkdir -p /var/lib/cloud/seed/nocloud-net
sudo cp ~/user-data.yaml /var/lib/cloud/seed/nocloud-net/user-data
sudo touch /var/lib/cloud/seed/nocloud-net/meta-data
sudo cloud-init clean --logs
sudo reboot

Triển khai trên các nền tảng Đám mây (DigitalOcean, AWS)

Khi tạo máy chủ thực tế, các nhà cung cấp đều có mục 'Advanced Options' hoặc 'User Data'. Với DigitalOcean, bạn chỉ cần dán nội dung file YAML vào ô văn bản khi tạo Droplet. Với AWS EC2, bạn có thể dùng dòng lệnh CLI để truyền file cực kỳ nhanh chóng:

bash
aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --instance-type t3.micro \
  --user-data file://~/user-data.yaml \
  --key-name my-keypair

Việc sử dụng tham số --user-data file:// giúp AWS CLI đọc trực tiếp dữ liệu từ ổ đĩa máy tính của bạn, giúp quy trình CI/CD trở nên mượt mà và chuyên nghiệp hơn, giảm thiểu sai sót do copy-paste thủ công.

Lời kết và lời khuyên cho quản trị viên

Cloud-init không chỉ là một công cụ, nó là một tư duy về 'Infrastructure as Code' (Hạ tầng như mã nguồn). Thay vì quản lý server bằng cách ghi nhớ các bước cài đặt, bạn quản lý chúng bằng các tệp YAML có thể lưu trữ trên Git để theo dõi lịch sử thay đổi. Hãy luôn nhớ bước kiểm tra schema trước khi chạy thực tế để tiết kiệm thời gian gỡ lỗi. Đối với những hệ thống phức tạp hơn, bạn có thể kết hợp cloud-init với Terraform hoặc Ansible để đạt được mức độ tự động hóa tối đa cho hạ tầng Ubuntu 26.04 của mình.

Chia sẻ: