Service MeshASM與Container ServiceACK及ACK Serverless的Knative Serving能力緊密結合,簡化在多種叢集環境中部署和管理Serverless應用服務的過程。針對快速構建、部署以及管理基於容器的應用情境,尤其是涉及自動擴縮容、按需計費需求的情況,Knative on ASM提供了一站式的解決方案,協助您實現Serverless應用程式的快速部署與靈活擴充,提升開發效率並增強業務彈性。本文介紹如何使用Knative on ASM建立Knative服務。
前提條件
已建立1.16.3.50及以上版本的ASM執行個體,並已將一個ACK或ACK Serverless叢集添加到該執行個體中。具體操作,請參見建立ASM執行個體和添加叢集到ASM執行個體。
重要建立ASM執行個體時,請確保在資源配置地區,启用数据面集群KubeAPI访问Istio资源已勾選(預設勾選),即已啟用資料面KubeAPI訪問Istio資源。
目標ACK或ACK Serverless叢集已開啟公網API Server,以便快速接入。
ASM執行個體和ACK或ACK Serverless叢集需處於同一VPC、同一地區並使用同一交換器。
已為叢集添加入口網關。本執行個體使用ASM入口網關作為叢集網關。具體操作,請參見建立入口網關。
說明1.21.6.84版本以上的ASM執行個體不再需要手動建立入口網關
ASM網關支援為Knative提供Knative Revisions流量分發,支援gRPC服務、逾時和重試、TLS認證和外部認證授權等功能。詳細資料,請參見ASM網關概述。
步驟一:安裝Knative
ASM執行個體版本為1.18.2.104以下
ASM執行個體版本為1.18.2.104~1.21.6.83
ASM執行個體版本為1.21.6.84及以上
1.21.6.84版本以上的ASM執行個體不再需要單獨在ASM控制台開啟Knative on ASM功能。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Knative頁面的組件管理頁簽下,單擊一鍵部署Knative,然後在服務網關處選擇ASM,然後單擊一鍵部署。
部署成功後,即可在Knative中使用服務網格ASM。
說明頁面提示部署完成後,請確認入口網關已經建立完成並正常運行後再進行Kantive服務的部署。
步驟二:部署Knative服務
Knative on ASM支援通過ACK控制台和YAML設定檔兩種方式部署Knative服務。您可以按需選擇。
方式一:通過ACK控制台部署
登入Container Service管理主控台,在左側導覽列單擊叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇
。在Knative頁面,單擊服務管理頁簽,在右上方單擊建立服務,配置相關資訊,然後單擊建立。
關於配置項的更多資訊,請參見快速部署Serverless應用。
配置項
說明
樣本值
命名空間
選擇該服務所屬的命名空間。
default
服務名稱
自訂該服務的名稱。
helloworld-go
鏡像名稱
單擊選擇鏡像,在彈出的對話方塊中選擇所需的鏡像並單擊確定。支援填寫私人Registry,填寫的格式為domainname/namespace/imagename:tag。
registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go
鏡像版本
單擊選擇鏡像版本,在彈出的對話方塊選擇目標版本,單擊確定。
73fbdd56
訪問協議
支援HTTP和gRPC兩種訪問協議。
HTTP
容器連接埠
設定暴露的容器訪問連接埠,連接埠號碼必須介於1~65535。
8080
環境變數
單擊進階設定,然後在環境變數右側單擊新增,通過索引值對的形式配置環境變數。
類型:自訂
變數名稱:TARGET
變數/變數引用:Knative
方式二:通過YAML設定檔部署
將以下內容儲存為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叢集,執行以下命令建立Knative Service,並等待Knative Service建立成功。
kubectl apply -f helloworld-go.yaml
執行以下命令,查看Knative服務列表。
kubectl get ksvc
預期輸出:
NAME URL LATESTCREATED LATESTREADY READY REASON helloworld-go http://helloworld-go.default.example.com helloworld-go-00001 helloworld-go-00001 True
方式三:使用模板建立
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Knative頁面的服務管理頁簽下,選擇命名空間為default,然後單擊使用模板建立,將以下YAML樣本粘貼至模板,最後單擊建立。建立一個名為helloworld-go的服務。
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"
步驟三:擷取訪問網關地址
方式一:通過ACK控制台擷取
登入Container Service管理主控台,在左側導覽列單擊叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇
。單擊服務管理頁簽,然後在服務列表中單擊目標服務名稱,進入Knative服務詳情頁面。在基本資料地區,查看並擷取訪問網關及預設網域名稱。
方式二:通過ASM控制台擷取
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇
。在入口網關頁面的服務地址地區,查看並擷取訪問網關地址。
步驟四:訪問服務
Knative服務建立完成後,通過綁定Host網域名稱與訪問網關,可以直接存取服務地址。
在服務管理頁面的訪問網關列,擷取helloworld-go服務的網關地址。
執行以下命令,訪問helloworld-go服務。
curl -H "host: helloworld-go.default.example.com" http://39.XX.XX.XX # 網關的IP和網域名稱請以您的實際資料為準。
預期輸出:
Hello Knative!
輸出結果表明服務訪問成功。
相關文檔
Knative預設服務網域名稱為example.com。Knative on ASM支援使用自訂網域名作為預設網域名稱。具體操作,請參見在Knative on ASM中使用自訂網域名。
ASM網關支援HTTPS協議和動態載入認證功能。在使用Knative on ASM時,您可以通過ASM網關來實現HTTPS訪問。具體操作,請參見使用ASM網關實現HTTPS訪問Knative服務。
Knative on ASM提供基於流量的灰階發布能力。建立Knative服務時,Knative會為服務自動建立第一個修訂版本Revision。後續每當Knative服務的配置發生變化時,Knative都會建立一個新修訂版本,通過修改流量發往不同修訂版本的分配比例來實現灰階發布功能。具體操作,請參見在Knative on ASM中基於流量灰階發布服務。
Knative Serving為每個Pod注入QUEUE代理容器(queue-proxy)。該容器負責向Autoscaler報告業務容器的並髮指標。接收到這些指標之後,Autoscaler會根據並發請求數及縮放演算法,調整Deployment的Pod數量,從而實現自動擴縮容。具體操作,請參見基於流量請求數實現服務自動擴縮容。