Triển khai Foreman & Katello trên CentOS Stream 9: Giải pháp quản lý vòng đời Linux tập trung

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

Nỗi khổ khi quản lý hàng chục server thủ công

Cảnh tượng SSH vào từng node trong cụm 30-50 server để gõ dnf update hay kiểm tra lỗ hổng bảo mật thực sự là một cơn ác mộng. Cách đây nửa năm, hệ thống bên mình mở rộng nhanh chóng dẫn đến tình trạng “loạn” phiên bản: máy chạy CentOS 7, máy dùng Rocky Linux 8, máy lại là CentOS Stream 9. Việc kiểm soát package nào được phép lên production lúc đó gần như bất khả thi.

Sau khi cân nhắc giữa Red Hat Satellite (chi phí bản quyền rất cao) và Uyuni, mình quyết định chọn Foreman kết hợp Katello. Foreman lo phần quản lý vòng đời (provisioning), còn Katello là trợ thủ đắc lực giúp quản lý Repository, Content View và Errata (bản vá).

Rút kinh nghiệm từ thực tế: Đừng coi Foreman là một công cụ cài đặt đơn thuần. Nó đóng vai trò là “Single Source of Truth” cho toàn bộ hạ tầng Linux của bạn. Dưới đây là quy trình mình đã triển khai trên CentOS Stream 9.

Yêu cầu hệ thống (Ưu tiên hiệu năng I/O)

Foreman và Katello rất ngốn tài nguyên do phải chạy đồng thời PostgreSQL, Candlepin và Pulp. Đừng cố chạy trên cấu hình yếu nếu bạn không muốn hệ thống treo cứng khi đồng bộ repo. Cấu hình khuyến nghị từ trải nghiệm của mình:

  • CPU: Tối thiểu 4 Cores (Nên có 8 Cores nếu quản lý trên 100 clients).
  • RAM: 12GB – 16GB (Dưới 8GB, dịch vụ Java của Candlepin rất dễ bị OOM – Out of Memory).
  • Disk: Ít nhất 100GB cho /var/lib/pulp. Nếu đồng bộ nhiều phiên bản OS, hãy chuẩn bị sẵn 300-500GB.
  • Network: Bắt buộc có Static IP và FQDN chuẩn xác.

Bước 1: Thiết lập Hostname và Firewall

Foreman cực kỳ nhạy cảm với định danh máy chủ. Chỉ cần hostname không phân giải ngược (reverse lookup) được, bộ cài sẽ báo lỗi ngay lập tức. Nếu chưa có DNS server riêng, bạn hãy cấu hình file /etc/hosts thật kỹ:

# Thiết lập FQDN
hostnamectl set-hostname foreman.itfromzero.local

# Khai báo IP nội bộ
echo "192.168.1.100 foreman.itfromzero.local foreman" >> /etc/hosts

Tiếp theo, hãy cập nhật hệ thống và mở các port dịch vụ cần thiết. Katello cần khá nhiều port để giao tiếp với client:

dnf update -y
firewall-cmd --permanent --add-service={http,https,dns,dhcp,dhcpv6,tftp,mcollective,puppetmaster,proxy-dhcp}
firewall-cmd --reload

Bước 2: Cấu hình Repository cho Foreman & Katello

Trên CentOS Stream 9, chúng ta cần kích hoạt các repo chính thức từ dự án Foreman và Puppet. Lưu ý sự tương thích giữa phiên bản Katello và Foreman là rất quan trọng.

# Cài đặt nguồn repo
dnf install -y https://yum.theforeman.org/releases/3.9/el9/x86_64/foreman-release.rpm
dnf install -y https://yum.theforeman.org/katello/4.11/katello/el9/x86_64/katello-repos-latest.rpm
dnf install -y https://yum.puppet.com/puppet7-release-el-9.noarch.rpm

# Kích hoạt module Ruby và PostgreSQL phù hợp
dnf module enable ruby:3.1 -y
dnf module enable postgresql:13 -y

Bước 3: Thực thi Foreman Installer

Thay vì cài đặt thủ công từng thành phần, Foreman cung cấp một script chạy bằng Puppet rất mạnh mẽ. Mình sử dụng scenario katello để kích hoạt đầy đủ tính năng quản lý nội dung.

dnf install -y foreman-installer-katello

foreman-installer --scenario katello \
  --foreman-initial-admin-username admin \
  --foreman-initial-admin-password YourSecurePassword \
  --foreman-proxy-dns=false \
  --foreman-proxy-dhcp=false

Lưu ý: Mình đặt DNS và DHCP proxy là false vì hệ thống đã có sẵn server quản lý các dịch vụ này. Quá trình cài đặt thường mất từ 20 đến 40 phút tùy vào tốc độ ổ cứng của bạn.

Bước 4: Quản lý nội dung (Kinh nghiệm thực tế)

Khi đã vào được Dashboard, đừng vội add host ngay. Hãy thiết lập OrganizationLocation trước để phân vùng quản lý khoa học ngay từ đầu.

1. Đồng bộ Repository thông minh

Tại mục Content > Products, khi thêm các repo như BaseOS hay AppStream, bạn nên chọn download policy là “On Demand”. Chế độ này giúp tiết kiệm hàng chục GB đĩa cứng vì Foreman chỉ tải về những package mà client thực sự yêu cầu.

2. Content Views – Chốt chặn an toàn

Đây là tính năng đáng tiền nhất của Katello. Content View cho phép bạn tạo ra các bản “snapshot” của phần mềm.

  • Môi trường Dev: Nhận các bản vá mới nhất hàng ngày.
  • Môi trường Prod: Chỉ nhận các bản vá đã được kiểm thử ổn định từ 2 tuần trước.

Khi có lỗ hổng Zero-day, bạn chỉ cần cập nhật Content View và “Promote” (đẩy) nó từ Dev lên Prod chỉ bằng vài cú click.

Bước 5: Kết nối Client và theo dõi Errata

Để quản lý một server mới, bạn không cần cài đặt rườm rà. Hãy sử dụng tính năng global registration trong menu Hosts > Register Host.

# Chạy script đăng ký trên máy client
curl -X GET -k https://foreman.itfromzero.local/register_host_script > register.sh
chmod +x register.sh
./register.sh

Sau khi đăng ký thành công, mọi thông tin về bản vá (Errata) còn thiếu sẽ hiển thị trực quan trên Web UI. Bạn có thể biết chính xác server nào đang dính lỗ hổng bảo mật mà không cần SSH vào kiểm tra từng máy.

Tổng kết sau 6 tháng vận hành

Hệ thống chạy ổn định giúp mình tiết kiệm khoảng 80% thời gian bảo trì định kỳ. Tuy nhiên, bạn cần lưu ý:

  1. Dọn dẹp Task định kỳ: Katello tạo ra rất nhiều log task. Hãy vào Monitor > Tasks để xóa bớt dữ liệu cũ, tránh làm phình database PostgreSQL.
  2. Sử dụng LVM: Luôn đặt thư mục /var/lib/pulp trên LVM để có thể mở rộng dung lượng online khi số lượng repo tăng lên.
  3. Backup là sống còn: Sử dụng lệnh foreman-maintain backup offline trước mỗi lần nâng cấp hệ thống.

Triển khai Foreman + Katello ban đầu có vẻ phức tạp, nhưng những giá trị về quản lý tập trung và an toàn hệ thống mà nó mang lại là hoàn toàn xứng đáng với công sức bỏ ra.

Share: