Vì sao cấu hình Fedora CoreOS lại khiến nhiều người bỡ ngỡ?
Nếu anh em đã quen kiểu cài đặt server “truyền thống” — cắm USB, phân vùng thủ công rồi SSH vào sửa /etc/fstab — thì Fedora CoreOS (FCOS) sẽ làm anh em sốc. Hệ điều hành này không có trình cài đặt đồ họa. Nó sinh ra để phục vụ container và tự động hóa ở quy mô hàng trăm, hàng ngàn node.
Trái tim của FCOS là file Ignition. Đây là một file JSON chứa toàn bộ “lệnh bài” cấu hình ngay từ lần boot đầu tiên. Nhưng tin mình đi, đừng bao giờ viết JSON bằng tay. Chỉ cần thừa một dấu phẩy hay thiếu một ngoặc nhọn, server sẽ treo cứng ngay lúc khởi động. Đó là lý do Butane xuất hiện để cứu rỗi sự tỉnh táo của chúng ta.
Butane và Ignition: Cặp bài trùng không thể tách rời
Để triển khai mượt mà, anh em cần phân biệt rõ vai trò của hai công cụ này:
- Ignition: Chạy trong giai đoạn
initramfscực sớm. Nó đọc JSON để phân vùng, format đĩa và tạo user. Nó chỉ chạy đúng một lần duy nhất khi máy khởi động lần đầu. - Butane: Là trình thông dịch. Nó giúp chúng ta viết cấu hình bằng YAML (file
.bu) cực kỳ dễ đọc, sau đó biên dịch sang JSON mà Ignition có thể hiểu được.
Thay vì vật lộn với 200 dòng JSON rối rắm, anh em chỉ cần quản lý vài chục dòng YAML sạch sẽ.
Cài đặt Butane trong 30 giây
Trên Fedora, việc cài đặt cực kỳ đơn giản qua DNF:
sudo dnf install butane
Nếu dùng distro khác, hãy chạy Butane qua Podman để giữ môi trường sạch sẽ. Đây là cách mình thường dùng để tránh cài cắm rác vào máy host:
podman run --rm -v .:/pwd -w /pwd quay.io/coreos/butane:release --strict config.bu > config.ign
Thực hành: Tạo file cấu hình đầu tiên
Hãy thử dựng một node FCOS có sẵn user devops, add SSH key và tự động chạy Nginx bằng Podman. Tạo file config.bu với nội dung sau:
1. Khai báo thông tin cơ bản
variant: fcos
version: 1.5.0
passwd:
users:
- name: devops
ssh_authorized_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... user@machine
groups: [sudo, wheel]
Lưu ý: variant và version là bắt buộc. Nếu thiếu, Butane sẽ báo lỗi ngay lập tức.
2. Tự động hóa Service với Systemd
FCOS không cài sẵn Nginx như các bản distro thông thường. Chúng ta sẽ ra lệnh cho hệ thống tự kéo image và chạy container khi vừa lên đèn:
systemd:
units:
- name: nginx-container.service
enabled: true
contents: |
[Unit]
Description=Chạy Nginx container bằng Podman
After=network-online.target
Wants=network-online.target
[Service]
ExecStartPre=-/usr/bin/podman kill nginx
ExecStartPre=-/usr/bin/podman rm nginx
ExecStartPre=/usr/bin/podman pull nginx:latest
ExecStart=/usr/bin/podman run --name nginx -p 80:80 nginx:latest
ExecStop=/usr/bin/podman stop nginx
[Install]
WantedBy=multi-user.target
3. Ghi đè file hệ thống
Cần đổi hostname hay tạo file chào mừng (MOTD)? Butane xử lý việc này rất gọn:
storage:
files:
- path: /etc/hostname
mode: 0644
contents:
inline: fcos-node-01
- path: /etc/motd
mode: 0644
contents:
inline: "Chào mừng anh em đến với node FCOS quản lý bởi Butane!\n"
Biên dịch sang Ignition
Sau khi xong file YAML, hãy dùng lệnh sau để xuất ra file JSON. Mình luôn dùng flag --strict để bắt lỗi cú pháp chặt chẽ nhất:
butane --pretty --strict config.bu > config.ign
File config.ign này chính là thứ anh em sẽ nạp vào phần “User Data” khi tạo máy ảo trên AWS, Proxmox hoặc VMware.
Mẹo xương máu khi triển khai thực tế
Qua vài dự án triển khai cụm server FCOS, mình rút ra 3 quy tắc vàng:
- Quên SSH Key là “tự sát”: FCOS khóa chặt mật khẩu user theo mặc định. Không có key đồng nghĩa với việc anh em bị nhốt bên ngoài server vĩnh viễn. Lúc đó chỉ có nước xóa instance đi tạo lại.
- Cẩn thận với khoảng trắng: YAML rất nhạy cảm với thụt đầu dòng (indentation). Hãy dùng VS Code với extension YAML để tránh những lỗi ngớ ngẩn khiến Butane không thể biên dịch.
- Luôn test local trước: Đừng đẩy thẳng lên Cloud tốn tiền. Hãy dùng
qemuhoặcvirt-installtrên máy cá nhân để kiểm tra xem file Ignition có boot mượt mà không.
Lời kết
Butane không chỉ là công cụ chuyển đổi đơn thuần. Nó là cầu nối giúp tư duy Infrastructure as Code (IaC) trở nên gần gũi hơn. Thay vì ghi nhớ cấu trúc JSON khô khan, chúng ta tập trung định nghĩa trạng thái mong muốn của server. Nếu anh em đang dấn thân vào thế giới Fedora CoreOS, hãy coi Butane là kỹ năng bắt buộc phải thuần thục.

