Blog chia sẻ về công nghệ ...
Published on

Tổng quan Knative - Serverless for Kubernetes

Authors

📑 Mục Lục

  1. Khái niệm Serverless
  2. Knative

Khái niệm Serverless

Serverless là mô hình điện toán trong đó nhà cung cấp hạ tầng (như AWS, Azure, Google Cloud, v.v.) tự động quản lý việc cấp phát tài nguyên, mở rộng, và vận hành máy chủ. Người dùng chỉ cần tập trung viết logic ứng dụng, không cần quản lý máy chủ, hệ điều hành, hay scaling. Hay đơn giản serverless là xử lý base-event, Event-driven xảy ra trong hệ thống

Ví dụ đối với hệ thống chạy trên môi trường kubernetes:

Chuyển đổi ảnh tự động với Serverless Khi bạn tải ảnh lên, hệ thống serverless sẽ tự động kích hoạt một ứng dụng chuyên biệt để chuyển đổi định dạng ảnh (ví dụ: từ JPG sang PNG). Bạn không cần bận tâm đến các máy chủ hay quy trình kỹ thuật.

Hệ thống sẽ tự động mở rộng (scale lên) khi có nhiều người dùng tải ảnh cùng lúc, và tự động co lại (scale xuống) khi không còn ai tải ảnh nữa. Điều này giúp bạn tiết kiệm tối đa chi phí vì chỉ phải trả tiền cho thời gian thực sự xử lý ảnh.

serverless

Giải thích luồng cơ bản:

1. Người dùng gửi HTTP request

Ví dụ: người dùng từ trình duyệt, mobile app, hệ thống khác gửi request tới API:

POST https://render.example.com/render?type=pdf

2. Load Balancer nhận và chuyển tiếp request

Load balancer sẽ phân phối request này đến Ingress Gateway bên trong Kubernetes cluster.

Tùy bạn triển khai, LB có thể là:

On-primes: Nginx Ingress, Istio

Cloud: AWS ELB, GCP Load Balancer, Azure Load Balancer


3. Ingress Gateway tiếp nhận request

Đây là cổng vào cụm Kubernetes.

Nó định tuyến request HTTP đến đúng Serverless Service, dựa trên domain/path (VD: render-api.default.svc.cluster.local).

Ingress không xử lý logic gì cả, chỉ làm nhiệm vụ chuyển tiếp.


4. Serverless phát hiện có request đến

5. Pod được khởi tạo và thực hiện xử lý render

6. Kết quả trả về cho người dùng

7. Serverless tự động scale về 0 khi không còn request

Knative

Knative là gì?

Knative là một nền tảng độc lập với hạ tầng (platform-agnostic), cho phép triển khai mô hình serverless trên Kubernetes. Mục tiêu chính là giúp ứng dụng có thể tự động scale theo nhu cầu và giảm chi phí tài nguyên khi không sử dụng.


Knative Serving

Knative Serving định nghĩa một tập hợp các đối tượng dạng Kubernetes Custom Resource Definitions (CRDs) nhằm kiểm soát cách một workload serverless hoạt động. Các tài nguyên chính bao gồm:

  • Services (service.serving.knative.dev): Quản lý toàn bộ vòng đời ứng dụng. Khi có cập nhật, nó sẽ tự tạo route, configuration, và revision mới. Có thể định tuyến đến phiên bản mới nhất hoặc giữ nguyên một phiên bản cụ thể.

  • Routes (route.serving.knative.dev): Định tuyến các endpoint mạng đến một hoặc nhiều revision. Có thể cấu hình để chia tỉ lệ lưu lượng (fractional traffic) hoặc gán tên rõ ràng cho route.

  • Configurations (configuration.serving.knative.dev): Lưu trạng thái mong muốn của ứng dụng. Giúp tách biệt code và cấu hình, tuân theo mô hình Twelve-Factor App. Mỗi khi cấu hình thay đổi, sẽ tạo một revision mới.

  • Revisions (revision.serving.knative.dev): Là bản chụp "snapshot" tại một thời điểm của code và cấu hình. Không thể thay đổi và có thể giữ lại để khôi phục hoặc theo dõi. Có thể tự động scale lên/xuống theo lưu lượng truy cập.


Knative Eventing

Knative Eventing cung cấp API để xây dựng kiến trúc hướng sự kiện (event-driven) cho ứng dụng.

  • Nguồn (source): Là nơi tạo ra sự kiện.
  • Đích (sink): Là nơi nhận và xử lý sự kiện.
  • Có thể cấu hình đích để trả về HTTP response (sự kiện phản hồi).

Knative Eventing:

  • Hoạt động độc lập với Serving.
  • Hỗ trợ cả Kubernetes Services và Knative Services.
  • Dùng chuẩn HTTP POST để gửi/nhận sự kiện theo định dạng CloudEvents (độc lập ngôn ngữ lập trình).
  • Các thành phần có thể triển khai và mở rộng độc lập.

=> Producer có thể tạo sự kiện trước khi có consumer. => Consumer có thể đăng ký lắng nghe trước khi có producer.