Knative 化繁为简之道:应用部署与访问
導讀
Knative 是一款基于 Kubernetes 之上的開源 Serverless 框架,其目標之一是降低用戶服務部署及使用門檻。在此基礎上提還供了其它豐富的功能,如自動擴縮容,路由流量,金絲雀發布以及事件驅動等。在本文中,我們首先 Kubernetes 上部署應用并進行服務訪問,然后在 Knative 中部署同樣的服務并訪問,以此對比來看Knative如何降低了服務部署及訪問的門檻。
我們清楚如果提供一個線上對外訪問的服務,一般需要提供域名訪問入口,另外服務發現/負載均衡以及工作負載也是必須的,那么要提供這些能力,我們先看一下在Kubernetes中應該怎么做。
在 Kubernetes 提供域名服務訪問
在kubernetes中,我們提供對外訪問的服務,需要創建如下3個資源:
? Ingress - 域名訪問
? Service - 服務發現/負載均衡
? Deployment/Statefulset等 - 工作負載
以最簡單的部署 hello-world 為例,首先我們創建工作負載 Deployment:
將上面的文本保存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內容如下:
執行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 創建該資源:
我們可以看到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 化繁为简之道:应用部署与访问的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用实时计算 Flink 搞定实时数
- 下一篇: Flink Forward Asia 2