在 Kubernetes 上部署應用程式
在本指導教學中,您將學習如何使用不同的部署策略來建立開放式工具鏈。 您還將學習如何在 IBM Cloud® Continuous Delivery 服務中實作工具鏈,以及如何使用工具鏈開發並部署簡單的 Web 應用程式 (app)。
本指導教學以瀏覽器為基礎。 您也可以在 Terraform 中建立類似的開放式工具鏈,如 IBM Cloud Terraform 提供者範例 ibm-cd-toolchain-simple-helm中所示。
本指導教學使用以 Kubernetes 作為部署目標的部署策略。 本指導教學中使用的工具鏈實作標準 DevOps 作法,例如程式碼掃描、驗收測試、Git 儲存庫,以及持續整合和持續交付功能。 建立 Kubernetes 叢集及工具鏈之後,您可以變更應用程式的程式碼,並將變更推送至 Git Repos and Issue Tracking 儲存庫。 當您將變更推送至儲存庫時,Tekton 型 Delivery Pipeline 會自動建置並部署程式碼。
Tekton 是一個開放程式碼、供應商中立的 Kubernetes原生架構,可用來建置、測試及部署應用程式。 Tekton 提供一組共用元件,用於建置持續整合和持續交付系統。 作為開放程式碼專案,Tekton 由 Continuous Delivery Foundation管理。 目標是透過提供管線、工作流程及其他建置區塊的產業規格,將持續交付現代化。 使用 Tekton,您可以透過摘錄基礎實作詳細資料,在雲端提供者或內部部署系統之間建置、測試及部署。 Tekton 管線內建在 Continuous Delivery中。
本指導教學中使用的範本與 Kubernetes的「標準」或「精簡」方案搭配使用。 使用標準方案,您可以透過 DNS 名稱來存取應用程式。 在 Lite 方案中,您可以使用 nodeport 來存取應用程式。
您可以使用部署策略,以受控制的方式在正式作業環境中更新應用程式。 使用部署策略可以提供下列好處:
- 避免應用程式關閉。
- 啟用新功能的正式作業測試,而不影響客戶。
- 將正式作業問題的影響限制為使用者子集。
- 如果發現問題,則啟用快速回復至舊版。
有許多可能的部署策略可用。 一般而言,它們取決於執行多個應用程式實例,以及管理如何更新各種實例。 您可以在 Continuous Delivery中預先配置下列一般部署策略:
- 基本
- 透過同步停止並更新所有執行中實例來部署新版次,導致關閉時間。 若要回復,您必須重新部署舊版,這會導致額外的關閉時間。 雖然此策略簡單、快速且執行時期資源需求較低,但它是風險最高且導致關閉時間。 對於必須高可用性的重要應用程式,不建議使用「基本」部署策略。
- 漸進式更新
- 與「基本」策略類似,此部署策略簡單、快速且執行時期資源需求較低。 不過,因為每一個執行中的實例都會個別關閉並更新,避免關閉時間,所以回復需要您重新部署舊版。 如果正式作業中應用程式的現行版本已中斷,則這種耗時的方法可能會導致問題。
- 藍綠部署 (blue-green deployment)
- 建立兩個個別的永久正式作業環境 (藍色和綠色),其中只有一個環境一次會接收資料流量。 現行發行一律會部署至閒置環境,並在部署完成之後將資料流量切換至該環境,而沒有關閉時間。 因為您只需要將資料流量切換至未變更的環境,所以回復不會導致關閉時間。 因為此策略需要兩個完整正式作業環境,所以資源需求較高。 不過,此策略會啟用強大的「開發人員」流程,例如在正式作業環境中測試新應用程式版本的能力,然後才容許客戶資料流量。 Blue-Green 部署也支援快速回復。
- 金絲雀版本發佈
- 與原始正式作業環境 (類似 Blue-Green) 平行部署新版本,無需關閉時間。 系統會管理傳送至已更新及原始實例的資料流量,以便在部署繼續進行時,新版本可供受控制的使用者子集使用。 在一段時間之後,傳送至新版本的資料流量會增加,直到所有資料流量都傳送到該處為止,此時您可以停止舊的正式作業環境。 若要在部署進行時快速回復,您可以將所有資料流量遞送至原始正式作業環境。 由於此策略僅在部署期間需要兩個完整正式作業環境,因此整體資源用量低於 Blue-Green 部署。 Canary 版本部署策略是從所部署軟體的舊版移至現行版本的最慢版本。 Canary 部署可讓組織在正式作業中並列測試兩個不同的軟體版本。
開始之前
開始本指導教學之前,請確定您已備妥下列資源:
-
IBM Cloud 帳戶。 根據您的 IBM Cloud 帳戶類型,某些資源的存取可能會受到限制。 視您的帳戶方案限制而定,部分部署策略所需的某些功能可能無法使用。 如需 IBM Cloud 帳戶的相關資訊,請參閱 設定 IBM Cloud 帳戶 及 升級帳戶。
-
Kubernetes 叢集 及 API 金鑰。 您可以使用使用者介面或 CLI 來建立這些資源。 群集可能需要一些時間來佈建。 在建立叢集時,它會進行「部署中」、「擱置中」及「備妥」階段。 如需 Kubernetes 叢集的相關資訊,請參閱 Kubernetes 叢集。 雖然您可以針對「精簡」方案使用「漸進式」及「藍綠色」部署,但必須針對「標準」方案建立 Kubernetes 叢集。
-
Continuous Delivery 服務的實例。
-
選用。 儲存在密鑰管理儲存庫中並從單一位置集中管理的密鑰。 如需從各種密鑰管理及資料保護供應項目中進行選擇的相關資訊,請參閱 管理 IBM Cloud 密鑰。 如果您還沒有您選擇的密鑰管理儲存庫提供者實例,請建立一個實例。
-
選用。 使用儲存器登錄指令行建立的名稱空間。 若要建立名稱空間,請從指令行鍵入下列指令:
ibmcloud cr namespace-add <my namespace>
或者,您可以在 Container Registry 頁面上建立名稱空間。 有關在此位置建立命名空間的更多信息,請參閱 IBM Cloud Container Registry 服務。
建立工具鏈
在此步驟中,您建立 開發 Kubernetes 應用程式 工具鏈。 在工具鏈設定期間,會使用 IBM Cloud API 金鑰及 Kubernetes 叢集名稱來配置目標 Kubernetes 叢集。 您可以稍後透過更新 Delivery Pipeline 配置來變更這些設定。 任何合併至目標 Git 儲存庫分支的程式碼都會自動建置、驗證及部署至 Kubernetes 叢集。
若要建立 開發 Kubernetes 應用程式 工具鏈,請按一下
或者,從IBM Cloud控制台,點擊選單圖示>平台自動化>工具鏈。 在工具鏈頁面上,按一下建立工具鏈。 在建立工具鏈頁面上,按一下開發Kubernetes應用程式。
配置工具鏈名稱及地區
檢閱工具鏈設定的預設資訊。 在 IBM Cloud 中,可透過工具鏈名稱來識別工具鏈。 請確定工具鏈名稱在 IBM Cloud中相同地區及資源群組的工具鏈內是唯一的。
工具鏈地區可能與叢集及登錄地區不同。

選取部署策略
工具鏈會建立「持續部署管線」,以在 IBM Cloud® Kubernetes Service上部署應用程式 Docker 映像檔。 選擇要使用的部署策略。 根據您選擇的部署策略 (滾動、藍綠或金絲雀),您必須提供更多詳細資料。
-
按一下您要用於工具鏈的部署策略。
部署策略 -
按一下繼續。
配置應用程式原始碼儲存庫
在「應用程式」步驟中,依預設會顯示應用程式原始碼儲存庫的建議選項。 若要檢視基礎 Git 整合的所有可用選項,請按一下 進階選項。 依預設,工具鏈會使用預設範例,將範例應用程式複製為 IBM管理的 Git Repos and Issue Tracking 儲存庫。

您可以變更應用程式儲存庫的名稱。 儲存庫的地區仍與工具鏈的地區相同。
工具鏈範本提供 範例 NodeJS 應用程式。 如果您要連結工具鏈的現有 Application repo,請選擇 Bring your own app,並指定 repo 的 URL。 工具鏈只支援連結至現有的 Git Repos and Issue Tracking repos。
依預設,應用程式儲存庫範本會複製到 Git Repos and Issue Tracking 組織。 若要變更組織,請啟用 進階選項 並指定儲存庫擁有者。
配置庫存儲存庫
庫存儲存庫會記錄持續整合工具鏈所建置構件的詳細資料。 您可以建立新的庫存儲存庫,它是 庫存儲存庫範本 的複本,或使用您在工具鏈之間共用的現有庫存儲存庫。

依預設,庫存儲存庫範本會複製到 Git Repos and Issue Tracking 組織。 若要變更組織,請選取 進階選項 並指定儲存庫擁有者。
安全儲存密鑰
此工具鏈內的數個工具需要密碼,例如 IBM Cloud API 金鑰。 您必須安全地將所有密鑰儲存在密鑰儲存庫中,並在工具鏈需要時參照它們。
使用 IBM Cloud,您可以從各種密鑰管理及資料保護供應項目中選擇,以協助您保護機密資料並集中化密鑰。 在「密鑰」步驟中,您可以指定要在工具鏈中新增或移除哪些密鑰儲存庫整合。 如需新增及移除儲存庫整合 (包括必要條件及使用提示) 的相關資訊,請參閱 管理 IBM Cloud 密碼。
透過使用範本內的提示,工具鏈會自動移入預先配置的密鑰; 您不需要從附加至工具鏈的儲存庫整合中手動選取密鑰。
本指導教學使用 IBM Secrets Manager 作為密鑰儲存庫。

IBM Secrets Manager 可安全地儲存並套用密鑰,例如屬於工具鏈一部分的 API 金鑰、映像檔簽章或 HashiCorp 認證。

有關在 IBM Key Protect 或 HashiCorp, 管理機密的詳細資訊,請參閱 機密。
配置部署目標
配置要將應用程式部署至其中的目標 Kubernetes 叢集。 在應用程式通過建置、測試及掃描階段之後,管線會將建置的應用程式映像檔部署至目標 Kubernetes 叢集。 此部署現在已準備好進行驗收測試或整合測試。
如果 API 金鑰具有必要的存取權,則下列欄位會使用已建立、從儲存庫擷取或手動指定的 API 金鑰自動載入。 如果 API 金鑰有效,則會自動移入儲存器登錄區域及名稱空間叢集區域、名稱、名稱空間及資源群組的值。 您可以更新任何這些欄位,以符合您的配置。
-
應用程式名稱: 應用程式的名稱。 預設應用程式名稱為
hello-containers
。 -
IBM Cloud API 金鑰: 在數個作業中用來與
ibmcloud
CLI 工具互動的 API 金鑰。 使用下列其中一種方法來指定您要使用的 API 金鑰:- 按一下金鑰圖示,以從您選擇的密鑰儲存庫匯入現有 API 金鑰。
- 複製並貼上現有的 API 金鑰。
- 按一下 新建 以建立 API 金鑰。
- 如果您沒有現有的 API 金鑰,請產生新的
api-key
。
您可以立即將產生的 API 金鑰儲存至您選擇的現有密鑰儲存庫。
應用程式是使用您指定的部署策略來部署。 下列範例顯示「波動式」或「藍綠」部署的詳細資料。

如果您選取 Canary 部署策略,則必須指定額外部署目標詳細資料。
-
Canary 步驟大小: 定義要重新導向至新版 Canary 部署的資料流量。
-
Canary 步驟間隔: 定義每一個 Canary 測試之間的時間間隔,以移至 Canary 部署的新版本。

新增選用工具整合
您可以將 IBM Cloud® DevOps Insights 工具整合新增至工具鏈,而不需要任何其他配置。
DevOps Insights 包含在已建立的工具鏈中。 您不需要提供 DevOps Insights的任何配置步驟。 連續整合管線會自動使用工具鏈中包含的 DevOps Insights 實例。DevOps Insights 會聚集程式碼、測試、建置及部署資料,以提供所有團隊及版本之速度及品質的可見性。
按一下繼續。
完成工具鏈設定
在摘要頁面上,按一下建立。 會自動執行數個步驟來設定工具鏈。
您可以在建立管線之後配置個別工具鏈整合。

探索您的新工具鏈
建立工具鏈之後,它會在圖表中顯示屬於工具鏈一部分的每一個工具整合。
探索管線
您可以探索管線,以瞭解工具鏈流程以及在每一個管線內執行的不同作業。 您剛建立的工具鏈包含三個管線:
- 取回要求管線: 當開發人員合併從其開發分支到主要分支或儲存庫中任何其他分支的變更時執行。 取回要求管線會在「應用程式原始碼」上執行「單元測試」和「靜態掃描」。
- 連續整合管線: 當您將變更合併至「應用程式原始碼」儲存庫的主要分支時執行。 持續整合管線會在「應用程式原始碼」、CIS 檢查及「資料清單 (BOM)」檢查上執行「單元測試」、「程式碼涵蓋面」及「靜態掃描」。 持續交付管線也會產生二進位建置構件,並將它們上傳至 IBM Cloud® Kubernetes Service,如工具鏈中所配置。 持續整合管線會產生建置構件的 meta 資料,並將它儲存在「庫存」儲存庫中。
- 連續部署管線: 將建置構件部署至部署環境。 管線會執行性能檢查來驗證應用程式是否順利部署。 在連續整合管線順利完成之後,您必須手動觸發此管線。 視您選取的部署策略而定,會將更多觸發程式新增至持續交付管線。
執行取回要求及持續整合管線
若要啟動取回要求管線,請在應用程式儲存庫中建立合併要求:
- 在「工具鏈概觀」頁面上的 儲存庫 卡片上,按一下
compliance-app-<timestamp>
應用程式儲存庫。 - 從主要儲存庫中,建立分支。
- 更新範例節點應用程式或 Readme 檔中的部分程式碼,並儲存這些變更。
- 提交合併要求。
- 在「工具鏈概觀」頁面的 儲存庫 卡上,按一下
pr-pipeline
儲存庫,以啟動取回要求管線。 應用程式儲存庫中的對應合併要求會保持擱置狀態,直到取回要求管線的所有階段順利完成為止。 - 在取回要求管線執行成功之後,您可以選取它來探索已完成的步驟。

若要啟動持續整合管線,請在應用程式儲存庫中合併持續整合合併要求:
- 移至合併要求。
- 合併要求,以便將變更複製到應用程式儲存庫的主要分支。 持續整合管線會自動觸發。
- 在「持續整合工具鏈概觀」頁面上的 儲存庫 卡上,按一下
ci-pipeline
儲存庫,以啟動持續整合管線。 - 在連續整合管線執行成功之後,您可以按一下管線執行,以探索已完成的步驟。

左移練習
在安全應用程式開發世界中,左移是一種作法,可防止及尋找問題報告及安全漏洞等問題,並在軟體交付處理程序早期執行相符性檢查。 左移包括下列作法:
- 盡早執行可以在程式碼或儲存庫本身上執行且不需要建置映像檔的檢查。 這些檢查會防止不合規程式碼合併至儲存庫的主要分支。 因為未從拉取要求管線收集證明,所以其目標是盡可能將相符性檢查轉移至最左側。
- 所有檢查都在每個管線執行中執行。 如果前一個檢查失敗,管線會進行到下一個檢查。 若要評估執行中是否有任何失敗,請檢查具有管線評估器之管線的最終步驟。
單元測試及漏洞掃描的結果會發佈至工具鏈內的 DevOps Insights 實例。 若要檢閱這些結果,請按一下工具鏈內的 DevOps Insights 磚,並移至「品質儀表板」頁面。

若要評估管線執行中是否有任何失敗,請檢查管線的最終步驟,其具有管線評估器。
探索持續交付管線
拉取要求和連續整合管線在所有部署策略中都是常見的。 持續交付管線設計及實作變更是根據您先前在本指導教學中選取的部署策略。
本指導教學示範如何使用範例應用程式來執行漸進式部署策略。
探索漸進式部署
本指導教學中使用的漸進式部署策略示範如何將部署策略與 Continuous Delivery 服務搭配使用,以在 Kubernetes上執行正式作業工作量。 持續交付管線為漸進式部署提供兩個觸發程式。 您可以使用下列一種方式來啟動持續交付管線:
- 手動觸發持續交付管線。
- 在「庫存」儲存庫中的每一個
Merge
動作之後,自動觸發持續交付管線。 合併之後,您必須手動觸發連續交付管線執行。
Git Repos and Issue Tracking 觸發程式已設定為觸發自動持續交付管線,但依預設已停用。 您可以在第一次升級變更之後啟用此觸發程式。

因為漸進式部署策略會以新的軟體版本漸進式更新所有正式作業實例,所以不會產生任何關閉時間。 不過,回復部署策略需要您重新部署舊版,這可能需要一些時間才能完成。
持續交付管道執行成功後,您可以在持續交付管道的 perform deployment
步驟中找到應用程式 URL。

下一步
如果您要移除在 Kubernetes上執行的範例應用程式,則必須清除 Kubernetes 叢集:
-
移至 Kubernetes 叢集 首頁。
-
選取範例應用程式執行所在的叢集。
-
按一下 Kubernetes 儀表板。
-
從範例應用程式執行所在的位置,選取 名稱空間。
Kubernetes命名空間 -
刪除所選名稱空間內列出的相關部署、服務及進入。
正在尋求協助嗎?
IBM Cloud 的 AI 助手,它由 IBM 的 watsonx 驅動,旨在幫助您瞭解在 IBM Cloud 工作,並利用可用產品和服務目錄來建立解決方案。 請參閱 取得 AI 助理的協助。
如需其他支援選項,請參閱 取得 Continuous Delivery的協助及支援。