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

pkgs.k8s.io:介紹 Kubernetes 社群擁有的軟體包倉庫

我謹代表 Kubernetes SIG Release 欣喜地介紹 Kubernetes 社群自有的 Debian 和 RPM 軟體包倉庫:pkgs.k8s.io!新的軟體包倉庫是自 Kubernetes v1.5 以來我們一直使用的 Google 託管的軟體包倉庫(apt.kubernetes.ioyum.kubernetes.io)的替代品。

這篇博文包含了關於這些新軟體包倉庫的資訊,這對作為終端使用者的你意味著什麼,以及如何遷移到新的倉庫。

ℹ️ 更新 (2024 年 3 月 26 日):舊版 Google 託管的倉庫已於 2024 年 3 月 4 日停用。無法再從舊版 Google 託管的軟體包倉庫安裝 Kubernetes 軟體包。 請查閱棄用公告瞭解此變更的更多詳情。

關於新軟體包倉庫你需要知道什麼?

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

  • 這是一個選擇性加入(opt-in)的變更;你需要手動從 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 版本的軟體包。這意味著新的軟體包倉庫為所有從 v1.24.0 開始的 Kubernetes 版本提供了 Linux 軟體包。
  • 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 與我們的釋出流程整合。

我們使用 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 地址或域名列表。

像中間人代理或限制訪問特定 IP/域名列表的網路策略等限制性控制機制將因這一變更而失效。對於這些場景,我們鼓勵您將釋出軟體包映象到您有嚴格控制權的本地軟體包倉庫。

如果我發現新倉庫有任何異常,我該怎麼辦?

如果您在使用新的 Kubernetes 軟體包倉庫時遇到任何問題,請在 kubernetes/release 倉庫中提交一個 issue。