# 第一步:安装依赖工具
sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# 第二步:配置内核参数(容器网络需要)
# 加载 overlay 和 br_netfilter 模块
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter

# 配置 sysctl 参数(永久生效)
sudo tee /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sudo sysctl --system  # 立即生效

# 第三步:安装 containerd
# 方式1:通过 apt 安装(推荐,适配 Ubuntu 24.04 官方源)
sudo apt install -y containerd

# 方式2:手动下载指定版本(如需特定版本,如 1.7.11)
# curl -L https://github.com/containerd/containerd/releases/download/v1.7.11/containerd-1.7.11-linux-amd64.tar.gz | sudo tar -C /usr/local -xzf -

# 第四步:生成 containerd 默认配置文件
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

# 第五步:修改配置(适配 K8s,关键步骤)
# 设置 sandbox_image 为 K8s 官方 pause 镜像(避免拉取失败)
sudo sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.k8s.io/pause:3.10"#g' /etc/containerd/config.toml

# 设置 SystemdCgroup 为 true(兼容 systemd 控制系统)
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

# 第六步:启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start containerd
sudo systemctl enable containerd

# 第七步:验证安装结果
echo "=== containerd 版本 ==="
containerd --version
echo "=== containerd 服务状态 ==="
sudo systemctl status containerd --no-pager

关键说明:

  1. 依赖与内核配置
    安装前需加载 overlay(容器存储驱动依赖)和 br_netfilter(网络转发依赖)模块,并配置内核参数确保网络正常。

  2. 配置文件修改原因

    • sandbox_image:指定 K8s 所需的 pause 镜像(与 K8s 1.28 兼容的 3.10 版本),避免默认镜像拉取失败。

    • SystemdCgroup = true:让 containerd 使用 systemd 作为 cgroup 驱动,与 K8s 的 kubelet 配置保持一致,避免资源管理冲突。

  3. 验证成功标志

    • containerd --version 输出版本信息(如 containerd github.com/containerd/containerd v1.7.xxxx)。

    • systemctl status containerd 显示 active (running)

  4. 与 K8s 集成
    后续初始化 K8s 集群时,需指定 containerd 端点:

    bash

    sudo kubeadm init --cri-socket unix:///run/containerd/containerd.sock ...
    

    安装依赖工具
    更新软件源
    确保系统软件包列表为最新:
    bash
    sudo apt update
    
    作用:同步软件源索引,获取最新的软件包信息。
    安装基础工具
    安装包含网络工具、证书管理等在内的基础依赖:
    bash
    sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
    
    作用:提供 HTTPS 下载、证书验证、curl 工具等必要组件。
    步骤 2:配置内核参数(容器网络必需)
    加载内核模块
    启用容器存储和网络所需的内核模块:
    bash
    sudo tee /etc/modules-load.d/containerd.conf <<EOF
    overlay
    br_netfilter
    EOF
    sudo modprobe overlay
    sudo modprobe br_netfilter
    
    作用:
    overlay:容器存储驱动(用于镜像分层)。
    br_netfilter:网络桥接支持(用于容器跨主机通信)。
    配置系统参数
    确保网络转发和桥接规则生效:
    bash
    sudo tee /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
    net.bridge.bridge-nf-call-iptables  = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.ipv4.ip_forward                 = 1
    EOF
    sudo sysctl --system
    
    作用:
    允许容器通过主机网络接口转发流量。
    确保桥接流量被 iptables 正确处理。
    步骤 3:安装 containerd 主程序
    通过 apt 安装(推荐)
    使用 Ubuntu 官方源安装最新稳定版:
    bash
    sudo apt install -y containerd
    
    作用:自动下载并安装 containerd 及其依赖(如 runc、libseccomp 等)。
    手动安装特定版本(可选)
    若需指定版本(如 1.7.11),可手动下载并解压:
    bash
    curl -L https://github.com/containerd/containerd/releases/download/v1.7.11/containerd-1.7.11-linux-amd64.tar.gz | sudo tar -C /usr/local -xzf -
    
    注意:需确保下载的二进制文件与系统架构(如 x86_64)匹配。
    步骤 4:生成并修改默认配置
    创建配置目录并生成默认文件
    bash
    sudo mkdir -p /etc/containerd
    containerd config default | sudo tee /etc/containerd/config.toml
    
    作用:生成包含默认参数的配置文件,供后续调整。
    修改关键配置项
    设置 K8s 兼容的 pause 镜像:
    bash
    sudo sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.k8s.io/pause:3.10"#g' /etc/containerd/config.toml
    
    原因:pause 镜像是 K8s 管理 Pod 的基础,需与 K8s 版本兼容(如 K8s 1.28 推荐使用 3.10)。
    启用 systemd cgroup 驱动:
    bash
    sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
    
    原因:与 K8s 的 kubelet 配置保持一致,确保资源管理正常。
    步骤 5:启动并验证服务
    重载 systemd 配置并启动服务
    bash
    sudo systemctl daemon-reload
    sudo systemctl start containerd
    sudo systemctl enable containerd
    
    作用:启动 containerd 服务并设置开机自启。
    验证安装结果
    检查版本:
    bash
    containerd --version
    
    预期输出:显示版本信息(如 containerd github.com/containerd/containerd v1.7.11)。
    检查服务状态:
    bash
    sudo systemctl status containerd --no-pager
    
    预期输出:显示 active (running),且无错误日志。
    测试容器运行(可选):
    bash
    sudo ctr run --rm docker.io/library/hello-world:latest hello