跳至內容

開始使用 Knative 開源專案(第二部分):環境設定

發布於:2023-09-18 ,  修訂於:2024-01-17

開始使用 Knative 開源專案(第二部分):環境設定

作者:Calum MurrayRed Hat 的軟體工程實習生,以及 Leo LiRed Hat 的軟體工程實習生

嗨,歡迎回到這個入門部落格系列!如果您想要完整部落格系列的概觀,請查看第一篇文章。在本文中,我們將討論如何設定 Knative 的開發環境。開發環境是一個您可以修改和檢查程式碼,而不會影響目前發布程式碼的地方。為了設定您的 Knative 開發環境,我們將開發環境的設定分為本機設定(即您在自己的電腦上設定的東西)和外部設定(即您設定在自己電腦以外的東西)。

G. Cresnar Premium, Gear Icon, https://www.flaticon.com/free-icon/settings_563541?term=gear&page=1&position=4&origin=search&related_id=563541

本機設定

您將在自己的電腦上進行程式碼工作,所以讓我們從本機設定開始。如果您覺得您已經知道如何設定本機系統,或者您已經有可用的本機設定,請先跳到外部設定部分 — 您不需要按照順序閱讀這兩個部分!

先決條件

在開始新增本機環境需要的其他元件之前,您需要在電腦上安裝一些先決條件。在繼續進行本機設定之前,請確保您的電腦上已安裝所有這些先決條件

Bash

您的電腦需要安裝 Bash 才能執行其他本機元件需要的所有安裝/設定指令碼。您的電腦很有可能已經有 Bash(Linux 和 Mac 應該有,不過您可能想要在 Mac 上升級 Bash 版本)。如果您使用的是 Windows,則需要安裝 Bash。或者,Windows 使用者可以使用 WSL

Git

為了複製儲存庫或下載各種工具,您需要在電腦上安裝 Git。如果您想檢查是否已安裝 Git,請在終端機視窗中執行 git --version。若要安裝 Git,請依照此處的指示

SSH 金鑰用於驗證您在使用第三方程式碼儲存庫服務提供者(例如 GitHub 或 GitLab)的身份,而無需您每次執行提取、推送或複製命令時都輸入您的憑證。這種基於金鑰的驗證方法可增強安全性和便利性。如果您尚未為 GitHub 或 GitLab 設定 SSH 金鑰,我們強烈建議您這麼做。若要使用 GitHub 設定 SSH 金鑰,請依照這些指示,若要使用 GitLab 設定 SSH 金鑰,請依照這些指示

Golang (Go)

Knative 的大部分部分都是使用 Go 程式語言開發的,因此您需要安裝此語言才能開發 Knative。Knative 的某些部分是以其他語言撰寫的,但我們將在本部落格系列的第 7 篇貼文中討論這些內容(即將推出!)。若要安裝 Go 程式語言,請依照本文中的指示

編輯器

為了編輯程式碼,您需要安裝編輯器。目前最受歡迎且免費的編輯器之一是 VSCode,儘管付費的 JetBrains 編輯器(例如 GoLandIntelliJ IDEA)也非常強大。值得注意的是,IntelliJ IDEA 有免費且功能強大的社群版。有些人也喜歡使用舊式的 VimEmacs 或較新的 Vim 分支 Neovim(如果您願意自行設定,它實際上擁有 VSCode 擁有的所有語言支援)。雖然您選擇的編輯器不會影響您產生的程式碼品質,但選擇一個編輯器並讓自己習慣使用它至關重要,因為您的生產力很大一部分來自於您使用編輯器的能力。

在本機執行 Knative

現在您已確認您擁有所有先決條件,讓我們開始設定您的本機系統以執行 Knative!

Docker/Podman 設定

Knative 在 Kubernetes 集群中運行,這意味著它以一組容器的形式運行。您可以將容器視為既包含您的程式碼和運行程式碼所需的所有依賴項,也包含運行程式碼及其打包依賴項的物件。構建和運行容器最常用的兩個工具是 DockerPodman,因此我們將在此討論如何設定這兩者。但是,請注意,我們認為使用 Docker 更容易,因此我們建議您使用 Docker。

選項 1:設定 Docker

設定 Docker 的第一步是安裝它。最簡單的方法是安裝 Docker Desktop,雖然您只需要 Docker Engine 來運行 Knative,因此您也可以只安裝 Docker Engine。注意:如果您計畫只安裝 Docker Engine,請確保完成安裝後步驟

在您的系統上安裝 Docker 後,您需要登入容器註冊表。您可以使用多種不同的註冊表。首先,您可以使用 Docker 帳戶登入 Docker Hub。要建立一個帳戶,您可以在此註冊。擁有帳戶後,您只需輸入 docker login,然後按照指示操作。另一個選項是使用 Quay.io 上的註冊表,或是建立本機註冊表。如果您使用這些方法中的任何一種,或使用其他註冊表,您只需使用 docker login <registry_url> 登入,然後按照終端機中的提示操作。例如,要登入本機註冊表,您只需執行 docker login localhost:8080,而要登入 Quay,您只需執行 docker login quay.io

選項 2:設定 Podman

如果您想使用 Podman 而不是 Docker,您很幸運 - 它們有相容的 CLI!因此,您只需安裝 Podman,然後將 docker 別名設為 podman。要建立此別名,您必須

  • 如果您使用 bash,請將 alias docker=podman 新增到您的 .bashrc 檔案中。

  • 如果您使用 zsh,請將 alias docker=podman 新增到您的 .zshrc 檔案中。

  • 如果您使用 fish,請將 alias docker=podman 新增到您的 config.fish 檔案中。

與設定 Docker 類似,一旦您在系統上安裝 Podman 並設定好別名,您將需要一個 Docker 註冊表帳戶並執行 docker login。但是,您需要提供要登入的註冊表。因此,您需要執行 docker login docker.io。再次提醒,我們建議使用 Docker 而不是 Podman。

Minikube/KinD 設定

現在您的電腦上有了 Docker 或 Podman 的容器引擎,您已準備好建立本機 Kubernetes 集群來執行 Knative!有許多不同的本機 Kubernetes 版本可供使用,但我們發現 minikube 往往效果最好。要安裝 minikube,請按照他們的入門指南中的步驟操作,直到您進入「部署應用程式」章節。

在偵錯或重現錯誤時,您通常會想要建立一個新的 minikube 集群。若要執行此操作,您可以使用 minikube delete 刪除目前的集群,然後執行 minikube start 來建立一個新的集群。注意:如果已存在集群,minikube start 將會恢復/更新現有集群,因此,如果您嘗試取得新的集群,請務必先刪除您的集群。Minikube 會根據您的作業系統和系統配置自動選擇偏好的驅動程式。如果您想指定 minikube 應使用的驅動程式,您可以在啟動集群時使用 --driver 引數。例如,如果您想使用 Docker 驅動程式,您可以執行 minikube start --driver=docker

另一個用於在本機執行 Kubernetes 的好選擇是 KinD。如果您想安裝 KinD,只需按照其網站首頁上的安裝指示操作即可。要在 KinD 中建立集群,您只需執行 kind create cluster。同樣,要刪除集群,您可以執行 kind delete cluster。注意:KinD 在 Docker/Podman 之上執行,因此您需要安裝其中一個並在您的系統上執行,KinD 才能運作。

ko、kubectl

一旦您透過執行 minikube 啟動了 Kubernetes 集群,您可能想要與之互動!您與集群互動的方式是透過命令列介面 (CLI) 工具 kubectl。您可以在此安裝 kubectl,或者您可以將別名新增到 minikube 隨附的 kubectl 安裝中,方法是將 alias kubectl="minikube kubectl --" 新增到您 Shell 的適當設定檔中。

您可以使用 kubectl 透過執行 kubectl get <resource_type> -A 來取得特定類型的所有資源。例如,如果您想取得集群中的所有 Pod,您可以執行 kubectl get pods -A。若要依命名空間篩選,您可以使用 -n 旗標。例如,您可以執行 kubectl get pods -n knative-eventing 來取得 knative-eventing 命名空間中的所有 Pod。如果您想將資源套用至您的集群(例如安裝 Knative、建立服務或建立中介程式),您可以執行 kubectl apply -f <filename_or_directory>。如果您想遞迴套用目錄及其子目錄的所有內容,您可以使用 -R 旗標:kubectl apply -Rf <directory>

當您開發 Knative 時,您通常會使用 kubectl,但也會使用一個類似的工具,稱為 koko 是一個套件,負責根據套用的設定檔來建置所有 Go 容器映像,而且它是我們用來建置 Knative 的工具。要安裝 ko,請按照以下步驟操作

如果您想建置 Knative(或用適當的 yaml 設定檔撰寫的其他 Go 程式),您只需執行 ko apply -f <filename_or_directory>,它就會建置檔案或目錄中引用的所有內容,並將這些物件套用至您的集群。請注意,您提供給 ko 的檔案名或目錄不是 Go 檔案名,而是 yaml 檔案 - 在這種意義上,ko 的運作方式與 kubectl 相同,都是透過套用 yaml 檔案。此外,它可以像 kubectl 一樣使用 -R 旗標進行完全相同的遞迴套用。

安裝 Knative

Knative 在您的集群中以一組自訂資源、控制器和 Pod 的形式執行。也就是說,它是 Kubernetes 原生的。因此,您在本機執行 Knative 所需的只是一個本機 Kubernetes 集群(例如 minikube 或 KinD),以及一種將原始程式碼建置為容器並使用這些映像套用 Kubernetes 資源的方式 (ko)。在執行 minikube start 以確保您有一個正在執行的集群後,您可以按照文件中概述的步驟,使用 ko 來套用其中一個儲存庫的 config 目錄,或使用 git 儲存庫 kn-box 中提供的絕佳腳本集,將 Knative 安裝到您的集群中。無論您選擇哪種方法,您只需套用一些 yaml 檔案或執行一些 bash 腳本,即可在本機執行 Knative!

現在,如果您想執行您在本機編輯過的 Knative 程式碼,您將必須使用 ko。如前所述,您通常可以透過執行 ko apply -Rf config/ 來建置並套用整個專案。但是,您應始終參考您正在處理的儲存庫中的 CONTRIBUTING.mdDEVELOPMENT.md 檔案,因為它們將提供更具體的指示。

此時,您應該有一個在本機執行的 Kubernetes 集群,且該集群上執行著 Knative。這是一個很好的機會,可以深入了解如何使用 Knative!您可以非常輕鬆地按照您自己集群中的 KnativeKubeByExample 網站上的教學課程進行操作。

執行測試

Knative 有許多測試,從單元/建置測試到整合測試都有。一般來說,單元/建置測試是驗證程式碼是否已編譯,以及每個個別元件是否正常運作。另一方面,整合測試是驗證不同元件是否都正常協同運作。一般來說,我們不建議在本機執行整合測試,因為它們需要大量的時間和資源才能執行。相反,我們建議您在單元測試通過後,將您的變更直接推送至 GitHub,然後在那裡執行整合測試。

每個儲存庫都有關於如何執行其單元測試的指示,因此請查看 CONTRIBUTING.mdDEVELOPMENT.md 檔案以了解它們如何運作。如果它們是 Go 測試(它們很可能就是),您也可以透過執行 go test -v -race -count=1 <filename_or_directory> 在子目錄或特定檔案上執行測試。這非常方便,因為它可以在您進行變更時減少回饋迴圈。

設定您的編輯器

現在您有了一個可以執行和測試您對 Knative 所做變更的本機環境,讓我們設定一個您可以進行變更的環境!首先,讓我們為您的 IDE 安裝一些有用的外掛程式。

實用的 IDE 外掛程式

我們在此分享的外掛程式是我們認為最有幫助的,當然還有許多其他實用的外掛程式值得探索!如果您發現任何您認為其他社群成員可能會感興趣的東西,請在 Slack 上與我們分享。

Kubernetes

Kubernetes 外掛程式是一個功能全面的開發人員工具,為在 Kubernetes 環境中建置和疑難排解應用程式提供完整的解決方案。您可以透過 Kubernetes 資源的直觀探索樹狀結構,輕鬆地與 Pod 的日誌等 Kubernetes 資源互動和導覽。

如果您使用 VSCode,這是設定您的 Kubernetes 外掛程式 的方法

安裝外掛程式後,您將能夠在這裡看到它

如果您使用 Jetbrains IDE,這是安裝 Kubernetes 外掛程式 的方法

安裝外掛程式後,您將能夠在這裡看到它

語言支援

VSCode 是一個多功能的文字編輯器,旨在透過語言伺服器協定支援多種程式設計語言。相比之下,JetBrains IDE 則是以特定語言為主 – Go 的 GoLand、Python 的 Pycharm 等等。為了讓 VSCode 為某種語言提供 IDE 式的支援,您必須為該語言安裝所需的外掛程式。同樣地,在 JetBrains 中,您通常也可以為特定語言安裝外掛程式,即使該 IDE 不支援該語言,但有時您必須支付適當的授權費用。由於 VSCode 需要外掛程式才能為語言提供 IDE 功能,我們建議您安裝以下外掛程式

程式碼格式化

Go 程式碼具有內建的樣式指南和格式化程式,因此您自然可以使用 VSCode 和 JetBrains IDE 設定此功能。對於 VSCode,您可以按照以下步驟操作

對於 JetBrains,您可以在 這篇文章 中找到有關如何設定的更多詳細資訊。

外部設定

現在您已經有了可用的本機設定,還有一些外部事項您也必須設定。這些可以按照如何加入社群、如何認領問題以及如何建立 PR 來分組。

社群

當您在撰寫程式碼時,您可能會想要與其他人討論您的變更並提出問題。Knative 主要使用 Slack 作為溝通方式,以及 郵件列表。您可以在這裡找到這些溝通管道的連結。還有每週和每雙週的工作小組會議,您可以在 Zoom 上加入這些會議,我們會在其中進行討論。要找到社群行事曆(其中包含工作小組會議時間和連結),以及 Slack 和郵件列表的連結,您可以閱讀這篇文章

認領問題

現在您已經有了可用的本機設定,您可能想要處理一個問題!若要認領問題,請前往您想要貢獻的儲存庫的「問題」索引標籤,然後瀏覽問題。如果這是您首次對該儲存庫做出貢獻,您應該尋找標示為「good-first-issue」的問題。若要依特定標籤篩選問題,請依照這裡概述的步驟進行。如果沒有標示為「good-first-issue」的問題,您可以隨時在 Slack 上詢問是否有適合您的好問題。此外,如果標示為「good-first-issue」的問題都已被認領,您可以嘗試在這些問題上留言,看看它們是否仍在積極處理中。一旦您有了想要處理的問題,請留言「/assign」,Prow 機器人會將其分配給您(稍後會詳細介紹 Prow!)。

提取請求

最終,一旦您編寫完程式碼的變更,您就會達到想要開啟提取請求的階段。如果您不熟悉這個流程,請查看本系列中的前一篇文章!一旦您在 Knative 儲存庫中開啟 PR,您可能會注意到有機器人對其進行留言!

如果這是您首次對 Knative 提出 PR,將會有一個 CLA 機器人,以確保您已簽署 CLA。其他機器人則旨在使管理 PR 和測試變得更容易。由於您只需處理一次 CLA,我們將首先介紹 CLA,然後再說明如何與 Prow 互動以管理您的 PR。

CLA

那麼什麼是 CLA?CLA 代表貢獻者授權協議,而標題已經很好地解釋了它的含義。這是一份協議,您(貢獻者)在其中將各種權利授予雲端原生運算基金會 (CNCF)。我們不會在此詳細說明該協議的內容,因為您應該在簽署前自行閱讀。但是,我們將告訴您為什麼像 Knative 這樣的社群需要 CLA 的一個範例。有時,專案希望重新授權其中包含的程式碼。由於您擁有您貢獻的程式碼的版權,這表示專案必須詢問每個曾經貢獻過的人是否願意重新授權,這可能很困難。您可以在 這裡找到 CNCF CLA。

Knative 要求在我們接受您的貢獻之前簽署 CLA,因此您必須在您的 PR 可以合併之前簽署它。請注意,CLA 有兩個版本:公司版本和個人版本。如果您以公司員工的身分貢獻,您需要簽署公司版本,否則個人版本適合您!若要簽署 CLA,您只需依照 CLA 機器人發佈到您 PR 的留言中的步驟進行即可。

與 Prow 互動

Prow 是一個基於 Kubernetes 的機器人,在許多 CNCF 專案中用於管理問題和 PR。在 Knative 中,通常是 Prow 合併 PR - 而不是其他貢獻者或維護者!若要判斷要合併哪些 PR,Prow 會獲得一組條件。這些條件通常是一組標籤,以及所有必要的測試都已通過。在 Knative 中,您的 PR 需要合併的兩個標籤是「lgtm」和「approved」。任何人都可以透過在 PR 上留言「/lgtm」來新增「lgtm」,但只有批准者才能新增「approved」標籤。此外,如果您有「do-not-merge/hold」(您可以透過留言「/hold」新增)或「do-not-merge/work-in-progess」標籤(您可以透過建立草稿 PR 取得),機器人將不會合併您的變更。

為了讓您的 PR 通過測試,它們需要執行。但是,預設情況下它們不會執行!為了讓它們執行,knative 或 knative-sandbox 組織的成員必須留言「/ok-to-test」(他們必須是哪個組織的成員取決於您的儲存庫屬於哪個組織)。「/ok-to-test」命令會將「ok-to-test」標籤新增至您的 PR。一般來說,審核您 PR 的人員會執行此操作,但如果他們沒有執行,您可以隨時詢問他們為什麼沒有執行。如果您加入 knative 或 knative-sandbox 組織,您將不再需要在您的 PR 上套用 ok-to-test 標籤 - prow 將會自動執行測試!因此,一旦您做出了一些貢獻,請加入這些組織!

正如我們稍早提到的,若要將問題分配給自己,您可以留言「/assign」,Prow 將會將問題分配給您。您也可以執行「/assign @username」,Prow 將會將問題分配給具有 username 的使用者。您也可以將此命令用於 PR,以將它們分配給特定使用者。

您可能想在您的 PR 上執行的一件事是,如果其中一個測試失敗且您認為是偶然的,則重新執行測試。若要執行此操作,只需留言「/retest」即可重新執行所有測試,或留言「/retest-required」即可僅重新測試所有失敗且必要的測試。

您會發現有用的最後一個命令是「/cc @username」,它會向具有 username 的使用者請求審核。您可以在此命令中放入多個使用者,並一次請求多個審核(例如「/cc @user1 @user2」)。

若要了解 Knative 的 Prow 執行個體支援的所有命令,以及它們的用法,您可以閱讀 Prow 命令頁面

我們使用分析和 Cookie 來了解網站流量。您使用我們網站的資訊會與 Google 分享以達到該目的。 瞭解更多。