​K8S运行时切换:从Docker到Containerd的实战切换指南

随着容器技术的发展,越来越多的企业选择使用Kubernetes来管理容器化应用。默认情况下,Kubernetes支持多种容器运行时,其中包括Docker。然而,随着时间的推移,社区逐渐倾向于更轻量、更高效的解决方案,如Containerd。Containerd是Cloud Native Computing Foundation (CNCF) 的一个毕业项目,它提供了与Docker相似的功能,但其设计更加简化,专注于容器运行时的核心职责。本文将指导您完成从Docker到Containerd的转换过程,以实现更优的资源利用率和服务稳定性。

01

切换的原因

  • 性能提升:Containerd通过减少抽象层提升了整体性能。

  • 安全性增强:它提供了更直接的系统调用,减少了潜在的安全风险。

  • 简化架构:Containerd拥有更简洁的设计,使得维护和故障排除更为容易。

  • 官方支持趋势:Kubernetes官方团队逐步转向对Containerd的支持。

  • cadvisor采集不到container级别的资源使用情况。

02

准备工作

  1. Kubernetes版本至少为1.20+,因为较新版本已经弃用了Docker作为默认容器运行时。

  2. 备份现有配置和数据,以防迁移过程中出现问题。

  3. 确认所有节点上的操作系统兼容Containerd。

03

迁移步骤

0、前置步骤

# 腾空节点
$ kubectl drain --ignore-daemonsets k8s-node02      
node/master03 cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-fbzqw, kube-system/kube-proxy-95hst
node/master03 drained

# 停止相关服务
$ systemctl stop kubelet
$ systemctl stop containerd
$ systemctl disable docker --now

1、部署containerd服务

   请看往期文章 生产环境下的Containerd安装与优化指南

2、拷贝其他节点的镜像配置

$ scp -r /etc/containerd/certs.d 172.139.20.75:/tmp
$ sudo mv /tmp/certs.d /etc/containerd/
$ sudo crictl pull 172.139.20.170:5000/library/pause:3.9

3、修改kubelet参数

$ vim /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--container-runtime-endpoint=unix:///run/containerd/containerd.sock --pod-infra-container-image=172.139.20.170:5000/library/pause:3.9"

Tip:修改container-runtime-endpoint参数

4、重启kubelet服务

$ systemctl start kubelet

5、恢复可调度

$ kubectl uncordon k8s-node02

验证

1、查看节点runtime

$ kubectl get nodes k8s-node02 -owide
N
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bryan Ding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值