全部產品
Search
文件中心

Alibaba Cloud Service Mesh:使用Knative on ASM部署Serverless應用

更新時間:Dec 27, 2024

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以下

  1. 在ACK或ACK Serverless叢集中部署Knative Serving組件,服務網關選擇Kourier

    • 關於如何在ACK上安裝Knative,請參見部署Knative

    • 關於如何在ACK Serverless上安裝Knative,請參見開啟Knative

      重要

      在組件成功安裝後,請單擊組件管理頁簽,在add-on 組件地區的列表卸載Kourier組件。

  2. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  3. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇生態整合中心 > Knative on ASM

  4. Knative on ASM頁面,單擊啟用Knative on ASM

ASM執行個體版本為1.18.2.104~1.21.6.83

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇生態整合中心 > Knative on ASM

  3. Knative on ASM頁面,按需選擇Knative版本,單擊啟用Knative on ASM

  4. 在ACK或ACK Serverless叢集中部署Knative,服務網關選擇ASM

    • 關於如何在ACK上安裝Knative,請參見部署Knative

    • 關於如何在ACK Serverless上安裝Knative,請參見開啟Knative

ASM執行個體版本為1.21.6.84及以上

重要

1.21.6.84版本以上的ASM執行個體不再需要單獨在ASM控制台開啟Knative on ASM功能。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Knative

  3. Knative頁面的組件管理頁簽下,單擊一鍵部署Knative,然後在服務網關處選擇ASM,然後單擊一鍵部署

    部署成功後,即可在Knative中使用服務網格ASM。

    說明

    頁面提示部署完成後,請確認入口網關已經建立完成並正常運行後再進行Kantive服務的部署。

步驟二:部署Knative服務

Knative on ASM支援通過ACK控制台和YAML設定檔兩種方式部署Knative服務。您可以按需選擇。

方式一:通過ACK控制台部署

  1. 登入Container Service管理主控台,在左側導覽列單擊叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Knative

  3. Knative頁面,單擊服務管理頁簽,在右上方單擊建立服務,配置相關資訊,然後單擊建立

    關於配置項的更多資訊,請參見快速部署Serverless應用

    配置項

    說明

    樣本值

    命名空間

    選擇該服務所屬的命名空間。

    default

    服務名稱

    自訂該服務的名稱。

    helloworld-go

    鏡像名稱

    單擊選擇鏡像,在彈出的對話方塊中選擇所需的鏡像並單擊確定。支援填寫私人Registry,填寫的格式為domainname/namespace/imagename:tag。

    registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go

    鏡像版本

    單擊選擇鏡像版本,在彈出的對話方塊選擇目標版本,單擊確定

    73fbdd56

    訪問協議

    支援HTTPgRPC兩種訪問協議。

    HTTP

    容器連接埠

    設定暴露的容器訪問連接埠,連接埠號碼必須介於1~65535。

    8080

    環境變數

    單擊進階設定,然後在環境變數右側單擊新增,通過索引值對的形式配置環境變數。

    類型:自訂

    變數名稱:TARGET

    變數/變數引用:Knative

方式二:通過YAML設定檔部署

  1. 將以下內容儲存為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"
  2. 使用kubectl串連到ACK叢集,執行以下命令建立Knative Service,並等待Knative Service建立成功。

    kubectl apply -f helloworld-go.yaml
  3. 執行以下命令,查看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

方式三:使用模板建立

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Knative

  3. 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控制台擷取

  1. 登入Container Service管理主控台,在左側導覽列單擊叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Knative

  3. 單擊服務管理頁簽,然後在服務列表中單擊目標服務名稱,進入Knative服務詳情頁面。在基本資料地區,查看並擷取訪問網關預設網域名稱

方式二:通過ASM控制台擷取

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 入口網關

  3. 入口網關頁面的服務地址地區,查看並擷取訪問網關地址。

步驟四:訪問服務

Knative服務建立完成後,通過綁定Host網域名稱與訪問網關,可以直接存取服務地址。

  1. 服務管理頁面的訪問網關列,擷取helloworld-go服務的網關地址。

  2. 執行以下命令,訪問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數量,從而實現自動擴縮容。具體操作,請參見基於流量請求數實現服務自動擴縮容