本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

將端到端 Kubernetes 測試帶到 Azure(第 2 部分)

此前,Kubernetes 測試一直由 Google 託管,在 Google Compute Engine (GCE) 和 Google Container Engine (GKE) 上執行端到端測試。事實上,提交佇列的門控檢查是這些測試平臺上執行的測試的一個子集。聯合測試旨在透過使組織能夠在各種平臺上託管測試作業並貢獻測試結果以惠及 Kubernetes 專案來擴充套件測試覆蓋範圍。Google 的 Kubernetes 測試團隊和 SIG-Testing 的成員建立了一個 Kubernetes 測試歷史儀表板,該儀表板釋出了所有聯合測試作業(包括 Google 託管的作業)的結果。

在這篇博文中,我們描述瞭如何擴充套件 Azure 的端到端測試作業,並展示瞭如何為 Kubernetes 專案貢獻聯合測試。

Azure 的端到端整合測試

成功實施 “開發發行版”指令碼以自動化在 Azure 上部署 Kubernetes 後,我們的下一個目標是執行端到端整合測試並與 Kubernetes 社群分享結果。

我們透過在私有 Jenkins 伺服器中定義一個夜間作業,實現了在 Azure 上執行 Kubernetes 端到端測試的工作流自動化。圖 2 顯示了使用 kube-up.sh 在 Azure 中執行的 Ubuntu 虛擬機器上部署 Kubernetes,然後執行端到端測試的工作流。測試完成後,該作業將測試結果和日誌上傳到 Google Cloud Storage 目錄,其格式可由生成測試歷史儀表板的指令碼處理。我們的 Jenkins 作業使用 hack/jenkins/e2e-runner.sh 和 hack/jenkins/upload-to-gcs.sh 指令碼以正確的格式生成結果。

| Kubernetes on Azure - Flow Chart - New Page.png | | 圖 2 - 夜間測試作業工作流 |

如何貢獻端到端測試

在建立 Azure 端到端測試作業的過程中,我們與 SIG-Testing 的成員合作,尋找一種向 Kubernetes 社群釋出結果的方法。這次合作的結果是文件和貢獻聯合測試作業結果的簡化流程。貢獻端到端測試結果的步驟可以概括為 4 個步驟。

  1. 建立一個 Google Cloud Storage 儲存桶以釋出結果。
  2. 定義一個自動化作業來執行端到端測試。透過設定一些環境變數,hack/jenkins/e2e-runner.sh 部署 Kubernetes 二進位制檔案並執行測試。
  3. 使用 hack/jenkins/upload-to-gcs.sh 上傳結果。
  4. 透過提交修改了 kubernetes/test-infra 中幾個檔案的拉取請求,將結果整合到測試歷史儀表板中。

聯合測試文件更詳細地描述了這些步驟。執行端到端測試和上傳結果的指令碼簡化了貢獻新聯合測試作業的工作。設定自動化測試作業和部署 Kubernetes 的適當環境的具體步驟留給讀者自行決定。對於使用 Jenkins 的組織,GCE 和 GKE 測試的 jenkins-job-builder 配置可能會提供有用的示例。

回顧

Azure 上的端到端測試已經運行了幾周。在此期間,我們在 Kubernetes 中發現了兩個問題。莊瑋旭立即釋出了修復程式,並已合併到 Kubernetes 主分支。

第一個問題發生在我們想使用 SaltStack 在 Azure 上的 Ubuntu VM 上啟動 Kubernetes 叢集時。一個提交 (07d7cfd3) 修改了 OpenVPN 證書生成指令碼,使其使用一個只由 cluster/ubuntu 中的指令碼初始化的變數。證書生成指令碼對引數存在的嚴格檢查導致其他使用該指令碼的平臺(例如我們為支援 Azure 所做的更改)失敗。我們提交了一個修復此問題的拉取請求,透過使用預設值初始化該變數,使證書生成指令碼在所有平臺型別上更加健壯。

第二個拉取請求清除了 Daemonset 單元測試檔案中未使用的匯入。該匯入語句導致單元測試在 golang 1.4 中中斷。我們的夜間 Jenkins 作業幫助我們發現了此錯誤,我們迅速推出了修復程式。

結論和未來工作

為 Azure 上的 Kubernetes 新增夜間端到端測試作業有助於定義向 Kubernetes 專案貢獻聯合測試的流程。在工作過程中,當我們的 Azure 測試作業發現相容性問題時,我們也看到了將測試覆蓋範圍擴充套件到更多平臺的直接好處。

我們感謝 Aaron Crickenberger、Erick Fejta、Joe Finney 和 Ryan Hutchinson 幫助我們將 Azure 端到端測試的結果整合到 Kubernetes 測試歷史中。如果您想參與測試以建立穩定、高質量的 Kubernetes 版本,請加入我們的 Kubernetes 測試 SIG (sig-testing)