如何在 Ubuntu 22.04 上安装 CRI-O 容器运行时如何在 Ubuntu 22.04 上安装 CRI-O 容器运行时如何在 Ubuntu 22.04 上安装 CRI-O 容器运行时如何在 Ubuntu 22.04 上安装 CRI-O 容器运行时
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 22.04 上安装 CRI-O 容器运行时

CRI-O 是 Docker for Kubernetes 的轻量级容器运行时替代方案。它是 Kubernetes CRI(容器运行时接口)的实现,并符合 OCI 运行时(开放容器计划)。 CRI-O 允许 Kubernetes 直接执行容器,无需任何额外的工具或对代码进行调整。

CRI-O 支持多种镜像格式,包括 Docker 镜像格式。还提供管理容器镜像的功能,例如管理镜像层、覆盖文件系统、管理容器进程生命周期、容器的监控和日志记录,还提供资源隔离。

本教程将指导您在 Ubuntu 22.04 服务器上安装 CRI-O 容器运行时。这还包括如何使用 CRI-O 设置 CNI 插件,以及 \cri-tools\ 管理 Pod 和容器的基本用法。

先决条件

在开始之前,您必须满足以下要求:

  • Ubuntu 22.04 服务器 - 本指南使用 Ubuntu 服务器,主机名为“server-ubuntu”,服务器 IP 地址为“192.168.5.10”。
  • 具有根/管理员权限的非根用户。

安装 CRI-O 容器运行时

CRI-O 可以通过不同的方式安装,通过 APT 命令安装或从源构建和安装 CRI-O。在此示例中,您将通过第三方存储库安装 CRI-O Container Runtime。

在开始安装之前,运行以下命令来设置环境变量“$OS\”和“$CRIO_VERSION\”。对于此示例,我们将为 Ubuntu 22.04 安装 CRI-O v1.24.0。

export OS=xUbuntu_22.04
export CRIO_VERSION=1.24

现在运行以下命令为 Ubuntu 22.04 服务器添加 CRI-O 存储库。

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list

使用以下命令为 CRI-O 存储库添加 GPG 密钥。

curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add -

现在更新您的 Ubuntu 存储库并刷新包索引。您应该会看到 CRI-O 存储库已添加到您的包索引列表中。

sudo apt update

之后,使用以下命令检查 CRI-O 包版本。如您所见,您将安装最新版本的 CRI-O 软件包 v1.24。

sudo apt info cri-o

现在使用下面的 apt 命令安装 CRI-O 容器运行时。输入Y确认安装并按ENTER继续,安装将开始。

sudo apt install cri-o cri-o-runc

安装完成后,启动 CRI-O 服务并使用下面的 \systemctl\ 命令启用它。

sudo systemctl start crio
sudo systemctl enable crio

最后,使用以下命令检查并验证 CRI-O 服务。您应该会看到 CRI-O 服务已启用并将在系统启动时自动运行。而CRI-O服务的当前状态是运行。

sudo systemctl status crio

安装 CNI(容器网络接口)插件

CRI-O 容器运行时需要 CNI(容器网络接口)。 CNI 插件允许您在容器和 Pod 上设置网络。您将从官方 ubuntu 存储库安装 CNI 插件,并使用 CRI-O 容器运行时对其进行设置。

软件包\containernetworking-plugins\ 主要在 Linux 发行版上可用。要安装它,请运行下面的 apt 命令,安装将开始。

sudo apt install containernetworking-plugins

安装完成后,使用以下命令编辑 CRI-O 配置文件“/etc/crio/crio.conf”。

sudo nano /etc/crio/crio.conf

在“[crio.network]”部分,取消注释“network_dir”和“plugin_dirs”选项。另外,请务必将 CNI 插件目录\/usr/lib/cni/\ 添加到\plugin_dirs\ 选项中。

# The crio.network table containers settings pertaining to the management of
# CNI plugins.
[crio.network]

# The default CNI network name to be selected. If not set or "", then
# CRI-O will pick-up the first one found in network_dir.
# cni_default_network = ""

# Path to the directory where CNI configuration files are located.
network_dir = "/etc/cni/net.d/"

# Paths to directories where CNI plugin binaries are located.
plugin_dirs = [
        "/opt/cni/bin/",
        "/usr/lib/cni/",
]

完成后,保存并关闭文件。

接下来,删除默认网桥 CNI 配置\/etc/cni/net.d/100-crio-bridge.conf\。然后,将新的网桥 CNI 配置下载到 \/etc/cni/net.d/11-crio-ipv4-bridge.conf\。

新的网桥 CNI 配置将为 Pod 和容器仅启用 IPv4。

rm -f /etc/cni/net.d/100-crio-bridge.conf
sudo curl -fsSLo /etc/cni/net.d/11-crio-ipv4-bridge.conf https://raw.githubusercontent.com/cri-o/cri-o/main/contrib/cni/11-crio-ipv4-bridge.conf

现在重新启动 CRI-O 服务以将新更改应用于 CNI 插件设置。

sudo systemctl restart crio

最后,使用以下命令再次检查并验证 CRI-O 服务。您应该看到 CRI-O 服务正在使用新的网桥 CNI 配置运行。

sudo systemctl status crio

安装 CRI-Tools 包

您已经完成了 CRI-O 容器运行时的安装,现在它使用正确的 CNI 插件运行。现在您将安装 \cri-tools\ 包,其中包含可用于与 CRI-O 容器运行时交互的命令行实用程序 \crictl\。

\cri-tools\ 可与多个容器运行时一起使用,例如 containerd、dockershim、CRI-O 和 cri-dockerd。

运行下面的 apt 命令来安装 \cri-tools\ 包。安装将自动开始。

sudo apt install cri-tools

安装完成后,运行下面的“crictl”命令查看当前的运行时版本。您会看到您当前使用的容器运行时是 CRI-O v1.24。

crictl version

接下来,运行下面的“crictl”命令来检查当前容器运行时和 CNI 网络插件的状态。您应该会看到 CRI-O 容器运行时为“RuntimeReady\”,CNI 插件为“NetworkReady\”。

crictl info

crictl 命令为您的 shell 提供自动完成功能,可以手动生成。在下面运行以下 crictl 命令,将 Bash shell 的命令完成生成到 \/etc/bash_completion.d/crictl\。然后,通过获取 ~/.bashrc 配置文件重新加载当前 Bash 会话。

crictl completion > /etc/bash_completion.d/crictl
source ~/.bashrc

现在运行 \crictl\ 命令并按 TAB 键查看所有可用的命令补全。

crictl TAB

使用 crictl 创建 Pod 和容器

现在 cri-tools 已安装在您的系统上,是时候使用 \crictl\ 命令创建 Pod 沙箱和容器了。在这个例子中,我们将为 Nginx 容器创建一个 Pod。

使用以下命令创建一个新目录 \~/demo\。

mkdir ~/demo/

现在运行以下命令来创建一个新的 JSON 配置文件并为容器定义 Pod 沙箱。

cat <<EOF | tee ~/demo/sandbox_nginx.json
{
    "metadata": {
        "name": "nginx-sandbox",
        "namespace": "default",
        "attempt": 1,
        "uid": "hdishd83djaidwnduwk28bcsb"
    },
    "linux": {
    },
    "log_directory": "/tmp"
}
EOF

使用下面的“crictl”命令运行 Pod 沙箱。您应该会看到 Pod 的随机字符串。

sudo crictl runp ~/demo/sandbox_nginx.json

使用以下命令检查并验证正在运行的 Pod。您应该看到 Pod 沙盒“nginx-sandbox\”,Pod id 为“7b0618800e251\”,状态为“Ready\” ”。

sudo crictl pods

要检查 Pod 的详细信息,请运行下面的“crictl”命令,并确保更改 Pod id。在此示例中,\nginx_sandbox\ pod 的 IP 地址为\10.85.0.3\。

sudo crictl inspectp --output table 7b0618800e251

现在 Pod 沙箱已准备就绪,是时候创建 Nginx 容器了。但首先,您将下载 Nginx 映像。

在下面运行以下 crictl 命令以下载 Nginx 映像。然后,检查并验证可用图像列表。

sudo crictl pull nginx
sudo crictl images

现在运行以下命令创建一个新的 JSON 文件来定义 Nginx 容器。

cat <<EOF | tee ~/demo/container_nginx.json
{
  "metadata": {
      "name": "nginx"
    },
  "image":{
      "image": "nginx"
    },
  "log_path":"nginx.0.log",
  "linux": {
  }
}
EOF

使用下面的 crictl 命令为 Pod 沙箱“7b0618800e251\”创建一个新容器。您应该会看到新 Nginx 容器 ID 的随机字符串。

sudo crictl create 7b0618800e251 ~/demo/container_nginx.json ~/demo/sandbox_nginx.json

使用以下命令启动 Nginx 容器,并确保更改容器 ID。

sudo crictl start 1100498979ee5d3a9cbdb7b8b8f18529a01298f2bb57f7fcd01f54dd5a0f8746

之后,使用以下命令检查并验证正在运行的容器。您应该看到 Nginx 容器在 Pod \7b0618800e251\ 中\Running\。

sudo crictl ps

最后,您可以通过 Pod 沙箱“nginx_sandbox”的 IP 地址访问 Nginx 容器。对\nginx_sandbox\ IP 地址\10.85.0.3\ 运行curl 命令,您将看到您的Nginx 容器的默认index.html 页面。

curl 10.85.0.3

结论

您现在已经在 Ubuntu 22.04 服务器上完成了带有 CNI 插件的 CRI-O 容器运行时的安装和配置。您现在可以将其用作 Kubernetes 集群的容器运行时。您还了解了使用 CRI-O 容器运行时创建 Pod 和容器的“crictl”命令的基本用法。

©2015-2025 艾丽卡 support@alaica.com