使用 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 命令列用戶端)。
請遵循教學課程來安裝 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
認證登入。
安裝 OpenShift Serverless 運算子
當您登入 OpenShift Web 主控台時,請確認您位於 [系統管理員] 檢視中。 開啟 Operator Hub 並選取 [OpenShift Serverless] 運算子。
接下來,選取 [安裝],開啟運算子安裝頁面。
針對 Azure Red Hat OpenShift 的叢集版本選擇適當的 [更新通道],並在 openshift-serverless
命名空間中安裝運算子。 向下捲動,並選取 [安裝]。
在幾分鐘內,狀態頁面會隨即反映運算子已安裝且可供使用。 選取 [檢視運算子] 按鈕以繼續進行。
安裝 Knative Serving
使用上游 Knative,便可以無伺服器方法在 OpenShift Serverless 上執行容器。 Knative 會延伸 Kubernetes 以提供元件集合,用於透過無伺服器方法來部署、執行和管理新式應用程式。
建立 Knative Serving 的執行個體
在視窗左上角的 [專案] 清單中,選取 knative-server
。 接著在 [提供的 API] 窗格中,選取 [Knative Serving] 卡片內的 [建立執行個體]。
在 [建立 Knative Serving] 頁面上,保留所有預設值。 向下捲動,並選取 [建立] 按鈕。
當 [狀態] 資料行顯示 [就緒] 時,即會安裝 OpenShift Serverless。 您現在已準備好建立 OpenShift Serverless 專案。
建立無伺服器專案
若要建立名為 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
。 您現在位於專案的 [拓撲] 頁面。
使用 Web 主控台部署
在 [拓撲] 頁面上,選取 [從 Git]。 在 [從 Git 匯入] 頁面上,使用 https://github.com/sclorg/django-ex.git
作為 Git 存放庫 URL。 範例 Web 應用程式會以 Python 程式設計語言進行實作。
注意
OpenShift 會偵測到這是 Python 專案,並會選取適當的建立器映像。
捲動至 [資源] 並確認已選取 [Knative Service] 作為要產生的資源類型。 這將建立 Knative Service,這是一種部署類型,可在閒置時將 OpenShift Serverless 調整至零。
選取頁面底部的 [建立]。 這會建立資源來管理應用程式的組建和部署。 接著,系統會將您重新導向至專案的拓樸概觀。
拓樸概觀提供已部署應用程式的視覺化呈現。 您可以查看整體應用程式結構。
等待建置完成。 這可能需要幾分鐘的時間。 組建完成時,服務左下角會顯示綠色核取記號。
查看您的應用程式規模
在 [拓撲] 檢視上方的 [顯示選項] 清單中,選取 [Pod 計數]。 等待 Pod 計數縮小至 0 個 Pod。 縮小可能需要幾分鐘的時間。
在 [Knative Service] 服務面板的右上角,選取 [開啟 URL] 圖示。 應用程式會在新的瀏覽器分頁開啟。關閉索引標籤並返回 [拓撲] 檢視。 您可在此看到應用程式已擴大至一個 Pod 以符合您的要求。 幾分鐘後,應用程式會縮小回至零個 Pod。
強制執行新的修訂版和設定流量分佈
Knative 服務允許流量對應,這表示服務的修訂版可對應至已配置的流量部分。 每個服務組態更新時,隨即會建立新的修訂版。 依預設,服務路由接著會將所有流量指向最新的就緒修訂版。 您可定義取得流量部分的修訂版,藉以變更此行為。 流量對應也提供建立個別修訂版唯一 URL 的選項。
在建立的拓樸中,選取服務內顯示的修訂版以檢視其詳細資料。 Pod 通道下和詳細資料面板上方的徽章應為 (REV)
。 在側邊面板的 [資源] 索引標籤內,向下捲動並選取與服務相關聯的組態。
切換至 [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 (英文) 文件和建立和管理無伺服器應用程式 (英文) 文件。