Kubernetes Service là gì ? Tự học Kubernetes từ A-Z – phần 4


1071
1.7k shares, 1071 points

Mở đầu

Serverless trên Kubernetes làm giảm việc cấu hình lặp đi lặp lại với nhà cung cấp đám mây. Nó chỉ là kết quả của việc liên tục tự động hóa công việc thủ công.

Khi chúng ta nói về việc serverless trên Kubernetes, cần xem xét hai lĩnh vực khác nhau:

  1. Triển khai các ứng dụngs serverless trong cluster (giảm số lượng tệp YAML cần thiết cho mỗi ứng dụng + bộ chứa tự động xây dựng)
  2. chạy pods container serverless mà không cần quản lý các nodes/ VM

Serverless

Bạn sẽ tương tác ít hơn với máy chủ và cơ sở hạ tầng cần thiết để chạy các ứng dụng. Khi sử dụng từ “serverless”, nó có chỉ có hai điều khác nhau: CaaS và FaaS.

CaaS — Container as a Service

Bạn tạo container (Docker), quăng nó vào CaaS và nó chạy, nó tự phục vụ và tự scale tự động

Kubernetes

Các ví dụ là Azure Container Instances, Google Cloud Run hoặc AWS Fargate.

FaaS — Function as a Service

Bạn viết code, quăng nó vào FaaS và tự chạy, tự phục vụ và tự scale tự động.

Kubernetes

Các ví dụ được quản lý là Azure Functions, Functions Google hoặc AWS Lambda.

FaaS hoạt động như thế nào?

Cách FaaS chạy code của bạn có thể xảy ra theo những cách khác nhau. FaaS thực sự build container cho mỗi thay đổi code và sau đó CaaS được sử dụng như thế này:

Kubernetes

Một cách khác có thể là FaaS lấy functions sourcecode vào môi trường được xác định trước (container) một cách linh hoạt trong khi khởi động. Môi trường sẽ có sẵn các ngôn ngữ lập trình khác nhau. Khi sử dụng một ngôn ngữ biên dịch như Go, thì việc biên dịch cũng phải thực hiện khi khởi động.

Events / Scaling

FaaS hầu hết thời gian được sử dụng cùng với các hệ thống event(sự kiện) kích hoạt việc khởi tạo functions. Các event có thể bắt nguồn từ API-Gateways, Github, Kafka, RabbitMQ, CronJobs, v.v.

Kubernetes

Đối với mỗi event, một function mới được tạo để xử lý. Nếu có nhiều event xảy ra cùng một lúc, nhiều trường hợp sẽ được tạo để xử lý những event này. Bằng cách này, chúng ta có automatic scaling( tự động phóng to thu nhỏ)

FaaS giao tiếp với các nguồn event khác nhau, do đó, các functions mà không cần phải thực hiện. Họ chỉ làm việc với một định dạng event mà FaaS sử dụng, như CloudEvents hoặc vận chuyển qua HTTP.

Kubernetes
https://cloudevents.io

Dự án CloudEvents mô tả cấu trúc và siêu dữ liệu của các event dưới dạng “standard” (tiêu chuẩn). Nó cũng bao gồm dữ liệu và lược đồ mô tả dữ liệu đó. Các event trên đám mây bao bọc dữ liệu event. Điều này có thể là tuyệt vời nếu được nhiều nhà cung cấp áp dụng để có được khả năng tương tác.

App Kubernetes

Chúng ta hãy xem các bước cần thiết để phát triển một ứng dụng non-serverless chạy trên Kubernetes:

Kubernetes

Chúng ta cần xây dựng một container, tạo các tài nguyên Kubernetes khác nhau (các tệp YAML) và sau đó quyết định có bao nhiêu node hoạt động, chúng ta cần để chạy ứng dụng của mình.

Quyết định có bao nhiêu node mà chúng ta cần có thể được xử lý linh hoạt hơn bằng cách định cấu hình autoscaler Cluster / Node. Mặc dù sau đó chúng ta vẫn phải cấu hình nó và cần đặt số lượng node tối thiểu và tối đa.

Chúng ta tương tác với các “servers” bằng cách tiếp cận truyền thống này. Đầu tiên tạo / build container, rồi viết các tệp YAML. Và cũng xác định số lượng và tài nguyên của các node.

App Kubernetes Serverless

Giờ hãy cùng khám phá các phương pháp tiếp cận serverless khi phát triển ứng dụng cho Kubernetes.

CaaS — Container as a Service

This image has an empty alt attribute; its file name is 1*JfoJd33zAX5m98TVskY8JQ.png

Ở đây chúng ta giảm lượng tài nguyên Kubernetes (tệp YAML) sẽ được tạo đáng kể. CaaS sẽ tạo ra tất cả các nguồn con cần thiết như routing tự động, routing Ingress hoặc Istio.

Tất cả những gì chúng ta làm là cung cấp container (Docker) và tạo một tài nguyên k8s duy nhất. CaaS quyết định khi nào start ứng dụng, có thể dựa trên các events hoặc dựa trên định nghĩa.

Chúng ta phải đảm bảo rằng container đã xây dựng có thể nhận và xử lý các events đến từ CaaS có thể thông qua HTTP hoặc CloudEvents chẳng hạn. Điều này có thể yêu cầu một số thư viện bên trong container.

FaaS — Function as a Service

This image has an empty alt attribute; its file name is 1*NkrEERZgTqEpaXMmBKVzNg.png

FaaS function.yml sẽ chứa resource K8s từ hệ thống FaaS. Trong resource, chúng ta đặt những thứ như tên hàm, vị trí của mã nguồn, thời gian chạy ngôn ngữ và trigger events

Nếu chúng ta upload code thông qua một giao diện web thì việc tạo FaaS function.yaml không cần thiết.

Với FaaS, chúng ta cũng có mọi thứ mà giải pháp CaaS cung cấp. Bây giờ chúng ta giảm công việc hơn nữa bởi vì có các công cụ chạy trong cluster Kubernetes có thể thực thi / xây dựng mã nguồn ứng dụng trực tiếp.

Container được build đã bao gồm các thư viện cần thiết HTTP hoặc CloudEvents, để nhận các event từ FaaS. Chúng ta không phải lo lắng về điều đó.

Source có thể được lưu trữ trong repo Git, được tải lên qua webinterface hoặc có sẵn ở một nơi khác. FaaS truy cập code, listen các thay đổi, xây dựng vùng chứa và sau đó chuyển đến CaaS phục vụ event.

This image has an empty alt attribute; its file name is 1*U4fIQGNsVBTXBZp1zuGTBA.png

Cold và warm starts

Cold starts(khởi đầu lạnh) có nghĩa là không có nhóm nào đang chạy để xử lý một event, do đó, nó sẽ mất một chút thời gian để tạo ra nó. Thông thường, các pod này sẽ tồn tại một chút sau khi chúng được sử dụng lần cuối và có thể được sử dụng lại.

Warm start(khởi đầu ấm áp) luôn được sẵn sàng chạy và tiếp nhận bất kì event. Warm start nhanh hơn nhưng cũng tốn tài nguyên.

Fission / Môi trường dựa FaaS

This image has an empty alt attribute; its file name is 1*k0cm1bFT1ZIJUl71bfHx2g.png

Một ví dụ FaaS của K8s, Fission, không thực sự xây dựng các containers bất biến cho mỗi function nhưng sử dụng ý tưởng về các containers môi trường có thể thay đổi để lấy codemột cách linh hoạt để sau đó chuyển đổi chúng thành các function cụ thể của pod

Khả năng quan sát

Chuyển từ các microservices được đóng gói sang các function có thể dẫn đến việc phải quản lý các services thậm chí nhiều hơn và nhỏ hơn trước đây. Điều này được gây ra bởi tạo các chức năng quá dễ dàng chỉ listen và xử lý một event duy nhất.

Để quản lý số lượng service hoặc function cao hơn cần thiết để giữ khả năng quan sát (số liệu, logging, tracing). Đây là lý do tại sao hầu hết Kubernetes FaaS và CaaS đã tích hợp với ví dụ Prometheus, Jaeger và service mesh như Istio hoặc Linkerd.

Node Kubernetes Serverless

Trong phần trước chúng ta đã nói về các ứng dụng serverless của K8s và chúng ta đã thấy các quy trình công việc khi sử dụng CaaS hoặc FaaS. Những điều này đơn giản hóa các quy trình và giảm công việc lặp đi lặp lại rất nhiều.

Nhưng các nhà phát triển hoặc nhà khai thác vẫn đang tương tác với các máy chủ: các VM được sử dụng làm các node hoạt động trong cluster. Họ vẫn cần thiết lập có bao nhiêu node và tài nguyên của họ (CPU / bộ nhớ).

This image has an empty alt attribute; its file name is 1*SthgjT7yZXgQxkYzkuIAng.png

Virtual Kubelet mô phỏng một node hoạt động thành Kubernetes. Sau đó có thể được sử dụng cho các pod trên, giống như với bất kỳ node bình thường nào khác.

Tại sao sử dụng Kubernetes?

This image has an empty alt attribute; its file name is 1*xMWRR0UxssFGdwF6DkLQPg.png

Kubernetes cung cấp các khối xây dựng tuyệt vời và linh hoạt. Được tạo ra để dễ dàng tương tác và người dùng cuối. Điều này làm cho K8s phức tạp và đòi hỏi nhiều công việc lặp đi lặp lại khi sử dụng trực tiếp.

Kubernetes trở thành một tiêu chuẩn độc lập của nhà cung cấp đám mây. Sử dụng các frameworks serverless ở phần trên có ý nghĩa để giữ sự độc lập này khi serverless.

Bằng cách sử dụng serverless trên K8s, chúng ta có thể giảm công việc lặp đi lặp lại với tỷ lệ rất cao. Vì vậy chúng ta có thể dành nhiều thời gian hơn để xây dựng các việc khác hơn.

Tóm tắt

This image has an empty alt attribute; its file name is 1*tRebIPaAjL8ZtTvu4CC_3w.png
truyền thống
This image has an empty alt attribute; its file name is 1*SthgjT7yZXgQxkYzkuIAng.png
serverless

Kết luận

Tôi nghĩ rằng kiến ​​trúc serverless đã chứng minh điều đó. Và sẽ ngày càng trở nên thịnh hành trong những năm tới. Hãy sử dụng trên các tiêu chuẩn mở như K8 để đảm bảo khả năng tương tác cao hơn.

Serverless trên Kubernetes chỉ là kết quả của việc liên tục tự động hóa công việc thủ công.

Xem toàn series Kubernetes :


Like it? Share with your friends!

1071
1.7k shares, 1071 points

What's Your Reaction?

hate hate
2664
hate
confused confused
1333
confused
fail fail
333
fail
fun fun
3331
fun
geeky geeky
2997
geeky
love love
1999
love
lol lol
2331
lol
omg omg
1332
omg
win win
333
win