KEDA là gì? Giải pháp tự động mở rộng quy mô ứng dụng trên kubernetes

1674
10-09-2024
KEDA là gì? Giải pháp tự động mở rộng quy mô ứng dụng trên kubernetes

Tự động mở rộng quy mô đang dần trở thành tiêu chuẩn trong thế giới công nghệ hiện đại. KEDA (Kubernetes Event-Driven Autoscaling) là một giải pháp mã nguồn mở được phát triển để giải quyết những hạn chế của các giải pháp tự động mở rộng quy mô Kubernetes truyền thống, mang đến sự linh hoạt và tối ưu hóa tài nguyên cho ứng dụng.

Tự động Mở Rộng Quy Mô Truyền Thống và Sự Xuất Hiện của KEDA

Việc mở rộng quy mô thủ công đang dần trở thành dĩ vãng. Hiện nay, tự động mở rộng quy mô là tiêu chuẩn, và các tổ chức triển khai ứng dụng vào cụm Kubernetes có sẵn các tính năng tự động mở rộng quy mô tích hợp như HPA (Mở Rộng Pod Ngang) và VPA (Mở Rộng Pod Dọc). Tuy nhiên, những giải pháp này có những hạn chế nhất định. Ví dụ, HPA gặp khó khăn trong việc thu nhỏ số lượng pod về 0 hoặc (giảm/tăng) quy mô pod dựa trên các số liệu khác ngoài việc sử dụng bộ nhớ hoặc CPU. Do đó, KEDA (Kubernetes Event-Driven Autoscaling) đã được giới thiệu để giải quyết một số thách thức này trong việc tự động mở rộng quy mô khối lượng công việc K8s.

Trong bài viết này, Bizfly Cloud sẽ đi sâu vào KEDA và thảo luận về các điểm sau:

  • KEDA là gì?
  • Kiến trúc và các thành phần của KEDA
  • Cài đặt và demo KEDA
  • Tích hợp KEDA trong quy trình CI/CD

KEDA là gì?

KEDA là một trình tự động mở rộng quy mô theo hướng sự kiện Kubernetes mã nguồn mở, nhẹ, được các nhóm DevOps, SRE và Ops sử dụng để mở rộng quy mô pod theo chiều ngang dựa trên các sự kiện hoặc trình kích hoạt bên ngoài. KEDA giúp mở rộng khả năng của các giải pháp tự động mở rộng quy mô Kubernetes gốc, vốn dựa trên các số liệu tài nguyên tiêu chuẩn như CPU hoặc bộ nhớ. Bạn có thể triển khai KEDA vào một cụm Kubernetes và quản lý việc mở rộng quy mô của pod bằng cách sử dụng các định nghĩa tài nguyên tùy chỉnh (CRD).

KEDA là gì?

KEDA là gì?

So sánh dạng bảng giữa các tính năng tự động mở rộng Kubernetes khác nhau: VPA, KEDA và HPASo sánh dạng bảng giữa các tính năng tự động mở rộng Kubernetes khác nhau: VPA, KEDA và HPA

Được xây dựng dựa trên Kubernetes HPA, KEDA mở rộng quy mô pod dựa trên thông tin từ các nguồn sự kiện như AWS SQS, Kafka, RabbitMQ, v.v. Các nguồn sự kiện này được giám sát bằng cách sử dụng các scaler, kích hoạt hoặc hủy kích hoạt việc triển khai dựa trên các quy tắc được đặt cho chúng. KEDA scaler cũng có thể cung cấp các số liệu tùy chỉnh cho một nguồn sự kiện cụ thể, giúp các nhóm DevOps quan sát các số liệu có liên quan đến họ.

Những Vấn Đề Mà KEDA Giải Quyết

KEDA giúp các nhóm SRE và DevOps giải quyết một số vấn đề quan trọng mà họ gặp phải:

Giải phóng tài nguyên và giảm chi phí đám mây

KEDA giảm số lượng pod xuống 0 trong trường hợp không có sự kiện nào cần xử lý. Điều này khó thực hiện hơn khi sử dụng HPA tiêu chuẩn và nó giúp đảm bảo sử dụng tài nguyên hiệu quả và tối ưu hóa chi phí, cuối cùng là giảm hóa đơn đám mây.

Khả năng tương tác với chuỗi công cụ DevOps

Cho đến nay, KEDA hỗ trợ 59 scaler tích hợp sẵn và bốn scaler bên ngoài. Scaler bên ngoài bao gồm KEDA HTTP, KEDA Scaler for Oracle DB, v.v. Sử dụng các sự kiện bên ngoài làm trình kích hoạt hỗ trợ tự động mở rộng quy mô hiệu quả, đặc biệt là cho các dịch vụ vi mô hướng sự kiện như cổng thanh toán hoặc hệ thống đặt hàng. Hơn nữa, vì KEDA có thể được mở rộng bằng cách phát triển tích hợp với bất kỳ nguồn dữ liệu nào, nên nó có thể dễ dàng phù hợp với bất kỳ chuỗi công cụ DevOps nào.

Kiến trúc và Thành Phần của KEDA

Như đã đề cập ở phần đầu, KEDA và HPA phối hợp với nhau để đạt được khả năng tự động mở rộng quy mô. Do đó, KEDA chỉ cần một vài thành phần để bắt đầu.

Các thành phần của KEDA

Tham khảo Hình A và chúng ta hãy cùng khám phá một số thành phần của KEDA.

Nguồn sự kiện

Đây là các nguồn sự kiện/trình kích hoạt bên ngoài mà KEDA thay đổi số lượng pod. Prometheus, RabbitMQ và Apache Pulsar là một số ví dụ về nguồn sự kiện.

Scaler

Nguồn sự kiện được giám sát bằng cách sử dụng scaler, chúng tìm nạp số liệu và kích hoạt việc mở rộng quy mô của Deployment hoặc Job dựa trên các sự kiện.

Bộ điều hợp số liệu

Bộ điều hợp số liệu lấy số liệu từ scaler và dịch hoặc điều chỉnh chúng thành dạng mà thành phần HPA/bộ điều khiển có thể hiểu được.

Bộ điều khiển

Bộ điều khiển/toán tử hoạt động dựa trên các số liệu do bộ điều hợp cung cấp và mang lại trạng thái triển khai mong muốn được chỉ định trong ScaledObject (tham khảo bên dưới).

Các CRD của KEDA

KEDA cung cấp bốn tài nguyên tùy chỉnh để thực hiện các chức năng tự động mở rộng quy mô - ScaledObject, ScaledJob, TriggerAuthentication và ClusterTriggerAuthentication.

ScaledObject và ScaledJob

ScaledObject đại diện cho ánh xạ giữa các nguồn sự kiện và đối tượng và chỉ định các quy tắc mở rộng quy mô cho Deployment, StatefulSet, Job hoặc bất kỳ Tài nguyên Tùy chỉnh nào trong cụm K8s. Tương tự, ScaledJob được sử dụng để chỉ định các quy tắc mở rộng quy mô cho Kubernetes Job.

Dưới đây là ví dụ về ScaledObject cấu hình tự động mở rộng quy mô KEDA dựa trên số liệu Prometheus. Ở đây, đối tượng triển khai 'keda-test-demo3' được mở rộng quy mô dựa trên ngưỡng kích hoạt (50) từ số liệu Prometheus. KEDA sẽ mở rộng quy mô số lượng bản sao từ tối thiểu 1 đến tối đa 10 và thu nhỏ xuống 0 bản sao nếu giá trị số liệu giảm xuống dưới ngưỡng.

apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: prometheus-scaledobject namespace: demo3 spec: scaleTargetRef: apiVersion: argoproj.io/v1alpha1 kind: Rollout name: keda-test-demo3 triggers: - type: prometheus metadata: serverAddress: http://<prometheus-host>:9090 metricName: http_request_total query: envoy_cluster_upstream_rq appId="300", cluster_name="300-0", container="envoy", namespace="demo3", response_code="200" threshold: "50" idleReplicaCount: 0 minReplicaCount: 1 maxReplicaCount: 10

TriggerAuthentication và ClusterTriggerAuthentication

Chúng quản lý xác thực hoặc bí mật để giám sát các nguồn sự kiện.

Bây giờ chúng ta hãy xem cách tất cả các thành phần KEDA này hoạt động cùng nhau và mở rộng quy mô khối lượng công việc K8s.

Cách Các Thành Phần KEDA Hoạt Động

Việc triển khai KEDA trên bất kỳ cụm Kubernetes nào rất dễ dàng vì nó không cần ghi đè hoặc nhân bản các chức năng hiện có. Sau khi được triển khai và các thành phần đã sẵn sàng, việc mở rộng quy mô dựa trên sự kiện bắt đầu bằng nguồn sự kiện bên ngoài (tham khảo Hình A). Scaler sẽ liên tục theo dõi các sự kiện dựa trên bộ nguồn được đặt trong ScaledObject và chuyển các số liệu đến bộ điều hợp số liệu trong trường hợp có bất kỳ sự kiện kích hoạt nào. Sau đó, bộ điều hợp số liệu điều chỉnh các số liệu và cung cấp chúng cho thành phần bộ điều khiển, sau đó mở rộng hoặc thu nhỏ việc triển khai dựa trên các quy tắc mở rộng quy mô được đặt trong ScaledObject.

Cách Các Thành Phần KEDA Hoạt Động

Cách Các Thành Phần KEDA Hoạt Động

Lưu ý rằng KEDA kích hoạt hoặc hủy kích hoạt việc triển khai bằng cách mở rộng quy mô số lượng bản sao thành 0 hoặc 1. Sau đó, nó kích hoạt HPA để mở rộng quy mô số lượng khối lượng công việc từ 1 lên n dựa trên tài nguyên của cụm.

Triển Khai và Demo KEDA

KEDA có thể được triển khai trong một cụm Kubernetes thông qua biểu đồ Helm, trung tâm toán tử hoặc khai báo YAML. Ví dụ, phương pháp sau sử dụng Helm để triển khai KEDA.

#Adding the Helm repo helm repo add kedacore https://kedacore.github.io/charts #Update the Helm repo helm repo update #Install Keda helm chart kubectl create namespace keda helm install keda kedacore/keda --namespace keda

Để kiểm tra xem KEDA Operator và Metrics API server đã hoạt động hay chưa sau khi triển khai, bạn có thể sử dụng lệnh sau:

Bây giờ, hãy xem video bên dưới để xem bản demo thực hành về tự động mở rộng quy mô bằng KEDA. Bản demo sử dụng một ứng dụng nhỏ có tên là TechTalks và sử dụng RabbitMQ làm trình trung gian nhắn tin.

Tích Hợp KEDA Trong Quy Trình CI/CD

KEDA giúp việc tự động mở rộng quy mô khối lượng công việc K8s trở nên rất dễ dàng và hiệu quả. Ngoài ra, cách tiếp cận không phụ thuộc vào nhà cung cấp của KEDA đảm bảo tính linh hoạt liên quan đến các nguồn sự kiện. Do đó, nó có thể giúp các nhóm DevOps và SRE tối ưu hóa chi phí và sử dụng tài nguyên của cụm Kubernetes bằng cách mở rộng hoặc thu nhỏ dựa trên các nguồn sự kiện và số liệu theo lựa chọn của họ.

Việc tích hợp KEDA trong quy trình CI/CD cho phép các nhóm DevOps phản hồi nhanh chóng với các sự kiện kích hoạt trong các yêu cầu về tài nguyên của ứng dụng, từ đó hợp lý hóa hơn nữa quy trình phân phối liên tục. Và KEDA hỗ trợ các sự kiện được tạo bởi các khối lượng công việc khác nhau như StatefulSet, Job, Custom Resource và Job. Tất cả những điều này giúp giảm thời gian ngừng hoạt động và cải thiện hiệu quả và trải nghiệm người dùng của ứng dụng.

SHARE