Cloud & hạ tầng

Xây dựng đám mây riêng trên bare metal với Kubernetes và Talos Linux

Một hướng dẫn kỹ thuật chi tiết cách xây dựng nền tảng đám mây tự chủ (self-hosted) sử dụng Kubernetes, Talos Linux và các công cụ GitOps để quản lý hạ tầng bare metal.

Các kệ máy chủ biến thành các khối kỹ thuật số được sắp xếp gọn gàng, đại diện cho hạ tầng Kubernetes
Hình ảnh: Kubernetes Blog, giấy phép CC BY 4.0

Được dịch tự động từ bản gốc tiếng Anh.

Trong một bài đăng trên Blog của Kubernetes vào tháng 4 năm 2024, Andrei Kvapil từ Ænix đã trình bày phương pháp xây dựng hạ tầng đám mây riêng chỉ bằng các công nghệ mã nguồn mở. Hướng dẫn này tập trung vào việc chuẩn bị các máy chủ bare metal để lưu trữ các cụm Kubernetes được quản lý, thay thế các lớp ảo hóa truyền thống như OpenStack.

Diễn biến sự việc

Kvapil mô tả quy trình tạo ra Cozystack, một nền tảng được thiết kế để chạy các cụm Kubernetes cho khách hàng (tenant) trực tiếp trên phần cứng vật lý. Cách tiếp cận này thách thức thông lệ phổ biến là sử dụng OpenStack để quản lý máy chủ bare metal trước khi cài đặt Kubernetes lên trên. Thay vào đó, nó tận dụng chính Kubernetes để xử lý độ phức tạp của việc quản lý hạ tầng, nhằm mục đích giảm số lượng hệ thống phức tạp trong hệ sinh thái.

Bài viết đóng vai trò là phần đầu tiên của một loạt bài chi tiết về kiến trúc này. Nó bao gồm những bước nền tảng ban đầu cần thiết để chuẩn bị trung tâm dữ liệu, bao gồm việc chạy các máy ảo, cô lập mạng và thiết lập lưu trữ chịu lỗi (fault-tolerant). Mục tiêu là cung cấp các cụm Kubernetes đầy đủ tính năng hỗ trợ cấp phát volume động, load balancer và autoscaling mà không phụ thuộc vào các nhà cung cấp đám mây bên ngoài.

Cơ chế hoạt động

Sự khác biệt cốt lõi nằm ở cách Kubernetes vận hành trên đám mây so với trên bare metal. Trong các đám mây công cộng, các dịch vụ như persistent volumes, load balancers và provisioning node được xử lý bên ngoài bởi nhà cung cấp. Điều này cho phép các node được coi như những tiện ích tạm thời (ephemeral utilities), có thể dễ dàng xóa và tái tạo. Trên bare metal, các dịch vụ này phải chạy bên trong cụm, khiến việc cập nhật và bảo trì trở nên phức tạp hơn nhiều vì các máy chủ vật lý không thể đơn giản xóa và thay thế như máy ảo.

Figure from the original article: Xây dựng đám mây riêng trên bare metal với Kubernetes và Talos Linux
Hình từ bài viết gốc · Kubernetes Blog · CC BY 4.0

Để giải quyết vấn đề này, hướng dẫn khuyến nghị sử dụng Talos Linux, một hệ điều hành chuyên dụng được thiết kế cho Kubernetes. Talos cho phép xác định toàn bộ cấu hình hệ thống trong một tệp duy nhất. Cách tiếp cận khai báo (declarative) này cho phép cập nhật các mô-đun kernel và các thành phần Kubernetes mà không cần tái tạo hoàn toàn node hoặc di chuyển dịch vụ. Nhóm tại Ænix sử dụng phương pháp này để đóng gói các mô-đun kernel cần thiết, chẳng hạn như ZFS và DRBD, vào một image hệ thống tùy chỉnh.

Về triển khai, quy trình sử dụng PXE booting. Các máy chủ DHCP và PXE tạm thời chạy trong container để phân phối image Talos Linux tùy chỉnh đến các node vật lý. Một script bootstrap sau đó khởi tạo các node và thiết lập control plane Kubernetes ban đầu. Khi cụm cơ bản đang chạy, các công cụ GitOps như FluxCD được sử dụng để cài đặt và quản lý các thành phần hệ thống, đảm bảo cụm duy trì trạng thái mong muốn thông qua các Helm chart khai báo.

Chi tiết quan trọng

  • Hướng dẫn ủng hộ việc thay thế OpenStack bằng cách tiếp cận native Kubernetes để giảm độ phức tạp của hệ sinh thái.
  • Talos Linux được sử dụng làm hệ điều hành cơ sở nhờ mô hình cấu hình bất biến (immutable) và khai báo.
  • Các image hệ thống tùy chỉnh được xây dựng bằng Docker để bao gồm các mô-đun kernel cụ thể như ZFS, DRBD và OpenvSwitch.
  • PXE booting được áp dụng để phân phối image OS đến các máy chủ bare metal trong quá trình provisioning ban đầu.
  • FluxCD được khuyến nghị hơn ArgoCD để quản lý các thành phần hệ thống và duy trì tính đồng nhất của cụm thông qua GitOps.
  • Quy trình bootstrap ban đầu có thể triển khai một cụm Kubernetes chức năng trên bare metal trong khoảng năm phút.

Tại sao điều này quan trọng

Đối với các nhóm kỹ thuật tự quản lý phần cứng của mình, cách tiếp cận này mang lại con đường đạt được sự linh hoạt giống đám mây mà không phải chịu gánh nặng duy trì các nền tảng ảo hóa riêng biệt. Bằng cách coi hạ tầng là code và sử dụng các hệ điều hành bất biến, các nhóm có thể giảm rủi ro lệch cấu hình (configuration drift) và đơn giản hóa quy trình cập nhật. Điều này đặc biệt liên quan đến các tổ chức cần kiểm soát chặt chẽ dữ liệu và phần cứng nhưng vẫn muốn hưởng lợi ích vận hành của Kubernetes.

Figure from the original article: Xây dựng đám mây riêng trên bare metal với Kubernetes và Talos Linux
Hình từ bài viết gốc · Kubernetes Blog · CC BY 4.0

Tuy nhiên, phương pháp này chuyển giao trách nhiệm đáng kể cho đội ngũ hạ tầng. Không giống như các dịch vụ đám mây được quản lý, các kỹ sư phải tự xử lý mạng, lưu trữ và vá lỗi bảo mật. Độ phức tạp chuyển từ việc quản lý nhiều hệ thống rời rạc sang việc hiểu sâu sắc mối tương tác giữa Kubernetes, hệ điều hành cơ sở và phần cứng vật lý. Điều này đòi hỏi mức độ chuyên môn cao hơn nhưng có thể dẫn đến một hạ tầng tinh gọn và hiệu quả về chi phí hơn cho các triển khai quy mô lớn.

Bạn có thể làm gì

  • Đánh giá Talos Linux làm hệ điều hành cơ sở cho các cụm Kubernetes bare metal của bạn để đơn giản hóa việc quản lý node.
  • Triển khai các thực hành GitOps sử dụng FluxCD để quản lý khai báo các thành phần hệ thống và Helm chart.
  • Tạo các image OS tùy chỉnh bao gồm tất cả các mô-đun kernel và firmware cần thiết cho phần cứng cụ thể của bạn.
  • Thiết lập môi trường PXE boot để tự động hóa việc cài đặt hệ điều hành ban đầu trên các máy chủ vật lý.
  • Thiết kế hạ tầng của bạn để đối xử với các node vật lý càng bất biến càng tốt, tối thiểu hóa các bản cập nhật tại chỗ (in-place updates).
  • Bắt đầu với một cụm thử nghiệm nhỏ để kiểm tra quy trình bootstrap và xác minh các cấu hình mạng và lưu trữ.

Công cụ từ cửa hàng Bytechap

Đọc tiếp

Tất cả bài viết