使用 OpenShift 無伺服器將應用程式部署至 Azure Red Hat OpenShift

在本文中,您將使用 OpenShift 無伺服器將應用程式部署至 Azure Red Hat OpenShift 叢集。 OpenShift 無伺服器可協助開發人員部署和執行應用程式,以依需求相應增加或調整為零。 這可消除資源未使用時的耗用量。

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

您可以使用內建的 OpenShift 介面功能來管理無伺服器容器部署的所有層面。 開發人員可以可視化方式識別哪些事件正在推動容器化應用程式的啟動。 也有多種方式可以修改事件參數。 OpenShift 無伺服器應用程式可以與其他 OpenShift 服務整合,例如 OpenShift 管線、服務網格和監視。 這提供完整的無伺服器應用程式開發和部署體驗。

在您開始使用 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 開啟殼層或選取連結:

Button to launch 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)

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

如果您在 Azure Cloud Shell 上執行命令,請下載適用於 Linux 的最新 Knative CLI。

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 認證登入。

A screenshot that shows the Azure Red Hat OpenShift log-in screen

安裝 OpenShift 無伺服器運算子

當您登入 OpenShift Web 控制台時,請確認您位於 管理員 istrator 檢視中。 開啟操作員中 ,然後選取 OpenShift 無 伺服器運算符。

A screenshot that shows the position of the OpenShift Serverless operator.

接下來,選取 [安裝],開啟操作員安裝頁面。

A screenshot that shows how to select Install to install the operator.

為您的 Azure Red Hat OpenShift 叢集版本選擇適當的 更新通道 ,並在命名空間中 openshift-serverless 安裝操作員。 向下捲動並選取 [ 安裝]。

A screenshot that shows the Operator installation page.

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

A screenshot that shows the status page with the operator installed and ready for use.

安裝 Knative 服務

您可以使用上游 Knative,在 OpenShift 無伺服器上以無伺服器方式執行容器的選項。 Knative 擴充 Kubernetes,以提供一元件,以透過無伺服器方法部署、執行及管理新式應用程式。

建立 Knative 服務實例

在視窗左上角的 [專案] 清單中,選取 knative-server。 然後在 [提供的 API] 窗格中,選取 [Knative 服務] 卡片內的 [建立實例]。

A screenshot that shows where to select to create a Knative Service instance.

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

A screenshot that shows the default values listed in the form.

當 [狀態] 數據行顯示 [就緒] 時,會安裝 OpenShift 無伺服器。 現在您已準備好建立 OpenShift 無伺服器專案。

A screenshot that shows that the Knative Serving is ready.

建立無伺服器專案

若要建立名為 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

讓我們從 管理員 istrator 檢視切換至開發人員檢視。 移至左側選單中的項目清單,然後選擇 demoserverless。 您現在位於 專案的 [拓撲 ] 頁面。

A screenshot that shows Azure Red Hat OpenShift project topology.

使用 Web 控制台進行部署

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

A screenshot that shows Azure Red Hat OpenShift project from within Git.

注意

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

捲動至 [資源],並確認已選取 Knative 服務作為要產生的資源類型。 這會建立 Knative 服務,這是一種部署類型,可讓 OpenShift 無伺服器在閑置時調整為零。

A screenshot that shows how to select the Knative Service.

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

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

等待建置完成。 這可能需要幾分鐘的時間。 建置完成時,服務左下角會出現綠色複選標記。

A screenshot that shows a checkmark that indicates that the build is complete.

查看您的應用程式規模

在 [拓撲] 檢視頂端的 [顯示選項 ] 列表中,選取 [Pod 計數]。 等候 Pod 計數縮減為零 Pod。 相應減少可能需要幾分鐘的時間。

A screenshot that shows the Pod count when it has scaled to zero.

在 [Knative 服務] 面板右上角,選取 [ 開啟 URL] 圖示。 應用程式會在新的瀏覽器索引標籤開啟。關閉索引標籤並返回拓撲檢視。 您可以在該處看到您的應用程式相應增加為一個 Pod,以配合您的要求。 幾分鐘后,您的應用程式會縮減為零 Pod。

A screenshot that shows the application scaled up to Pod.

強制新的修訂並設定流量分佈

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

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

A screenshot that shows the Pod ring.

切換至 YAML 索引標籤並向下捲動以編輯 的值 timeoutSeconds,以強制更新組態。 將值變更為 301。 選取 [儲存]。 在真實世界的案例中,也可以藉由更新容器映像標籤來觸發組態更新。

A screenshot that shows how to force a new revision by updating the configuration.

返回 拓撲 檢視,您會看到已部署新的修訂。 選取以徽章 (KSVC) 結尾的服務,然後選取 [ 設定流量分配 ] 按鈕。 您現在應該能夠在服務中的修訂之間分割流量。

A screenshot that shows how to set traffic distribution.

拓撲檢視現在會顯示流量在修訂之間分佈的方式。

A screenshot that shows how to review traffic distribution.

使用 Knative 命令列介面 (kn)

在先前的步驟中,您已使用 OpenShift Web 控制台來建立應用程式,並將其部署至 OpenShift 無伺服器。 由於 OpenShift 無伺服器正在下方執行 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

您會收到輸出,其中顯示每個標籤的網址及其流量分佈。

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% 的流量傳送至上一個標籤:

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 無伺服器運算子和 Knative 服務
  • 使用 Web 控制台部署無伺服器專案
  • 使用 Knative CLI 部署無伺服器專案 (kn)
  • 使用 Knative CLI 設定藍/綠部署和 Canary 部署 (kn)

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