您僅需將代碼或鏡像上傳到SAE,即可部署應用服務。SAE會代您管理底層的計算資源,通過簡單配置即可實現根據訪問量自動擴縮容、跨可用性區域部署。
方案概覽
您將部署一組微服務應用,實現服務的註冊與發現、服務之間的方法調用,並且通過公網來訪問應用。樣本應用的架構如下:
儘管本文以Java微服務應用為例,但SAE對應用的技術棧語言和架構沒有限制,能夠適配多種業務情境,例如靜態網站、前後端分離的網站、單體應用、微服務應用。
為實現本方案,您將:
部署應用:使用樣本鏡像部署provider應用與consumer應用。通過SAE內建的Nacos實現服務註冊與發現,使得consumer應用可以調用provider應用提供的服務。
通過公網訪問應用: 為consumer應用配置公網訪問地址並訪問應用。
準備工作
操作指引
SAE支援控制台、saectl工具(相容kubectl)等多種操作方式,從中選擇您熟悉的方式來完成本教程。
控制台
1. 部署應用
部署provider應用:登入SAE控制台,在左側選擇,在頂部選擇應用部署的地區(本文以杭州為例),點擊建立應用。配置以下參數,其餘保持預設。點擊一鍵建立應用(跳過進階設定)。
如果導覽列中沒有,請選擇。
如果提示選擇應用版本,請選擇標準版。輕量版和專業版目前處於邀約測試階段。完成本教程無需考慮應用版本間的差異。
自訂應用程式名稱,例如
provider。設定命名空間類型為
系統建立,表示應用將會建立於當前地區的預設命名空間,且自動建立並關聯VPC、交換器、安全性群組等網路資源,無需使用者關注。設定應用部署方式為
選擇鏡像部署。點擊設定鏡像,在Demo鏡像標籤頁,找到微服務應用-提供者,選擇鏡像版本為microservice-java-provider-v1.0,點擊確定。在容量設定地區,自訂單一實例規格和執行個體數,這決定了應用初始啟動並執行執行個體數量、系統為每個執行個體分配多少計算資源。
部署consumer應用:重複上述步驟並調整以下參數來部署Consumer應用。
自訂應用程式名稱,例如
consumer。設定鏡像時,找到微服務應用-消費者,選擇鏡像版本為
microservice-java-consumer-v1.0。
查看應用部署結果:請耐心等待應用建立完成,大約需要1分鐘。
您可以在應用列表中查看已建立的應用,點擊其中某個應用可以進入其詳情頁面。
在左側導覽列選擇基礎資訊,在執行個體列表頁簽中,可以查看已建立的應用執行個體。
2. 通過公網訪問應用
為了實現從公網訪問consumer應用,一種簡便的方式是為該應用綁定公網CLB執行個體。
為consumer應用綁定公網CLB執行個體:進入consumer應用的詳情頁面。在應用資訊頁簽中,在應用訪問設定地區選取項目基於CLB訪問。點擊添加公網CLB訪問,配置如下參數,然後點擊確定。
在CLB執行個體中,選擇建立CLB執行個體。
在HTTP協議頁簽中,設定HTTP連接埠為
80,容器連接埠為18082。
驗證結果:SAE將為您代購一個CLB執行個體並綁定到當前應用。等待建立完成,控制台將顯示應用的公網訪問地址。
通過瀏覽器訪問
http://<公網訪問地址>/consumer-echo/hello(其中<公網訪問地址>需要替換為實際值),驗證能夠通過公網來訪問應用。在中,您可以查看consumer應用調用provider應用的拓撲視圖。
3. 清理資源
在完成本教程後,建議清理相關資源,避免持續產生費用。
刪除應用:進入provider應用和consumer應用的詳情頁面,點擊,並按照指引操作來刪除上述應用。
SAE代購的CLB執行個體將隨應用刪除而自動釋放。
(可選)刪除網路資源:在部署應用的過程中,系統自動建立了VPC、交換器、安全性群組。
查看VPC:在左側導覽列選擇,點擊預設,在基礎資訊頁面查看VPC,點選連結跳轉到VPC詳情頁。
查看交換器、安全性群組:在VPC的資源管理標籤頁點選連結跳轉到相應資源的詳情頁。
在各資源的詳情頁執行刪除操作。
saectl工具
1. 安裝與配置saectl工具
2. 部署應用
建立資源設定檔:在同一路徑中建立以下檔案。注意:將設定檔中的
image: ...cn-hangzhou...替換為您的應用部署地區。deployment-provider.yaml用於配置provider應用:apiVersion: apps/v1 kind: Deployment metadata: annotations: sae.aliyun.com/new-sae-version: std # 選擇應用版本,std表示標準版。輕量版和專業版目前處於邀約測試階段。完成本教程無需考慮應用版本間的差異。 name: provider # 應用程式名稱可自訂 namespace: default # 選擇系統建立的預設命名空間,自動建立並關聯VPC、交換器、安全性群組等網路資源,無需使用者關注。 spec: replicas: 2 # 應用執行個體的數量 selector: matchLabels: sae.aliyun.com/app-name: provider # 必須與metadata中定義的應用程式名稱保持一致 template: metadata: labels: sae.aliyun.com/app-name: provider # 必須與metadata中定義的應用程式名稱保持一致 spec: containers: - name: main # 建議將containers的名稱固定設定為main,避免衝突。 image: registry.cn-hangzhou.aliyuncs.com/sae-serverless-demo/sae-demo:microservice-java-provider-v1.0 # 使用provider應用的樣本鏡像,其中,cn-hangzhou需要替換為您部署應用的地區。 resources: # 單個應用執行個體的規格。limits和requests需要保持相同的配置。 limits: cpu: "2" memory: 4Gi requests: cpu: "2" memory: 4Gideployment-consumer.yaml用於配置consumer應用:apiVersion: apps/v1 kind: Deployment metadata: annotations: sae.aliyun.com/new-sae-version: std # 選擇應用版本,std表示標準版。輕量版和專業版目前處於邀約測試階段。完成本教程無需考慮應用版本間的差異。 name: consumer # 應用程式名稱可自訂 namespace: default # 選擇系統建立的預設命名空間,自動建立並關聯VPC、交換器、安全性群組等網路資源,無需使用者關注。 spec: replicas: 2 # 應用執行個體的數量 selector: matchLabels: sae.aliyun.com/app-name: consumer # 必須與metadata中定義的應用程式名稱保持一致 template: metadata: labels: sae.aliyun.com/app-name: consumer # 必須與metadata中定義的應用程式名稱保持一致 spec: containers: - name: main # 建議將containers的名稱固定設定為main,避免衝突。 image: registry.cn-hangzhou.aliyuncs.com/sae-serverless-demo/sae-demo:microservice-java-consumer-v1.0 # 使用consumer應用的樣本鏡像,其中,cn-hangzhou需要替換為您部署應用的地區。 resources: # 單個應用執行個體的規格。limits和requests需要保持相同的配置。 limits: cpu: "2" memory: 4Gi requests: cpu: "2" memory: 4Gi
執行部署:在上述設定檔所在路徑執行
saectl apply -f deployment-provider.yaml -f deployment-consumer.yaml。驗證結果:
查看應用:執行
saectl get deployments -n default。其中,-n default表示查詢預設命名空間。返回結果中:STATE欄位顯示RUNNING表示應用正常運行;如果顯示PUBLISHING表示應用正在部署,請等待部署完成後再查看。READY欄位顯示n/m代表已就緒的執行個體數/期望部署的執行個體數。
查看應用執行個體:執行
saectl get pods -n default。返回結果中:STATUS欄位顯示RUNNING表示執行個體中的容器正常運行;如果顯示ContainerCreating表示容器正在建立,請等待建立完成後再查看。READY欄位顯示n/m代表已就緒的容器數/總容器數。
3. 通過公網訪問應用
為了實現從公網訪問consumer應用,一種簡便的方式是為該應用綁定公網CLB執行個體。
建立資源設定檔:建立
svc.yaml用於配置Service,即通過為consumer應用綁定公網CLB對外提供服務:apiVersion: v1 kind: Service metadata: annotations: sae.aliyun.com/loadbalancer-address-type: internet # 公網或私網類型, internet表示公網類型,intranet表示私網類型。 name: internet-consumer # 固定格式 ${公網或私網類型}-${應用程式名稱} spec: ports: - name: port-80 # 固定格式 port-${對外連接埠} port: 80 protocol: HTTP targetPort: 18082 # consumer應用的容器連接埠 selector: sae.aliyun.com/app-name: consumer # 應用程式名稱 type: LoadBalancer執行部署:在上述設定檔所在路徑執行
saectl apply -f svc.yaml。驗證結果:
查看服務:執行
saectl get services -n default。返回結果中:EXTERNAL-IP欄位顯示訪問應用的公網IP;如果顯示<pending>表示服務正在建立,請等待建立完成後再查看。PORT(S)欄位顯示您配置的應用訪問連接埠。
從公網訪問應用:執行
curl http://<公網訪問地址>:<訪問連接埠>/consumer-echo/hello(其中<公網訪問地址>、<訪問連接埠>需要替換為實際值)。從返回結果中,能夠看到consumer應用通過調用provider應用來處理請求的過程。
4. 清理資源
在完成本教程後,建議清理相關資源,避免持續產生費用。
刪除應用:執行saectl delete -f deployment-provider.yaml -f deployment-consumer.yaml。
SAE代購的CLB執行個體將隨應用刪除而自動釋放。
後續步驟
您已通過Demo鏡像體驗了部署應用的流程。SAE為您提供以下方式來部署實際的應用:
使用鏡像部署應用(推薦):您可以將任何應用製作成鏡像,然後將其推送到鏡像倉庫,最後將其部署到SAE。
使用程式碼封裝部署應用:SAE提供Java、PHP、Python、.NET Core特定版本的運行環境,如果與您的代碼相容,則可以使用程式碼封裝部署應用。您需要先製作符合SAE要求的程式碼封裝,然後將其部署到SAE。
本樣本通過SAE內建Nacos實現了服務註冊與發現,使得consumer應用能夠訪問provider應用並調用其方法。SAE還提供以下方式來實現應用間的互訪,您可以根據實際情況靈活選取:
使用MSE的Nacos註冊中心(推薦):如果您不希望自建服務註冊中心,且追求註冊中心的效能、擴充性、高可用性等方面,建議使用MSE的Nacos註冊中心。
使用自建服務註冊中心:如果您當前已部署了自建的服務註冊中心(例如Nacos、Zookeeper等),且已能夠滿足使用需求,在您部署應用到SAE後,可以繼續使用自建的服務註冊中心。前提是確保應用和註冊中心之間的網路聯通性,並且需要手動在程式中配置註冊中心的地址。
基於K8s Service配置應用服務訪問:在SAE叢集內,為應用配置一個可以供其他應用訪問的固定網域名稱。
本樣本通過為應用綁定CLB執行個體實現了從外部存取應用。您也可以通過為應用綁定NLB執行個體或配置網關路由來實現從外部存取應用。如果需要應用主動訪問外部的資源和服務,則需要配置NAT Gateway或者為應用執行個體綁定EIP。
本樣本使用系統建立的預設命名空間來部署應用。您也可以通過自訂命名空間來實現不同應用之間、開發/測試/生產環境之間的隔離。每個命名空間需要綁定一個VPC。部署應用時,需要為應用執行個體綁定該VPC中的交換器,選擇不同可用性區域的交換器即可實現應用的跨可用性區域部署。
建立應用後,可以手動調整執行個體數量與執行個體規格,或通過配置Auto Scaling策略實現根據訪問量、資源使用方式自動調整執行個體數量。還可以通過開啟閑置模式來降低成本。