本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
pkgs.k8s.io:介绍 Kubernetes 社区拥有的软件包仓库
我谨代表 Kubernetes SIG Release 欣喜地介绍 Kubernetes 社区自有的 Debian 和 RPM 软件包仓库:pkgs.k8s.io
!新的软件包仓库是自 Kubernetes v1.5 以来我们一直使用的 Google 托管的软件包仓库(apt.kubernetes.io
和 yum.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-tools
和 kubernetes-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-tools
和kubernetes-cni
软件包版本有所不同- 这两个软件包是
kubelet
和kubeadm
的依赖项 - 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
的操作系统
替换
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
下载 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 命令前创建。更新
apt
软件包索引sudo apt-get update
CentOS、Fedora、RHEL 以及使用 rpm
/dnf
的操作系统
替换
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。