共用方式為


使用 OpenShift Serverless 來將應用程式部署至 Azure Red Hat OpenShift

在本文中,您將使用 OpenShift Serverless 來將應用程式部署至 Azure Red Hat OpenShift 叢集。 OpenShift Serverless 可協助部署和協助應用程式,視需要擴大或調整至零。 如此可在資源未使用時消除其使用量。

應用程式程式碼可與適當的執行階段一同封裝在容器中。 當事件觸發應用程式容器時,無伺服器功能將啟動應用程式容器。 您可透過各種事件觸發應用程式:從您自己的應用程式、多個雲端服務提供者、軟體即服務 (SaaS) 系統和其他服務。

您可使用內建 OpenShift 介面功能來管理無伺服器容器部署的所有層面。 開發人員可以視覺化方式識別事件驅動容器化應用程式的啟動。 也有多種方式可修改事件參數。 OpenShift Serverless 可與其他 OpenShift 服務整合,例如 OpenShift Pipelines、Service Mesh 和 Monitoring。 這會提供完整無伺服器應用程式部署和部署體驗。

在您開始使用 Intune 之前

建立叢集

請遵循教學課程來建立 Azure Red Hat OpenShift 叢集。 如果您選擇在本機安裝和使用命令列介面 (CLI),本教學課程會要求您使用 Azure CLI 版本 2.6.0 或更新版本。 執行 az --version 來尋找您目前的版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI

連線至叢集

若要管理 Azure Red Hat OpenShift 叢集,您必須使用 oc (OpenShift 命令列用戶端)。

注意

建議您在 Azure Cloud Shell安裝 OpenShift 命令列,並使用該命令列進行本文中的所有命令列作業。 自 shell.azure.com 開啟殼層或選取連結:

啟動 Azure Cloud Shell 的按鈕

請遵循教學課程來安裝 CLI,擷取叢集認證,並使用 Web 主控台和 OpenShift CLI 來連線至叢集

登入之後,您應會看到訊息,說明您正在使用 default 專案。

Login successful.

You have access to 61 projects, the list has been suppressed. You can list all projects with 'oc projects'

Using project "default".

安裝 Knative 命令列介面 (kn)

https://github.com/knative/client/releases/ 下載適用於您電腦的最新版本命令列介面 (CLI)

若您在 Azure Cloud Shell 上執行命令,請下載最新的 Knative CLI (Linux 版)。

cd ~
wget https://github.com/knative/client/releases/download/v0.22.0/kn-linux-amd64

mkdir knative
chmod +x kn-linux-amd64
mv kn-linux-amd64 knative/kn
echo 'export PATH=$PATH:~/knative' >> ~/.bashrc && source ~/.bashrc

開啟 OpenShift Web 主控台

執行下列指令碼,藉以尋找叢集 Web 主控台 URL:

 az aro show \
    --name <cluster name> \
    --resource-group <resource group> \
    --query "consoleProfile.url" -o tsv

您應得取類似以下的 URL。

https://console-openshift-console.apps.wzy5hg7x.eastus.aroapp.io/

開啟網頁瀏覽器並開啟主控台 URL。 使用 kubeadmin 認證登入。

螢幕擷取畫面,顯示 Azure Red Hat OpenShift 登入畫面

安裝 OpenShift Serverless 運算子

當您登入 OpenShift Web 主控台時,請確認您位於 [系統管理員] 檢視中。 開啟 Operator Hub 並選取 [OpenShift Serverless] 運算子。

螢幕擷取畫面,顯示 OpenShift Serverless 運算子的位置。

接下來,選取 [安裝],開啟運算子安裝頁面。

螢幕擷取畫面,顯示如何選取安裝以安裝運算子。

針對 Azure Red Hat OpenShift 的叢集版本選擇適當的 [更新通道],並在 openshift-serverless 命名空間中安裝運算子。 向下捲動,並選取 [安裝]

螢幕擷取畫面,顯示運算子安裝頁面。

在幾分鐘內,狀態頁面會隨即反映運算子已安裝且可供使用。 選取 [檢視運算子] 按鈕以繼續進行。

螢幕擷取畫面,顯示狀態頁面,其中運算子已安裝且可供使用。

安裝 Knative Serving

使用上游 Knative,便可以無伺服器方法在 OpenShift Serverless 上執行容器。 Knative 會延伸 Kubernetes 以提供元件集合,用於透過無伺服器方法來部署、執行和管理新式應用程式。

建立 Knative Serving 的執行個體

在視窗左上角的 [專案] 清單中,選取 knative-server。 接著在 [提供的 API] 窗格中,選取 [Knative Serving] 卡片內的 [建立執行個體]

螢幕擷取畫面,顯示選取建立 Knative Service 執行個體的位置。

在 [建立 Knative Serving] 頁面上,保留所有預設值。 向下捲動,並選取 [建立] 按鈕。

螢幕擷取畫面,顯示表單中列出的預設值。

當 [狀態] 資料行顯示 [就緒] 時,即會安裝 OpenShift Serverless。 您現在已準備好建立 OpenShift Serverless 專案。

螢幕擷取畫面,顯示 Knative Serving 已就緒。

建立無伺服器專案

若要建立名為 demoserverless 的新專案,請執行下列命令:

oc new-project demoserverless

輸出應如下所示:

Now using project "demoserverless" on server "https://api.wzy5hg7x.eastus.aroapp.io:6443".

You can add applications to this project with the 'new-app' command. For example, build a new example application in Python with the following:

    oc new-app django-psql-example

Or use kubectl to deploy a simple Kubernetes application:

    kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node

讓我們從 [系統管理員] 檢視切換至 [開發人員] 檢視。 移至左側功能表中的專案清單,並選取 demoserverless。 您現在位於專案的 [拓撲] 頁面。

螢幕擷取畫面,顯示 Azure Red Hat OpenShift 專案拓撲。

使用 Web 主控台部署

在 [拓撲] 頁面上,選取 [從 Git]。 在 [從 Git 匯入] 頁面上,使用 https://github.com/sclorg/django-ex.git 作為 Git 存放庫 URL。 範例 Web 應用程式會以 Python 程式設計語言進行實作。

螢幕擷取畫面,顯示 Git 內的 Azure Red Hat OpenShift 專案。

注意

OpenShift 會偵測到這是 Python 專案,並會選取適當的建立器映像。

捲動至 [資源] 並確認已選取 [Knative Service] 作為要產生的資源類型。 這將建立 Knative Service,這是一種部署類型,可在閒置時將 OpenShift Serverless 調整至零。

螢幕擷取畫面,顯示如何選取 Knative Service。

選取頁面底部的 [建立]。 這會建立資源來管理應用程式的組建和部署。 接著,系統會將您重新導向至專案的拓樸概觀。

拓樸概觀提供已部署應用程式的視覺化呈現。 您可以查看整體應用程式結構。

等待建置完成。 這可能需要幾分鐘的時間。 組建完成時,服務左下角會顯示綠色核取記號。

螢幕擷取畫面,顯示表示組建完成的核取記號。

查看您的應用程式規模

在 [拓撲] 檢視上方的 [顯示選項] 清單中,選取 [Pod 計數]。 等待 Pod 計數縮小至 0 個 Pod。 縮小可能需要幾分鐘的時間。

螢幕擷取畫面,顯示 Pod 計數已調整至零。

在 [Knative Service] 服務面板的右上角,選取 [開啟 URL] 圖示。 應用程式會在新的瀏覽器分頁開啟。關閉索引標籤並返回 [拓撲] 檢視。 您可在此看到應用程式已擴大至一個 Pod 以符合您的要求。 幾分鐘後,應用程式會縮小回至零個 Pod。

螢幕擷取畫面,顯示應用程式擴大至 Pod。

強制執行新的修訂版和設定流量分佈

Knative 服務允許流量對應,這表示服務的修訂版可對應至已配置的流量部分。 每個服務組態更新時,隨即會建立新的修訂版。 依預設,服務路由接著會將所有流量指向最新的就緒修訂版。 您可定義取得流量部分的修訂版,藉以變更此行為。 流量對應也提供建立個別修訂版唯一 URL 的選項。

在建立的拓樸中,選取服務內顯示的修訂版以檢視其詳細資料。 Pod 通道下和詳細資料面板上方的徽章應為 (REV)。 在側邊面板的 [資源] 索引標籤內,向下捲動並選取與服務相關聯的組態。

螢幕擷取畫面,顯示 Pod 通道。

切換至 [YAML] 索引標籤並向下捲動以編輯 timeoutSeconds 的值,藉以強制執行組態更新。 將值變更為 301。 選取 [儲存]。 在實際案例中,也可透過更新容器映像標籤,進行組態更新。

螢幕擷取畫面,顯示如何透過更新組態來強制執行新的修訂版。

返回 [拓樸] 檢視,您將看到已部署的新修訂版。 選取結尾為徽章 (KSVC) 的服務,並選取 [設定流量分佈] 按鈕。 您現在應可在服務的修訂版之間分割流量。

螢幕擷取畫面,顯示如何設定流量分佈。

[拓樸] 檢視現在會向您顯示流量在修訂版之間的分佈方式。

螢幕擷取畫面,顯示如何檢閱流量分佈。

使用 Knative 命令列介面 (kn)

在先前的步驟中,您已使用 OpenShift Web 主控台來建立應用程式並將其部署至 OpenShift Serverless。 由於 OpenShift Serverless 會在下方執行 Knative,因此您也可使用 Knative 命令列介面 (kn) 來建立 Knative 服務。

注意

若您尚未安裝 kn CLI,請確保遵循本文先決條件一節中的步驟。 請也確認您已使用 OpenShift 命令列介面 oc 來登入。

我們將使用已在 quay.io/rhdevelopers/knative-tutorial-greeter 建置的內容映像。

部署服務

若要部署服務,請執行下列命令:

kn service create greeter \
--image quay.io/rhdevelopers/knative-tutorial-greeter:quarkus \
--namespace demoserverless \
--revision-name greeter-v1

您會看到類似以下的輸出。

Creating service 'greeter' in namespace 'demoserverless':

  0.044s The Route is still working to reflect the latest desired specification.
  0.083s ...
  0.114s Configuration "greeter" is waiting for a Revision to become ready.
 10.420s ...
 10.489s Ingress has not yet been reconciled.
 10.582s Waiting for load balancer to be ready
 10.763s Ready to serve.

Service 'greeter' created to latest revision 'greeter-v1' is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

您可執行下列命令來擷取專案中的路由清單:

kn route list

您將取回命名空間中的路由清單。 在網頁瀏覽器中開啟 URL 以檢視部署的服務。

NAME      URL                                                            READY
greeter   http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io   True

部署服務的新版本

執行下列命令,並傳遞 :latest 映像標籤和環境變數 MESSAGE_PREFIX,藉以部署應用程式的新版本:

kn service update greeter \
 --image quay.io/rhdevelopers/knative-tutorial-greeter:latest \
 --namespace demoserverless \
 --env MESSAGE_PREFIX=GreeterV2 \
 --revision-name greeter-v2

您將取回已部署新修訂版 greeter-v2 的確認。

Updating Service 'greeter' in namespace 'demoserverless':

  5.029s Traffic is not yet migrated to the latest revision.
  5.086s Ingress has not yet been reconciled.
  5.190s Waiting for load balancer to be ready
  5.332s Ready to serve.

Service 'greeter' updated to latest revision 'greeter-v2' is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

若要檢視所有修訂版和其流量分佈的清單,請執行下列命令:

kn revision list

您將取得與下列輸出相似的清單。 請注意,在此執行個體中,新的修訂版會接收 100% 的流量。

NAME            SERVICE   TRAFFIC   TAGS   GENERATION   AGE     CONDITIONS   READY   REASON
greeter-v2      greeter   100%             2            90s     3 OK / 4     True
greeter-v1      greeter                    1            5m32s   3 OK / 4     True

藍/綠和 Canary 部署

部署新修訂版時,預設會指派 100% 的流量。 假設您想要實作藍/綠部署策略,可讓您快速復原至應用程式的舊版本。 Knative 可讓您輕鬆進行。

您可更新服務以建立三個流量標籤,同時將 100% 的服務指派給服務。

  • current:指向目前部署的版本
  • prev:指向先前版本
  • latest:一律指向最新版本
kn service update greeter \
   --tag greeter-v2=current \
   --tag greeter-v1=prev \
   --tag @latest=latest

您將取到類似以下的確認。

Updating Service 'greeter' in namespace 'demoserverless':

  0.037s Ingress has not yet been reconciled.
  0.121s Waiting for load balancer to be ready
  0.287s Ready to serve.

Service 'greeter' with latest revision 'greeter-v2' (unchanged) is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

使用下列命令來列出路由:

kn route describe greeter

您將收到輸出,顯示每個標籤的 URL 和其流量分佈。

Name:       greeter
Namespace:  demoserverless
Age:        10m
URL:        http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Service:    greeter

Traffic Targets:
  100%  @latest (greeter-v2) #latest
        URL:  http://latest-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
    0%  greeter-v1 #prev
        URL:  http://prev-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
    0%  greeter-v2 #current
        URL:  http://current-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

[..]

假設您想要快速復原至先前版本,您可更新流量分佈以將 100% 的流量傳送至先前 (prev) 標籤:

kn service update greeter --traffic current=0 --traffic prev=100

使用下列命令,列出路由並再次檢查:

kn route describe greeter

您將看到輸出,顯示 100% 的流量分佈皆會傳輸至先前版本。

Name:       greeter
Namespace:  demoserverless
Age:        19m
URL:        http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Service:    greeter

Traffic Targets:
    0%  @latest (greeter-v2) #latest
        URL:  http://latest-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
  100%  greeter-v1 #prev
        URL:  http://prev-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
    0%  greeter-v2 #current
        URL:  http://current-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

[..]

在瀏覽器中重新整理主要路由時,嘗試進行流量分佈 (在此案例中為 http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io)。

清除資源

當完成使用應用程式時,您可執行下列命令來刪除專案:

oc delete project demoserverless

您也可採用教學課程:刪除 Azure Red Hat OpenShift 4 叢集中的指示來刪除叢集。

下一步

在本指南中,您將了解如何:

  • 安裝 OpenShift Serverless 運算子和 Knative Serving
  • 使用 Web 主控台來部署無伺服器專案
  • 使用 Knative CLI (kn) 來部署無伺服器專案
  • 使用 Knative CLI (kn) 來設定藍/綠部署和 Canary 部署

深入了解如何使用 OpenShift Serverless 在 Azure Red Hat OpenShift 上建置和部署無伺服器、事件驅動的應用程式,請遵循開始使用 OpenShift Serverless (英文) 文件和建立和管理無伺服器應用程式 (英文) 文件。