CRI-O 正迁移至 pkgs.k8s.io

作者:Sascha Grunert

译者:Wilson Wu (DaoCloud)

Kubernetes 社区最近宣布旧的软件包仓库已被冻结, 现在这些软件包将被迁移到由 OpenBuildService(OBS) 提供支持的社区自治软件包仓库中。 很久以来,CRI-O 一直在利用 OBS 进行软件包构建, 但到目前为止,所有打包工作都是手动完成的。

CRI-O 社区非常喜欢 Kubernetes,这意味着他们很高兴地宣布:

所有未来的 CRI-O 包都将作为在 pkgs.k8s.io 上托管的官方支持的 Kubernetes 基础设施的一部分提供!

现有软件包将进入一个弃用阶段,目前正在 CRI-O 社区中讨论。 新的基础设施将仅支持 CRI-O >= v1.28.2 的版本以及比 release-1.28 新的版本分支。

如何使用新软件包

与 Kubernetes 社区一样,CRI-O 提供 debrpm 软件包作为 OBS 中专用子项目的一部分, 被称为 isv:kubernetes:addons:cri-o。 这个项目是一个集合,提供 stable(针对 CRI-O 标记)以及 prerelease(针对 CRI-O release-1.ymain 分支)版本的软件包。

稳定版本:

预发布版本:

v1.29 仓库中尚无可用的稳定版本,因为 v1.29.0 将于 12 月发布。 CRI-O 社区也支持早于 release-1.28 的版本分支, 因为已经有 CI 需求合并到 main 中,只有通过适当的努力才能向后移植到 release-1.28

例如,如果最终用户想要安装 CRI-O main 分支的最新可用版本, 那么他们可以按照与 Kubernetes 相同的方式添加仓库。

基于 rpm 的发行版

对于基于 rpm 的发行版,您可以以 root 用户身份运行以下命令来将 CRI-O 与 Kubernetes 一起安装:

添加 Kubernetes 仓库

cat <<EOF | 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
EOF

添加 CRI-O 仓库

cat <<EOF | tee /etc/yum.repos.d/cri-o.repo
[cri-o]
name=CRI-O
baseurl=https://pkgs.k8s.io/addons:/cri-o:/prerelease:/main/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/addons:/cri-o:/prerelease:/main/rpm/repodata/repomd.xml.key
EOF

安装官方包依赖

dnf install -y \
    conntrack \
    container-selinux \
    ebtables \
    ethtool \
    iptables \
    socat

从添加的仓库中安装软件包

dnf install -y --repo cri-o --repo kubernetes \
    cri-o \
    kubeadm \
    kubectl \
    kubelet

基于 deb 的发行版

对于基于 deb 的发行版,您可以以 root 用户身份运行以下命令:

安装用于添加仓库的依赖项

apt-get update
apt-get install -y software-properties-common curl

添加 Kubernetes 仓库

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key |
    gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" |
    tee /etc/apt/sources.list.d/kubernetes.list

添加 CRI-O 仓库

curl -fsSL https://pkgs.k8s.io/addons:/cri-o:/prerelease:/main/deb/Release.key |
    gpg --dearmor -o /etc/apt/keyrings/cri-o-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/cri-o-apt-keyring.gpg] https://pkgs.k8s.io/addons:/cri-o:/prerelease:/main/deb/ /" |
    tee /etc/apt/sources.list.d/cri-o.list

安装软件包

apt-get update
apt-get install -y cri-o kubelet kubeadm kubectl

启动 CRI-O

systemctl start crio.service

如果使用的是另一个包序列,CRI-O 包路径中项目的 prerelease:/main 前缀可以替换为 stable:/v1.28stable:/v1.29prerelease:/v1.28prerelease :/v1.29

你可以使用 kubeadm init 命令来引导集群, 该命令会自动检测后台正在运行 CRI-O。还有适用于 Fedora 38 以及 Ubuntu 22.04Vagrantfile 示例,可在使用 kubeadm 的场景中测试下载的软件包。

它是如何工作的

与这些包相关的所有内容都位于新的 CRI-O 打包仓库中。 它包含 Daily Reconciliation GitHub 工作流, 支持所有发布分支以及 CRI-O 标签。 OBS 工作流程中的测试管道确保包在发布之前可以被正确安装和使用。 所有包的暂存和发布都是在 Kubernetes 发布工具箱(krel)的帮助下完成的, 这一工具箱也被用于官方 Kubernetes debrpm 软件包。

包构建的输入每天都会被动态调整,并使用 CRI-O 的静态二进制包。 这些包是基于 CRI-O CI 中的每次提交来构建和签名的, 并且包含 CRI-O 在特定架构上运行所需的所有内容。静态构建是可重复的, 由 nixpkgs 提供支持, 并且仅适用于 x86_64aarch64 以及 ppc64le 架构。

CRI-O 维护者将很乐意听取有关新软件包工作情况的任何反馈或建议! 感谢您阅读本文,请随时通过 Kubernetes Slack 频道 #crio 联系维护人员或在打包仓库中创建 Issue。