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

將端對端 Kubernetes 測試引入 Azure (第 2 部分)

從歷史上看,Kubernetes 測試一直由 Google 託管,在 Google Compute Engine (GCE) 和 Google Container Engine (GKE) 上運行 e2e 測試。實際上,submit-queue 的閘道檢查是在這些測試平台上執行之測試的子集。聯邦測試旨在透過使組織能夠為各種平台託管測試作業並貢獻測試結果以使 Kubernetes 專案受益,從而擴展測試覆蓋率。 Google 和 SIG-Testing 的 Kubernetes 測試團隊成員建立了一個 Kubernetes 測試歷史儀表板,用於發布來自所有聯邦測試作業(包括 Google 託管的作業)的結果。

在這篇部落格文章中,我們描述了擴展 Azure 的 e2e 測試作業,並展示如何為 Kubernetes 專案貢獻聯邦測試。

AZURE 的端對端整合測試

在成功實施 「開發發行版」腳本以自動化在 Azure 上部署 Kubernetes 之後,我們的下一個目標是運行 e2e 整合測試並與 Kubernetes 社群分享結果。

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

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

如何貢獻 E2E 測試

在我們建立 Azure e2e 測試作業的整個過程中,我們與 SIG-Testing 的成員合作,以找到一種將結果發布到 Kubernetes 社群的方法。 此次合作的成果是文件和簡化的流程,用於貢獻來自聯邦測試作業的結果。 貢獻 e2e 測試結果的步驟可以總結為 4 個步驟。

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

聯邦測試文件更詳細地描述了這些步驟。 運行 e2e 測試和上傳結果的腳本簡化了貢獻新的聯邦測試作業的工作。 設置自動化測試作業和部署 Kubernetes 的適當環境的具體步驟留給讀者偏好。 對於使用 Jenkins 的組織,用於 GCE 和 GKE 測試的 jenkins-job-builder 組態可以提供有用的範例。

回顧

Azure 上的 e2e 測試已經運行了幾個星期。 在此期間,我們在 Kubernetes 中發現了兩個問題。 Weixu Zhuang 立即發布了修復程式,這些修復程式已合併到 Kubernetes master 分支中。

第一個問題發生在我們想要在 Azure 上使用 SaltStack 和 Ubuntu VM 啟動 Kubernetes 叢集時。 一個提交 (07d7cfd3) 修改了 OpenVPN 憑證產生腳本,以使用僅由 cluster/ubuntu 中的腳本初始化的變數。 憑證產生腳本對參數存在性的嚴格檢查導致使用該腳本的其他平台失敗(例如,我們對 Azure 的支援變更)。 我們提交了一個 拉取請求,透過使用預設值初始化變數來修復此問題,以使憑證產生腳本在所有平台類型中更穩健。

第二個 拉取請求清理了 Daemonset 單元測試檔案中未使用的導入。 導入語句破壞了 golang 1.4 的單元測試。 我們的夜間 Jenkins 作業幫助我們找到了這個錯誤,我們立即推送了一個修復程式。

結論與未來工作

為 Azure 上的 Kubernetes 新增夜間 e2e 測試作業有助於定義為 Kubernetes 專案貢獻聯邦測試的流程。 在工作過程中,我們也看到了將測試覆蓋範圍擴展到更多平台的直接好處,因為我們的 Azure 測試作業識別出了相容性問題。

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