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

pkgs.k8s.io:Kubernetes 社群擁有的套件儲存庫介紹

我謹代表 Kubernetes SIG Release,非常興奮地介紹 Kubernetes 社群擁有的 Debian 和 RPM 軟體套件儲存庫:pkgs.k8s.io!新的套件儲存庫是 Google 託管的套件儲存庫 (apt.kubernetes.ioyum.kubernetes.io) 的替代方案,我們自 Kubernetes v1.5 以來一直使用它們。

這篇部落格文章包含有關這些新套件儲存庫的資訊、對您作為最終使用者意味著什麼,以及如何遷移到新的儲存庫。

ℹ️ 更新 (2024 年 3 月 26 日):舊版 Google 託管的儲存庫已於 2024 年 3 月 4 日關閉。現在已無法從舊版 Google 託管的套件儲存庫安裝 Kubernetes 套件。 請查看 棄用公告,以取得有關此變更的更多詳細資訊。

您需要了解有關新套件儲存庫的哪些資訊?

(於 2024 年 1 月 12 日和 2024 年 3 月 26 日更新)

  • 這是一個選擇性加入的變更;您需要手動從 Google 託管的儲存庫遷移到 Kubernetes 社群擁有的儲存庫。請參閱稍後公告中的 如何遷移,以取得遷移資訊和指示。
  • 舊版 Google 託管的套件儲存庫已於 2024 年 3 月 4 日關閉。現在已無法從舊版 Google 託管的套件儲存庫安裝 Kubernetes 套件。 這些儲存庫已於 2023 年 8 月 31 日棄用,並於 2023 年 9 月 13 日凍結。請查看 棄用公告,以取得有關此變更的更多詳細資訊。
  • 舊版 Google 託管的套件儲存庫將於 2024 年 1 月關閉。 這些儲存庫已於 2023 年 8 月 31 日棄用,並於 2023 年 9 月 13 日凍結。請查看 棄用公告,以取得有關此變更的更多詳細資訊。
  • 舊版儲存庫中的現有套件在可預見的未來將繼續可用。但是,Kubernetes 專案無法保證這會持續多久。已棄用的舊版儲存庫及其內容可能會在未來的任何時間移除,恕不另行通知。舊版套件儲存庫將於 2024 年 1 月關閉。 舊版 Google 託管的套件儲存庫已於 2024 年 3 月 4 日關閉。
  • 鑑於在 2023 年 9 月 13 日截止日期之後,不會再將新版本發布到舊版儲存庫,如果您不遷移到新的 Kubernetes 套件儲存庫,您將無法升級到自該日期起發布的任何修補程式或次要版本。也就是說,我們建議盡快遷移到新的 Kubernetes 套件儲存庫。 遷移到新的 Kubernetes 套件儲存庫是使用官方 Kubernetes 套件的必要條件。
  • 新的 Kubernetes 套件儲存庫包含的套件從社群接管套件建置時仍在支援範圍內的 Kubernetes 版本開始。這表示新的套件儲存庫具有適用於所有 Kubernetes 版本的 Linux 套件,從 v1.24.0 開始。
  • Kubernetes 沒有適用於較早版本 Kubernetes 的官方 Linux 套件;但是,您的 Linux 發行版可能會提供自己的套件。
  • 每個 Kubernetes 次要版本都有一個專用的套件儲存庫。升級到不同的次要版本時,您必須記住套件儲存庫詳細資訊也會變更。請查看 變更 Kubernetes 套件儲存庫 指南,以取得有關升級 Kubernetes 次要版本時需要採取的步驟的資訊。

我們為什麼要引入新的套件儲存庫?

隨著 Kubernetes 專案的成長,我們希望確保最終使用者獲得最佳體驗。Google 託管的儲存庫多年來一直為我們提供良好的服務,但我們開始面臨一些問題,這些問題需要對我們發布套件的方式進行重大變更。我們的另一個目標是為所有關鍵組件使用社群擁有的基礎架構,其中包含套件儲存庫。

將套件發布到 Google 託管的儲存庫是一個手動流程,只能由稱為 Google 建置管理員 的 Google 員工團隊完成。Kubernetes 版本管理員團隊 是一個非常多元化的團隊,尤其是在我們工作的時區方面。鑑於此限制,我們必須為每個版本進行非常仔細的規劃,以確保我們同時有版本管理員和 Google 建置管理員可用於執行版本發布。

另一個問題是我們只有一個套件儲存庫。因此,我們無法發布預發布版本 (alpha、beta 和 rc) 的套件。這使得任何有興趣測試 Kubernetes 預發布版本的人都更難進行測試。我們從測試這些版本的人員那裡收到的回饋對於確保版本的最佳品質至關重要,因此我們希望盡可能簡化測試這些版本的流程。最重要的是,只有一個儲存庫限制了我們在發布 cri-toolskubernetes-cni 等相依性時的能力。

儘管存在所有這些問題,我們仍然非常感謝 Google 和 Google 建置管理員多年來的參與、支援和幫助!

新的套件儲存庫如何運作?

新的套件儲存庫託管在 pkgs.k8s.io 上,適用於 Debian 和 RPM 套件。目前,此網域指向由 S3 儲存桶支援的 CloudFront CDN,其中包含儲存庫和套件。但是,我們計劃在未來加入更多鏡像,讓其他公司有可能幫助我們提供套件。

套件透過 OpenBuildService (OBS) 平台 建置和發布。在長期評估不同的解決方案後,我們決定使用 OpenBuildService 作為管理我們的儲存庫和套件的平台。首先,OpenBuildService 是一個開放原始碼平台,被大量的開放原始碼專案和公司使用,例如 openSUSE、VideoLAN、Dell、Intel 等。OpenBuildService 具有許多功能,使其非常靈活且易於與我們現有的發布工具整合。它還允許我們以與 Google 託管的儲存庫類似的方式建置套件,使遷移流程盡可能順暢。

SUSE 透過允許 Kubernetes 專案存取其參考 OpenBuildService 設定 (build.opensuse.org) 以及提供技術支援將 OBS 與我們的發布流程整合,來贊助 Kubernetes 專案。

我們使用 SUSE 的 OBS 實例來建置和發布套件。在建置新版本時,我們的工具會自動將所需的成品和套件規格推送到 build.opensuse.org。這將觸發建置流程,該流程將為所有支援的架構 (AMD64、ARM64、PPC64LE、S390X) 建置套件。最後,產生的套件將自動推送到我們社群擁有的 S3 儲存桶,使其對所有使用者可用。

我們要藉此機會感謝 SUSE 允許我們使用 build.opensuse.org 以及他們慷慨的支援,使這種整合成為可能!

Google 託管的套件儲存庫和 Kubernetes 套件儲存庫之間有哪些顯著差異?

您應該注意三個顯著差異

  • 每個 Kubernetes 次要版本都有一個專用的套件儲存庫。例如,名為 core:/stable:/v1.28 的儲存庫僅託管適用於穩定 Kubernetes v1.28 版本的套件。這表示您可以從此儲存庫安裝 v1.28.0,但您無法安裝 v1.27.0 或 v1.28 以外的任何其他次要版本。升級到另一個次要版本時,您必須新增一個新的儲存庫,並選擇性地移除舊的儲存庫
  • 每個 Kubernetes 儲存庫中可用的 cri-toolskubernetes-cni 套件版本有所不同
    • 這兩個套件是 kubeletkubeadm 的相依性
    • v1.24 到 v1.27 的 Kubernetes 儲存庫具有與 Google 託管的儲存庫相同的這些套件版本
    • v1.28 及更高版本的 Kubernetes 儲存庫將僅發布該 Kubernetes 次要版本使用的版本
      • 說到 v1.28,在 Kubernetes v1.28 的儲存庫中僅提供 kubernetes-cni 1.2.0 和 cri-tools v1.28
      • v1.29 的情況類似,我們僅計劃發布 cri-tools v1.29 和 Kubernetes v1.29 將使用的任何 kubernetes-cni 版本
  • 套件版本的修訂部分 (1.28.0-00 中的 -00 部分) 現在由 OpenBuildService 平台自動產生,並且具有不同的格式。修訂現在的格式為 -x.y,例如 1.28.0-1.1

這是否會以任何方式影響現有的 Google 託管的儲存庫?

(於 2024 年 3 月 26 日更新)

舊版 Google 託管的儲存庫已於 2024 年 3 月 4 日關閉。現在已無法從舊版 Google 託管的套件儲存庫安裝 Kubernetes 套件。 請查看 棄用公告,以取得有關此變更的更多詳細資訊。

Google 託管的儲存庫和發布到其中的所有套件將繼續以與以前相同的方式運作。我們建置和發布套件到 Google 託管的儲存庫的方式沒有任何變更,所有新引入的變更僅影響發布到社群擁有的儲存庫的套件。

但是,如本部落格文章開頭所述,我們計劃在未來停止將套件發布到 Google 託管的儲存庫。

如何遷移到 Kubernetes 社群擁有的儲存庫?

Debian、Ubuntu 和使用 apt/apt-get 的作業系統

  1. 取代 apt 儲存庫定義,以便 apt 指向新的儲存庫,而不是 Google 託管的儲存庫。請確保將以下命令中的 Kubernetes 次要版本取代為您目前使用的次要版本

    echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    
  2. 下載 Kubernetes 套件儲存庫的公開簽署金鑰。所有儲存庫都使用相同的簽署金鑰,因此您可以忽略 URL 中的版本

    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    

    更新:在早於 Debian 12 和 Ubuntu 22.04 的版本中,預設情況下不存在資料夾 /etc/apt/keyrings,應在 curl 命令之前建立。

  3. 更新 apt 套件索引

    sudo apt-get update
    

CentOS、Fedora、RHEL 和使用 rpm/dnf 的作業系統

  1. 取代 yum 儲存庫定義,以便 yum 指向新的儲存庫,而不是 Google 託管的儲存庫。請確保將以下命令中的 Kubernetes 次要版本取代為您目前使用的次要版本

    cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
    enabled=1
    gpgcheck=1
    gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
    exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
    EOF
    

我可以在哪裡取得 v1.24.0 之前 Kubernetes 版本的套件?

(於 2024 年 3 月 26 日更新)

對於 Kubernetes v1.24 及更高版本,Kubernetes 組件的 Linux 套件可透過官方 Kubernetes 套件儲存庫下載。Kubernetes 不會發布任何 v1.24.0 之前 Kubernetes 版本的軟體套件;但是,您的 Linux 發行版可能會提供自己的套件。或者,您可以直接下載二進位檔案,而不是使用套件。例如,請參閱 「安裝 kubeadm」 文件中的 不使用套件管理器 指示。

遷移到 Kubernetes 儲存庫後,我可以回滾到 Google 託管的儲存庫嗎?

(於 2024 年 3 月 26 日更新)

舊版 Google 託管的儲存庫已於 2024 年 3 月 4 日關閉,因此現在已無法回滾到舊版 Google 託管的儲存庫。

一般而言,可以。只需執行與遷移時相同的步驟,但使用 Google 託管的儲存庫的參數。您可以在 「安裝 kubeadm」 等文件中找到這些參數。

為什麼沒有穩定的網域/IP 清單?為什麼我不能限制套件下載?

我們對 pkgs.k8s.io 的計畫是使其作為重新導向器運作,根據使用者的位置重新導向到一組後端 (套件鏡像)。此變更的性質意味著下載套件的使用者可能會隨時重新導向到任何鏡像。鑑於架構以及我們計劃在不久的將來加入更多鏡像,我們無法提供您可以新增到允許清單的 IP 位址或網域清單。

限制性控制機制 (例如中間人 Proxy 或限制存取特定 IP/網域清單的網路策略) 將會因應此變更而中斷。對於這些情況,我們建議您將發布套件鏡像到您可以嚴格控制的本機套件儲存庫。

如果我偵測到新儲存庫有任何異常,我應該怎麼辦?

如果您在使用新的 Kubernetes 套件儲存庫時遇到任何問題,請在 kubernetes/release 儲存庫 中提交問題。