本文已超过一年。较旧的文章可能包含过时内容。请检查页面信息自发布以来是否仍准确。

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 日)

  • 这是一项选择加入的变更;你需要手动从 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 没有针对早期版本的官方 Linux 软件包;但是,你的 Linux 发行版可能会提供自己的软件包。
  • 每个 Kubernetes 次要版本都有一个专门的软件包仓库。当升级到不同的次要版本时,必须记住软件包仓库的详细信息也会发生变化。请查阅更改 Kubernetes 软件包仓库指南,了解升级 Kubernetes 次要版本时需要采取的步骤。

我们为什么要引入新的软件包仓库?

随着 Kubernetes 项目的发展,我们希望确保最终用户的最佳体验。Google 托管的仓库多年来服务良好,但我们开始面临一些问题,需要对软件包发布方式进行重大改变。我们的另一个目标是对所有关键组件使用社区拥有的基础设施,这也包括软件包仓库。

将软件包发布到 Google 托管仓库是一个手动过程,只能由一群 Google 员工(称为Google Build Admins)完成。Kubernetes 发布经理团队是一个非常多元化的团队,尤其是在时区方面。考虑到这一限制,我们必须对每次发布进行非常仔细的规划,以确保有发布经理和 Google Build Admin 均可执行发布。

另一个问题是,我们只有一个软件包仓库。因此,我们无法发布预发布版本(alpha、beta 和 rc)的软件包。这使得有兴趣测试 Kubernetes 预发布版本的人更难进行测试。我们从测试这些版本的人那里收到的反馈对于确保发布的最佳质量至关重要,因此我们希望让测试这些版本尽可能简单。此外,只有一个仓库限制了我们在发布 cri-toolskubernetes-cni 等依赖项方面的能力。

尽管存在所有这些问题,我们仍然非常感谢 Google 和 Google Build Admins 多年来的参与、支持和帮助!

新的软件包仓库如何工作?

新的软件包仓库托管在 pkgs.k8s.io,支持 Debian 和 RPM 软件包。目前,该域名指向由包含仓库和软件包的 S3 bucket 支持的 CloudFront CDN。然而,我们计划未来引入更多的镜像,为其他公司提供帮助我们分发软件包的可能性。

软件包通过OpenBuildService (OBS) 平台构建和发布。经过长时间对不同解决方案的评估,我们决定使用 OpenBuildService 作为管理我们仓库和软件包的平台。首先,OpenBuildService 是一个开源平台,被大量开源项目和公司使用,如 openSUSE、VideoLAN、Dell、Intel 等等。OpenBuildService 具有许多特性,使其非常灵活且易于与我们现有的发布工具集成。它还允许我们以与 Google 托管仓库类似的方式构建软件包,使迁移过程尽可能无缝。

SUSE 赞助了 Kubernetes 项目,提供了对其参考 OpenBuildService 设置(build.opensuse.org)的访问权限,并提供了技术支持,帮助我们将 OBS 与我们的发布流程集成。

我们使用 SUSE 的 OBS 实例来构建和发布软件包。构建新版本后,我们的工具会自动将所需的 artifacts 和软件包规范推送到 build.opensuse.org。这将触发构建过程,为所有支持的架构(AMD64、ARM64、PPC64LE、S390X)构建软件包。最后,生成的软件包将自动推送到我们社区拥有的 S3 bucket,供所有用户使用。

我们想借此机会感谢 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" 中的 Without a package manager 说明。

迁移到 Kubernetes 软件源后,我可以回退到 Google 托管的软件源吗?

(更新于 2024 年 3 月 26 日)

旧的 Google 托管软件源已于 2024 年 3 月 4 日移除,因此无法再回退到旧的 Google 托管软件源。

一般来说,可以。只需执行与迁移时相同的步骤,但使用 Google 托管软件源的参数即可。你可以在类似 "安装 kubeadm" 的文档中找到这些参数。

为什么没有稳定的域名/IP 列表?为什么我不能限制软件包下载?

我们对 pkgs.k8s.io 的计划是使其作为重定向器,根据用户位置将请求重定向到一组后端(软件包镜像)。这种更改的性质意味着用户下载软件包时随时可能被重定向到任何镜像。考虑到架构以及我们计划在不久的将来增加更多镜像,我们无法提供可供你添加到允许列表中的 IP 地址或域名列表。

严格的控制机制,例如中间人代理或限制访问特定 IP/域名的网络策略,将因这一更改而失效。对于这些场景,我们建议你将发布包镜像到你可以严格控制的本地软件包软件源。

如果我检测到新的软件源有异常情况,该怎么办?

如果你遇到新的 Kubernetes 软件包软件源的任何问题,请在 kubernetes/release 仓库中提交 issue。