k8s containerd
为将 Kubernetes v1.26.3 从 Docker(cri-dockerd)迁移为 containerd,并自定义 containerd 的 runc 路径与数据目录,以下是完整操作步骤、配置说明、验证方法以及 crictl/containerd 常用维护命令。
🧱 原始 kubelet 配置
你当前的 kubelet 参数为:
KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd \
--container-runtime-endpoint=unix:///var/run/cri-dockerd.sock \
--pod-infra-container-image=registry.k8s.io/pause:3.9 \
--tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
需将 cri-dockerd 替换为 containerd,并配置额外要求。
✅ 总体目标
| 项目 | 描述 |
|---|---|
| 运行时切换 | 从 cri-dockerd 切换为 containerd |
| runc 路径 | 指定为 /opt/mytools/runc |
| containerd 数据目录 | 迁移至 /data/containerd/{root,state} |
| crictl | 使用 containerd |
| 配置验证 | socket、runtimeType、pod 运行等 |
📌 1. 安装 containerd + runc
🧩 安装 containerd(推荐用官方二进制)
wget https://github.com/containerd/containerd/releases/download/v1.7.13/containerd-1.7.13-linux-amd64.tar.gz
tar -xvf containerd-1.7.13-linux-amd64.tar.gz
sudo cp bin/* /usr/local/bin/
🧩 安装 runc 到指定目录 /opt/mytools/runc
wget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64
sudo mkdir -p /opt/mytools/
sudo mv runc.amd64 /opt/mytools/runc
sudo chmod +x /opt/mytools/runc
🛠️ 2. 配置 containerd
✅ 创建目录结构
sudo mkdir -p /data/containerd/{root,state,snapshot-overlayfs}
✅ 生成配置文件
containerd config default | sudo tee /etc/containerd/config.toml
✅ 修改 /etc/containerd/config.toml:
version = 2
# 自定义数据目录
root = "/data/containerd/root"
state = "/data/containerd/state"
[grpc]
address = "/run/containerd/containerd.sock"
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.k8s.io/pause:3.9"
[plugins."io.containerd.grpc.v1.cri".containerd]
snapshotter = "overlayfs"
default_runtime_name = "runc"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
BinaryName = "/opt/mytools/runc"
[plugins."io.containerd.grpc.v1.cri".cni]
bin_dir = "/opt/cni/bin"
conf_dir = "/etc/cni/net.d"
[plugins."io.containerd.snapshotter.v1.overlayfs"]
root_path = "/data/containerd/snapshot-overlayfs"
🔁 3. 重启 containerd 并验证 socket
✅ 重启服务
sudo systemctl daemon-reexec
sudo systemctl restart containerd
✅ 验证监听 socket 是否为 /run/containerd/containerd.sock
ss -lxnp | grep containerd.sock
输出应类似:
u_str LISTEN 0 4096 /run/containerd/containerd.sock 1234/containerd
⚙️ 4. 修改 kubelet 配置切换为 containerd
✅ 编辑配置文件(Ubuntu 为例)
sudo nano /etc/default/kubelet
替换原参数为:
KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd \
--container-runtime-endpoint=unix:///run/containerd/containerd.sock \
--pod-infra-container-image=registry.k8s.io/pause:3.9 \
--tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
✅ 重启 kubelet
sudo systemctl daemon-reexec
sudo systemctl restart kubelet
🧪 5. 配置并使用 crictl
✅ 安装 crictl
VERSION="v1.29.0"
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/${VERSION}/crictl-${VERSION}-linux-amd64.tar.gz
tar zxvf crictl-${VERSION}-linux-amd64.tar.gz
sudo mv crictl /usr/local/bin/
✅ 配置 /etc/crictl.yaml
sudo tee /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
✅ 验证 crictl 使用 containerd
crictl info | grep runtimeType
# 输出: "runtimeType": "io.containerd.runc.v2"
✅ 6. 验证 Kubernetes 使用 containerd 成功
kubectl get nodes -o wide
kubectl run test --image=busybox -- sleep 3600
kubectl get pods
kubectl describe pod test
🧰 7. containerd / crictl 常用维护命令
🔍 查看镜像
crictl images
📦 拉取镜像
crictl pull registry.k8s.io/pause:3.9
📦 查看容器
crictl ps -a
🔧 进入容器(使用 sandbox/container ID)
crictl exec -it <container-id> sh
🧹 删除容器和镜像
crictl rm -f $(crictl ps -a -q)
crictl rmi -f $(crictl images -q)
✅ 总结顺序(脚本化流程)
# 安装 containerd / runc / crictl
# 生成 containerd 配置文件,指定 root/state 和 runc 路径
# 启动 containerd,验证 socket
# 修改 kubelet 使用 containerd
# 配置 crictl 指向 containerd
# 验证 containerd 正常工作(crictl info、kubectl run)
是否需要我生成:
-
一键 shell 安装与配置脚本?
-
systemd override.conf文件用于 containerd 自定义启动路径? -
备份/迁移旧的 cri-dockerd 配置?
欢迎继续告知需求。
/data/containerd/
├── root/ # 存储镜像、元数据、容器元信息(containerd root)
├── state/ # 存储运行时 socket、pid 文件等(containerd state)
├── snapshot-overlayfs/ # overlayfs 的快照元数据(存储增量层)
/opt/mytools/runc # 指定 runc 路径
/etc/containerd/config.toml # 主配置文件
浙公网安备 33010602011771号