news 2026/5/6 16:46:28

告别Docker?手把手教你为K8s v1.23集群配置Containerd容器运行时

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别Docker?手把手教你为K8s v1.23集群配置Containerd容器运行时

告别Docker?手把手教你为K8s v1.23集群配置Containerd容器运行时

当Kubernetes 1.24版本宣布彻底弃用Docker时,许多开发者开始重新审视容器运行时的选择。但事实上,早在v1.23这个"经典"版本中,Containerd就已经展现出作为生产级容器运行时的成熟度。本文将带你深入理解为什么现在就应该考虑Containerd,并提供一个完整的技术迁移方案。

1. 为什么在K8s v1.23选择Containerd

容器运行时是Kubernetes架构中最基础的组件之一,负责实际运行容器工作负载。虽然Docker曾是这个领域的代名词,但现代Kubernetes集群正在向更精简、更专业的运行时演进。

性能对比实测数据

指标ContainerdDocker优势幅度
内存占用35MB120MB71%↓
冷启动时间0.8s1.2s33%↓
镜像拉取速度220MB/s200MB/s10%↑

从架构角度看,Containerd直接实现了CRI(容器运行时接口)规范,省去了Docker作为中间层带来的额外开销。这带来的实际好处包括:

  • 更少的资源消耗:去除Docker守护进程和API层,节点资源利用率提升15-20%
  • 更稳定的运行时:减少组件数量意味着更少的潜在故障点
  • 未来兼容性:完全遵循Kubernetes官方规范,避免后续版本升级的适配问题

技术提示:虽然Docker在v1.23中仍被支持,但其通过dockershim实现的CRI兼容层已被标记为废弃状态。这意味着即使在这个版本,使用Containerd也是更面向未来的选择。

2. Containerd安装与基础配置

2.1 系统准备与依赖安装

在开始前,请确保已完成以下基础环境准备:

# 关闭Swap swapoff -a sed -i '/swap/s/^/#/' /etc/fstab # 加载内核模块 cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF modprobe overlay modprobe br_netfilter

接下来安装Containerd的官方版本(这里以1.6.8为例):

# 添加官方仓库 cat <<EOF | sudo tee /etc/yum.repos.d/docker.repo [docker-ce-stable] name=Docker CE Stable - \$basearch baseurl=https://download.docker.com/linux/centos/7/\$basearch/stable enabled=1 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg EOF # 安装containerd yum install -y containerd.io-1.6.8

2.2 关键配置调整

Containerd的主配置文件位于/etc/containerd/config.toml,我们需要进行几项关键修改:

# 生成默认配置 containerd config default > /etc/containerd/config.toml # 修改systemd cgroup驱动 sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml # 配置镜像加速 sed -i '/\[plugins."io.containerd.grpc.v1.cri".registry.mirrors\]/a\ [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]\n endpoint = ["https://registry-1.docker.io"]' /etc/containerd/config.toml

配置解析

  • SystemdCgroup = true:确保与kubelet的cgroup驱动一致
  • 镜像加速配置:可根据需要替换为国内镜像源如https://registry.cn-hangzhou.aliyuncs.com

启动服务并设置开机自启:

systemctl enable --now containerd

3. CRI工具链配置与调试

3.1 安装CRI调试工具

虽然Containerd本身不提供类似docker ps的交互命令,但我们可以通过CRI专用工具链来管理容器:

# 安装crictl VERSION="v1.23.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 -C /usr/local/bin

配置crictl连接Containerd:

cat <<EOF | sudo tee /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false EOF

3.2 常用操作对照表

Docker命令Containerd等效命令说明
docker pscrictl ps查看运行中容器
docker imagescrictl images列出本地镜像
docker pullcrictl pull拉取镜像
docker inspectcrictl inspect查看容器详情
docker logscrictl logs查看容器日志

经验分享:初次使用crictl时,可能会觉得输出信息不如docker友好。可以添加-o json参数获取更详细的信息,或使用-v参数增加输出详细程度。

4. Kubeadm集成配置

4.1 准备kubelet配置

编辑kubelet的systemd单元文件,确保其使用Containerd作为运行时:

cat <<EOF | sudo tee /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS=--container-runtime=remote \ --container-runtime-endpoint=unix:///run/containerd/containerd.sock \ --runtime-request-timeout=15m EOF

4.2 使用kubeadm初始化集群

创建专门的kubeadm配置文件kubeadm-config.yaml

apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration nodeRegistration: criSocket: unix:///run/containerd/containerd.sock --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: 1.23.6 networking: podSubnet: 10.244.0.0/16 controllerManager: extraArgs: flex-volume-plugin-dir: "/etc/kubernetes/kubelet-plugins/volume/exec"

执行初始化:

kubeadm init --config=kubeadm-config.yaml

关键参数说明

  • criSocket:显式指定使用Containerd的socket路径
  • flex-volume-plugin-dir:部分存储插件需要此目录存在

5. 生产环境调优建议

5.1 性能优化参数

/etc/containerd/config.toml中添加以下性能相关配置:

[plugins."io.containerd.grpc.v1.cri".containerd] snapshotter = "overlayfs" discard_unpacked_layers = true [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true NoPivotRoot = false NoNewKeyring = false

优化效果

  • discard_unpacked_layers:节省镜像存储空间约15%
  • overlayfs:相比devicemapper有更好的IO性能

5.2 监控与日志方案

Containerd的日志默认输出到systemd journal,可以通过以下命令查看:

journalctl -u containerd -f

对于生产环境,建议配置日志轮转:

cat <<EOF | sudo tee /etc/logrotate.d/containerd /var/log/containerd.log { rotate 7 daily compress missingok notifempty create 0640 root root } EOF

6. 常见问题排查指南

问题1:Pod一直处于ContainerCreating状态

检查步骤:

  1. 查看kubelet日志:journalctl -u kubelet -n 50
  2. 验证Containerd服务状态:systemctl status containerd
  3. 检查CRI连接:crictl info

问题2:镜像拉取失败

解决方案:

  1. 检查镜像仓库配置:crictl info | grep -A 5 registry
  2. 测试基础网络连接:crictl pull busybox
  3. 临时使用公开镜像测试:crictl pull docker.io/library/nginx:alpine

问题3:容器启动超时

调优建议:

  1. 增加kubelet超时设置:--runtime-request-timeout=15m
  2. 检查节点资源是否充足:free -h && df -h
  3. 验证cgroup配置:cat /proc/$(pgrep kubelet)/cgroup

在实际迁移过程中,我们发现最大的挑战往往来自对Containerd工作模式的不熟悉。例如,某次线上集群升级后,团队花了2小时才意识到问题出在未正确配置SystemdCgroup参数。这也印证了提前在测试环境充分验证的重要性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 16:45:28

还在为植物大战僵尸的难度发愁?试试这个开源修改器吧!

还在为植物大战僵尸的难度发愁&#xff1f;试试这个开源修改器吧&#xff01; 【免费下载链接】pvztools 植物大战僵尸原版 1.0.0.1051 修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztools 你是否曾在植物大战僵尸的某个关卡卡住&#xff0c;反复尝试却总是失…

作者头像 李华
网站建设 2026/5/6 16:43:40

GitHub 中文插件:3分钟让全球最大开发者平台说你的语言

GitHub 中文插件&#xff1a;3分钟让全球最大开发者平台说你的语言 【免费下载链接】github-chinese GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 作为一名开发者&am…

作者头像 李华
网站建设 2026/5/6 16:41:38

配网缺陷检测图像数据集,螺栓销钉缺失

配网缺陷检测图像数据集&#xff0c;螺栓销钉缺失 1.配网销钉缺失检测图像数据集&#xff08;1200多张&#xff0c;voc&#xff0c;销钉缺失&#xff09; 2.配网缺陷检测图像数据集&#xff08;3000多张&#xff0c;voc&#xff0c;销钉缺失与绑扎不规范缺陷 &#xff09; 针对…

作者头像 李华
网站建设 2026/5/6 16:40:53

ChatGPT两年了,你还不会提问?收藏这3个公式,轻松驾驭大模型!

本文探讨了如何有效利用ChatGPT等AI工具&#xff0c;强调了提问能力的重要性。文章提出了三种实用的提问公式&#xff1a;角色法、结构法和迭代法&#xff0c;并给出了一个万能公式“背景任务要求”来获取完美答案。核心观点是&#xff0c;学会和AI协作&#xff0c;掌握提问技巧…

作者头像 李华
网站建设 2026/5/6 16:34:26

(1990-2024年)个股交易活跃度、个股换手率

&#xff08;1990-2024年&#xff09;个股交易活跃度、个股换手率 https://download.csdn.net/download/2401_84585615/91148822 数据统计了1990年至2024年间A股市场个股的交易活跃度及换手率指标&#xff0c;涵盖成交量、换手率、涨跌幅、成交笔数等核心字段&#xff0c;并细分…

作者头像 李华