日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Knative 化繁为简之道:应用部署与访问

發布時間:2024/9/3 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Knative 化繁为简之道:应用部署与访问 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介:Knative 是一款基于 Kubernetes 之上的開源 Serverless 框架,其目標之一是降低用戶服務部署及使用門檻。在此基礎上提還供了其它豐富的功能,如自動擴縮容,路由流量,金絲雀發布以及事件驅動等。在本文中,我們首先 Kubernetes 上部署應用并進行服務訪問,然后在 Knative 中部署同樣的服務并訪問,以此對比來看Knative如何降低了服務部署及訪問的門檻。

導讀

Knative 是一款基于 Kubernetes 之上的開源 Serverless 框架,其目標之一是降低用戶服務部署及使用門檻。在此基礎上提還供了其它豐富的功能,如自動擴縮容,路由流量,金絲雀發布以及事件驅動等。在本文中,我們首先 Kubernetes 上部署應用并進行服務訪問,然后在 Knative 中部署同樣的服務并訪問,以此對比來看Knative如何降低了服務部署及訪問的門檻。
我們清楚如果提供一個線上對外訪問的服務,一般需要提供域名訪問入口,另外服務發現/負載均衡以及工作負載也是必須的,那么要提供這些能力,我們先看一下在Kubernetes中應該怎么做。

在 Kubernetes 提供域名服務訪問


在kubernetes中,我們提供對外訪問的服務,需要創建如下3個資源:
? Ingress - 域名訪問
? Service - 服務發現/負載均衡
? Deployment/Statefulset等 - 工作負載
以最簡單的部署 hello-world 為例,首先我們創建工作負載 Deployment:

apiVersion: apps/v1 kind: Deployment metadata:name: hello-world-deploymentlabels:app: hello-world spec:selector:matchLabels:app: hello-worldreplicas: 2template:metadata:labels:app: hello-worldspec:containers:- name: hello-worldimage: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56ports:- name: httpcontainerPort: 8080env:- name: TARGETvalue: "Go Sample v1"

將上面的文本保存hello_deployment.yaml, 然后執行 kubectl apply :

$ kubectl apply -f hello_deployment.yaml

我們可以看到兩個 POD 已經 running 狀態:

$ kubectl get pods NAME READY STATUS RESTARTS AGE hello-world-deployment-86923fxfs-4wfw 1/1 Running 0 30s hello-world-deployment-86923fxfs-xsr 1/1 Running 0 30s

接下來,我們創建服務訪問 Service:

apiVersion: v1 kind: Service metadata:name: hello-world spec:selector:app: hello-worldtype: ClusterIPports:- port: 80targetPort: 8080name: http

執行 kubectl 創建 service 如下:

$ kubectl apply -f hello_k8s_svc.yaml

最后我們將服務通過網關提供出來,那么需要Ingress, 通常的使用nginx ingress, 關于部署nginx ingress controller, 這里不進行詳細說明,可以參考社區的部署方式即可: https://github.com/kubernetes/ingress-nginx.
部署完 nginx ingress controller 之后,我們創建ingress, 具體yaml內容如下:

apiVersion: extensions/v1beta1 kind: Ingress metadata:name: hello-world spec:rules:- host: helloworld-go.knative.tophttp:paths:- path: /backend:serviceName: hello-worldservicePort: 80

執行kubectl之后,將helloworld-go.knative.top設置域名解析(nginx ingress controller slb)之后我們直接進行域名訪問:

$ curl helloworld-go.knative.top Hello Go Sample v1!

在 Knative 中提供域名服務訪問

在 Knative 中提供域名訪問你只需要創建 Knative Service 服務即可,最直接的理解就是:Knative Service = ingress + k8s service + deployment。此外Knative 提供了豐富的網關插件,如istio、kourier等。

一個簡單的 Knative Service yaml:

apiVersion: serving.knative.dev/v1 kind: Service metadata:name: helloworld-gonamespace: default spec:template:spec:containers:- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56env:- name: TARGETvalue: "Go Sample v1"

看起來是不是跟Deployment很像,其實這里面的spec,就是pod spec,對于直接對K8s工作負載比較熟悉的來說,使用Knative Service可以說是0門檻。
接下來通過執行 kubectl 創建該資源:

$ kubectl apply -f ksvc.yaml

我們可以看到Pod已經創建出來了:

$ kubectl get pods NAME READY STATUS RESTARTS AGE helloworld-go-cdqm7-deployment-75b4dc8c9-xxzcw 2/2 Running 0 11s

接下來我們如何進行域名服務訪問呢?很簡單,通過查看Knative Sevice即可:

$ kubectl get ksvc NAME URL LATESTCREATED LATESTREADY READY REASON helloworld-go http://helloworld-go.default.knative.top helloworld-go-5c52g helloworld-go-5c52g True

設置域名解析到對應的網關slb(如果使用istio, 則直接獲取istio-ingressgateway 對應的外網ip),通過 curl 直接訪問域名:

$ curl helloworld-go.default.knative.top Hello Go Sample v1!

總結

通過上面的示例對比,我們很直接看到:通過 Knative 可以更簡單的部署并提供服務。Knative 如何做到這一點呢?其實就是將K8s原有的資源進行了封裝,并抽象出來了Knative Service這個應用模型,在滿足功能的情況下,收斂了用戶的資源操作界面,降低了服務部署與訪問的門檻。此外通過這個模型,還提供了多版本管理以及基于流量的灰度發布能力,至于這些,我們會在后續的文章中介紹,歡迎大家持續關注。

原文鏈接:https://developer.aliyun.com/article/779733?

版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Knative 化繁为简之道:应用部署与访问的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。