Knative - nền tảng dưới dạng dịch vụ dựa trên k8s với sự hỗ trợ không cần máy chủ

Knative - nền tảng dưới dạng dịch vụ dựa trên k8s với sự hỗ trợ không cần máy chủ

Kubernetes chắc chắn đã trở thành nền tảng thống trị cho việc triển khai container. Nó cung cấp khả năng kiểm soát hầu hết mọi thứ bằng cách sử dụng API và bộ điều khiển tùy chỉnh mở rộng API bằng tài nguyên tùy chỉnh.

Tuy nhiên, người dùng vẫn phải đưa ra quyết định chi tiết về cách triển khai, định cấu hình, quản lý và mở rộng quy mô ứng dụng một cách chính xác. Các vấn đề về mở rộng ứng dụng, bảo vệ và luồng lưu lượng vẫn do người dùng quyết định. Điều này khiến Kubernetes khác biệt với các nền tảng thông thường dưới dạng dịch vụ (PaaS), chẳng hạn như Cloud Foundry và Heroku.

Các nền tảng này có giao diện người dùng được đơn giản hóa và nhắm đến các nhà phát triển ứng dụng, những người thường xuyên tham gia vào việc thiết lập các ứng dụng riêng lẻ. Việc định tuyến, triển khai và số liệu được hệ thống PaaS cơ bản quản lý một cách minh bạch cho người dùng.

Quy trình làm việc từ nguồn đến tàu được PaaS xử lý bằng cách tạo hình ảnh vùng chứa tùy chỉnh, triển khai nó, thiết lập tuyến đường mới và tên miền phụ DNS cho lưu lượng truy cập đến. Tất cả điều này được khởi chạy theo lệnh git push.

Kubernetes (có chủ ý) chỉ cung cấp các khối xây dựng cốt lõi cho các nền tảng như vậy, để cộng đồng tự do thực hiện công việc. Làm sao Kelsey Hightower anh ấy nói:

Kubernetes là một nền tảng để xây dựng nền tảng. Vị trí tốt nhất để bắt đầu nhưng không kết thúc.

Kết quả là, chúng tôi thấy một loạt bản dựng Kubernetes, cũng như các công ty lưu trữ đang cố gắng tạo PaaS cho Kubernetes, chẳng hạn như OpenShift và Rancher. Trong bối cảnh thị trường Kube-PaaS đang phát triển, Knative, được Google và Pivotal thành lập vào tháng 2018 năm XNUMX, đang bước vào cuộc đua.

Knative là sự hợp tác giữa Google và Pivotal, với một chút trợ giúp từ các công ty khác như IBM, RedHat và Solo.im. Nó cung cấp những thứ PaaS tương tự như Kubernetes với sự hỗ trợ hàng đầu cho các ứng dụng dựa trên máy tính không có máy chủ. Không giống như các bản dựng Kubernetes, Knative được cài đặt dưới dạng tiện ích bổ sung trên mọi cụm Kubernetes tương thích và được định cấu hình thông qua tài nguyên người dùng.

Knative là gì?

Knative được mô tả là “Nền tảng dựa trên Kubernetes để phân phối và quản lý khối lượng công việc bằng cách sử dụng điện toán không có máy chủ hiện đại”. Knative, trong khi tự thanh toán như một nền tảng như vậy, sẽ chủ động tự động chia tỷ lệ các vùng chứa theo tỷ lệ với các yêu cầu HTTP đồng thời. Các dịch vụ không được sử dụng cuối cùng sẽ giảm quy mô về 0, cung cấp khả năng mở rộng theo yêu cầu theo kiểu không có máy chủ.

Knative bao gồm một bộ bộ điều khiển cài đặt trong bất kỳ cụm Kubernetes nào và cung cấp các khả năng sau:

  • xây dựng các ứng dụng được đóng gói từ mã nguồn (được cung cấp bởi thành phần Xây dựng),
  • cung cấp quyền truy cập vào lưu lượng truy cập đến các ứng dụng (được cung cấp bởi thành phần Phục vụ),
  • phân phối và tự động mở rộng quy mô ứng dụng theo yêu cầu (cũng được cung cấp bởi thành phần Phục vụ),
  • xác định nguồn của các sự kiện dẫn đến việc khởi chạy ứng dụng (được cung cấp bởi thành phần Tổ chức sự kiện).

Một thành phần quan trọng là Cung cấp, cung cấp khả năng cung cấp, tự động thay đổi quy mô và quản lý lưu lượng cho các ứng dụng được quản lý. Sau khi cài đặt Knative, bạn vẫn có toàn quyền truy cập vào Kubernetes API, cho phép người dùng quản lý ứng dụng bình thường và cũng dùng để gỡ lỗi các dịch vụ Knative, hoạt động với cùng các API nguyên thủy mà các dịch vụ này sử dụng (mô-đun, dịch vụ, v.v.).

Với sự trợ giúp của Phục vụ, việc định tuyến lưu lượng xanh lam cũng được tự động hóa, đảm bảo phân tách lưu lượng giữa phiên bản mới và phiên bản cũ của ứng dụng khi người dùng cung cấp phiên bản cập nhật của ứng dụng.

Bản thân Knative phụ thuộc vào việc cài đặt bộ điều khiển xâm nhập tương thích. Tại thời điểm viết bài này được hỗ trợ Cổng API Gloo и Lưới dịch vụ Istio. Nó sẽ định cấu hình lối vào có sẵn để định tuyến lưu lượng truy cập đến các ứng dụng do Knative quản lý.

Istio Service Mesh có thể là một phần phụ thuộc lớn đối với người dùng Knative muốn dùng thử mà không cần cài đặt bảng điều khiển Istio, vì Knative chỉ phụ thuộc vào cổng.

Vì lý do này, hầu hết người dùng thích Gloo làm cổng vào Knative, cung cấp bộ khả năng tương tự như Istio (với mục đích chỉ sử dụng Knative), đồng thời sử dụng ít tài nguyên hơn đáng kể và có chi phí vận hành thấp hơn.

Hãy kiểm tra hoạt động của Knative trên giá đỡ. Tôi sẽ sử dụng cụm mới cài đặt đang chạy trong GKE:

kubectl get namespace
NAME          STATUS   AGE
default       Active   21h
kube-public   Active   21h
kube-system   Active   21h

Hãy bắt đầu cài đặt Knative và Gloo. Điều này có thể được thực hiện theo bất kỳ thứ tự nào:

# ставим Knative-Serving
kubectl apply -f 
 https://github.com/knative/serving/releases/download/v0.8.0/serving-core.yaml
namespace/knative-serving created
# ...
# ставим Gloo
kubectl apply -f 
  https://github.com/solo-io/gloo/releases/download/v0.18.22/gloo-knative.yaml
namespace/gloo-system created
# ...

Chúng tôi kiểm tra xem tất cả các Pod có ở trạng thái “Đang chạy” hay không:

kubectl get pod -n knative-serving
NAME                              READY   STATUS    RESTARTS   AGE
activator-5dd55958cc-fkp7r        1/1     Running   0          7m32s
autoscaler-fd66459b7-7d5s2        1/1     Running   0          7m31s
autoscaler-hpa-85b5667df4-mdjch   1/1     Running   0          7m32s
controller-85c8bb7ffd-nj9cs       1/1     Running   0          7m29s
webhook-5bd79b5c8b-7czrm          1/1     Running   0          7m29s
kubectl get pod -n gloo-system
NAME                                      READY   STATUS    RESTARTS   AGE
discovery-69548c8475-fvh7q                1/1     Running   0          44s
gloo-5b6954d7c7-7rfk9                     1/1     Running   0          45s
ingress-6c46cdf6f6-jwj7m                  1/1     Running   0          44s
knative-external-proxy-7dd7665869-x9xkg   1/1     Running   0          44s
knative-internal-proxy-7775476875-9xvdg   1/1     Running   0          44s

Gloo đã sẵn sàng để định tuyến, hãy tạo một dịch vụ Knative tự động mở rộng quy mô (hãy gọi nó là kservice) và định tuyến lưu lượng truy cập đến dịch vụ đó.

Các dịch vụ Knative cung cấp một cách dễ dàng hơn để phân phối ứng dụng đến Kubernetes so với mô hình Triển khai+Dịch vụ+Ingress thông thường. Chúng tôi sẽ làm việc với ví dụ này:

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
 name: helloworld-go
 namespace: default
spec:
 template:
   spec:
     containers:
       - image: gcr.io/knative-samples/helloworld-go
         env:
           - name: TARGET
             Value: Knative user

Tôi đã sao chép tệp này vào một tệp, sau đó áp dụng nó vào cụm Kubernetes của mình theo cách này:

kubectl apply -f ksvc.yaml -n default

Chúng tôi có thể xem các tài nguyên do Knative tạo trong cụm sau khi phân phối 'helloworld-go' của chúng tôi dịch vụ kservice:

kubectl get pod -n default
NAME                                              READY   STATUS    RESTARTS   AGE
helloworld-go-fjp75-deployment-678b965ccb-sfpn8   2/2     Running   0          68s

Nhóm có hình ảnh 'helloworld-go' của chúng tôi sẽ được khởi chạy khi kservice được triển khai. Nếu không có lưu lượng truy cập, số lượng nhóm sẽ giảm xuống 0. Và ngược lại, nếu số lượng yêu cầu đồng thời vượt quá ngưỡng cấu hình nhất định thì số lượng pod sẽ tăng lên.

kubectl get ingresses.networking.internal.knative.dev -n default
NAME            READY   REASON
helloworld-go   True

Knative định cấu hình hoạt động xâm nhập của nó bằng cách sử dụng tài nguyên 'xâm nhập' đặc biệt trong API Knative nội bộ. Gloo sử dụng API này làm cấu hình để cung cấp các tính năng giống PaaS, bao gồm mô hình triển khai xanh lam, thực thi TLS tự động, thời gian chờ và các tính năng định tuyến nâng cao khác.

Sau một thời gian, chúng tôi thấy nhóm của mình đã biến mất (vì không có lưu lượng truy cập nào đến):

kubectl get pod -n default

No resources found.
kubectl get deployment -n default
NAME                             DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
helloworld-go-fjp75-deployment   0         0         0            0           9m46s

Cuối cùng chúng tôi sẽ cố gắng tiếp cận họ. Bạn có thể dễ dàng và dễ dàng lấy URL cho Knative Proxy bằng cách sử dụng glooctl:

glooctl proxy url --name knative-external-proxy
http://35.190.151.188:80

Không cần cài đặt glooctl bạn có thể xem địa chỉ và cổng trong dịch vụ kube:

kubectl get svc -n gloo-system knative-external-proxy
NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                      AGE
knative-external-proxy   LoadBalancer   10.16.11.157   35.190.151.188   80:32168/TCP,443:30729/TCP   77m

Hãy chạy một số dữ liệu bằng cURL:

curl -H "Host: helloworld-go.default.example.com" http://35.190.151.188
Hello Knative user!

Knative cung cấp gần như PaaS cho các nhà phát triển trên Kubernetes có sẵn bằng cách sử dụng cổng API đầy đủ, hiệu suất cao của Gloo. Bài đăng này chỉ giới thiệu sơ qua về các tùy chọn tùy chỉnh mở rộng và các tính năng bổ sung của Knative. Tương tự với Gloo

Mặc dù thực tế Knative vẫn là một dự án non trẻ nhưng nhóm của nó vẫn phát hành các phiên bản mới sáu tuần một lần và việc triển khai các tính năng nâng cao đã bắt đầu, chẳng hạn như triển khai TLS tự động, tự động mở rộng bảng điều khiển. Rất có khả năng, nhờ sự hợp tác giữa nhiều công ty đám mây và là nền tảng của dịch vụ Cloud Run mới của Google, Knative có thể trở thành lựa chọn chính cho điện toán không có máy chủ và PaaS trên Kubernetes. Theo dõi tin tức!

Từ các biên tập viên của SouthBridge
Ý kiến ​​của người đọc rất quan trọng đối với chúng tôi, vì vậy chúng tôi yêu cầu bạn tham gia vào một cuộc khảo sát ngắn liên quan đến các bài viết trong tương lai về Knative, Kubernetes, máy tính không có máy chủ:

Chỉ những người dùng đã đăng ký mới có thể tham gia khảo sát. Đăng nhập, xin vui lòng.

Tôi có nên tiếp tục viết bài và hướng dẫn về Knative và máy tính không có máy chủ không?

  • Vâng, làm ơn.

  • Không, cám ơn.

28 người dùng bình chọn. 4 người dùng bỏ phiếu trắng.

Nguồn: www.habr.com

Thêm một lời nhận xét