使用Knative on ASM部署Serverless應(yīng)用
服務(wù)網(wǎng)格ASM與容器服務(wù)ACK及ACK Serverless的Knative Serving能力緊密結(jié)合,簡化在多種集群環(huán)境中部署和管理Serverless應(yīng)用服務(wù)的過程。針對快速構(gòu)建、部署以及管理基于容器的應(yīng)用場景,尤其是涉及自動擴縮容、按需計費需求的情況,Knative on ASM提供了一站式的解決方案,幫助您實現(xiàn)Serverless應(yīng)用程序的快速部署與靈活擴展,提升開發(fā)效率并增強業(yè)務(wù)彈性。本文介紹如何使用Knative on ASM創(chuàng)建Knative服務(wù)。
前提條件
已創(chuàng)建1.16.3.50及以上版本的ASM實例,并已將一個ACK或ACK Serverless集群添加到該實例中。具體操作,請參見創(chuàng)建ASM實例和添加集群到ASM實例。
重要創(chuàng)建ASM實例時,請確保在資源配置區(qū)域,啟用數(shù)據(jù)面集群KubeAPI訪問Istio資源已勾選(默認勾選),即已啟用數(shù)據(jù)面KubeAPI訪問Istio資源。
目標ACK或ACK Serverless集群已開啟公網(wǎng)API Server,以便快速接入。
ASM實例和ACK或ACK Serverless集群需處于同一VPC、同一地域并使用同一交換機。
已為集群添加入口網(wǎng)關(guān)。本實例使用ASM入口網(wǎng)關(guān)作為集群網(wǎng)關(guān)。具體操作,請參見創(chuàng)建入口網(wǎng)關(guān)。
說明1.21.6.84版本以上的ASM實例不再需要手動創(chuàng)建入口網(wǎng)關(guān)
ASM網(wǎng)關(guān)支持為Knative提供Knative Revisions流量分發(fā),支持gRPC服務(wù)、超時和重試、TLS證書和外部認證授權(quán)等功能。詳細信息,請參見ASM網(wǎng)關(guān)概述。
步驟一:安裝Knative
ASM實例版本為1.18.2.104以下
在ACK或ACK Serverless集群中部署Knative Serving組件,服務(wù)網(wǎng)關(guān)選擇Kourier。
登錄ASM控制臺,在左側(cè)導航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側(cè)導航欄,選擇 。
在Knative on ASM頁面,單擊啟用Knative on ASM。
ASM實例版本為1.18.2.104~1.21.6.83
ASM實例版本為1.21.6.84及以上
1.21.6.84版本以上的ASM實例不再需要單獨在ASM控制臺開啟Knative on ASM功能。
登錄容器服務(wù)管理控制臺,在左側(cè)導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側(cè)導航欄,選擇 。
在Knative頁面的組件管理頁簽下,單擊一鍵部署Knative,然后在服務(wù)網(wǎng)關(guān)處選擇ASM,然后單擊一鍵部署。
部署成功后,即可在Knative中使用服務(wù)網(wǎng)格ASM。
說明頁面提示部署完成后,請確認入口網(wǎng)關(guān)已經(jīng)創(chuàng)建完成并正常運行后再進行Kantive服務(wù)的部署。
步驟二:部署Knative服務(wù)
Knative on ASM支持通過ACK控制臺和YAML配置文件兩種方式部署Knative服務(wù)。您可以按需選擇。
方式一:通過ACK控制臺部署
登錄容器服務(wù)管理控制臺,在左側(cè)導航欄單擊集群。
在集群列表頁面,單擊目標集群名稱,然后在左側(cè)導航欄,選擇
。在Knative頁面,單擊服務(wù)管理頁簽,在右上角單擊創(chuàng)建服務(wù),配置相關(guān)信息,然后單擊創(chuàng)建。
關(guān)于配置項的更多信息,請參見快速部署Serverless應(yīng)用。
配置項
說明
示例值
命名空間
選擇該服務(wù)所屬的命名空間。
default
服務(wù)名稱
自定義該服務(wù)的名稱。
helloworld-go
鏡像名稱
單擊選擇鏡像,在彈出的對話框中選擇所需的鏡像并單擊確定。支持填寫私有Registry,填寫的格式為domainname/namespace/imagename:tag。
registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go
鏡像版本
單擊選擇鏡像版本,在彈出的對話框選擇目標版本,單擊確定。
73fbdd56
訪問協(xié)議
支持HTTP和gRPC兩種訪問協(xié)議。
HTTP
容器端口
設(shè)置暴露的容器訪問端口,端口號必須介于1~65535。
8080
環(huán)境變量
單擊高級設(shè)置,然后在環(huán)境變量右側(cè)單擊新增,通過鍵值對的形式配置環(huán)境變量。
類型:自定義
變量名稱:TARGET
變量/變量引用:Knative
方式二:通過YAML配置文件部署
將以下內(nèi)容保存為helloworld-go.yaml。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go annotations: knative.k8s.alibabacloud/tls: "false" spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/helloworld-go:160e4dc8 ports: - containerPort: 8080 env: - name: TARGET value: "Knative"
使用kubectl連接到ACK集群,執(zhí)行以下命令創(chuàng)建Knative Service,并等待Knative Service創(chuàng)建成功。
kubectl apply -f helloworld-go.yaml
執(zhí)行以下命令,查看Knative服務(wù)列表。
kubectl get ksvc
預期輸出:
NAME URL LATESTCREATED LATESTREADY READY REASON helloworld-go http://helloworld-go.default.example.com helloworld-go-00001 helloworld-go-00001 True
方式三:使用模板創(chuàng)建
登錄容器服務(wù)管理控制臺,在左側(cè)導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側(cè)導航欄,選擇 。
在Knative頁面的服務(wù)管理頁簽下,選擇命名空間為default,然后單擊使用模板創(chuàng)建,將以下YAML示例粘貼至模板,最后單擊創(chuàng)建。創(chuàng)建一個名為helloworld-go的服務(wù)。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 # 請將{REGION-ID}替換為您集群所在地域。 env: - name: TARGET value: "Knative"
步驟三:獲取訪問網(wǎng)關(guān)地址
方式一:通過ACK控制臺獲取
登錄容器服務(wù)管理控制臺,在左側(cè)導航欄單擊集群。
在集群列表頁面,單擊目標集群名稱,然后在左側(cè)導航欄,選擇
。單擊服務(wù)管理頁簽,然后在服務(wù)列表中單擊目標服務(wù)名稱,進入Knative服務(wù)詳情頁面。在基本信息區(qū)域,查看并獲取訪問網(wǎng)關(guān)及默認域名。
方式二:通過ASM控制臺獲取
登錄ASM控制臺,在左側(cè)導航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側(cè)導航欄,選擇
。在入口網(wǎng)關(guān)頁面的服務(wù)地址區(qū)域,查看并獲取訪問網(wǎng)關(guān)地址。
步驟四:訪問服務(wù)
Knative服務(wù)創(chuàng)建完成后,通過綁定Host域名與訪問網(wǎng)關(guān),可以直接訪問服務(wù)地址。
在服務(wù)管理頁面的訪問網(wǎng)關(guān)列,獲取helloworld-go服務(wù)的網(wǎng)關(guān)地址。
執(zhí)行以下命令,訪問helloworld-go服務(wù)。
curl -H "host: helloworld-go.default.example.com" http://39.XX.XX.XX # 網(wǎng)關(guān)的IP和域名請以您的實際數(shù)據(jù)為準。
預期輸出:
Hello Knative!
輸出結(jié)果表明服務(wù)訪問成功。
相關(guān)文檔
Knative默認服務(wù)域名為example.com。Knative on ASM支持使用自定義域名作為默認域名。具體操作,請參見在Knative on ASM中使用自定義域名。
ASM網(wǎng)關(guān)支持HTTPS協(xié)議和動態(tài)加載證書功能。在使用Knative on ASM時,您可以通過ASM網(wǎng)關(guān)來實現(xiàn)HTTPS訪問。具體操作,請參見使用ASM網(wǎng)關(guān)實現(xiàn)HTTPS訪問Knative服務(wù)。
Knative on ASM提供基于流量的灰度發(fā)布能力。創(chuàng)建Knative服務(wù)時,Knative會為服務(wù)自動創(chuàng)建第一個修訂版本Revision。后續(xù)每當Knative服務(wù)的配置發(fā)生變化時,Knative都會創(chuàng)建一個新修訂版本,通過修改流量發(fā)往不同修訂版本的分配比例來實現(xiàn)灰度發(fā)布功能。具體操作,請參見在Knative on ASM中基于流量灰度發(fā)布服務(wù)。
Knative Serving為每個Pod注入QUEUE代理容器(queue-proxy)。該容器負責向Autoscaler報告業(yè)務(wù)容器的并發(fā)指標。接收到這些指標之后,Autoscaler會根據(jù)并發(fā)請求數(shù)及縮放算法,調(diào)整Deployment的Pod數(shù)量,從而實現(xiàn)自動擴縮容。具體操作,請參見基于流量請求數(shù)實現(xiàn)服務(wù)自動擴縮容。