本文已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。
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 日)
- 这是一个选择加入更改;您需要手动从 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 通过访问其参考 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-tools
和kubernetes-cni
软件包版本有所不同- 这两个软件包是
kubelet
和kubeadm
的依赖项 - v1.24 到 v1.27 的 Kubernetes 存储库具有与 Google 托管存储库相同的这些软件包版本
- v1.28 及更高版本的 Kubernetes 存储库将仅发布该 Kubernetes 次要版本使用的版本
- 说到 v1.28,只有 kubernetes-cni 1.2.0 和 cri-tools v1.28 将在 Kubernetes 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 包存储库下载 Kubernetes 组件的 Linux 软件包。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。