当前位置: 首页 > news >正文

从 Docker 到 Containerd:Kubernetes 容器运行时迁移实战指南

一、背景

Kubernetes 自 v1.24 起移除了 dockershim,不再原生支持 Docker Engine,用户需迁移至受支持的 CRI 兼容运行时,如:

  • Containerd(推荐,高性能、轻量级)

  • CRI-O(专为 Kubernetes 设计)

  • Docker Engine + cri-dockerd(兼容方案,但需额外维护)

二、迁移步骤

1.前置准备

当前是3个node节点,都是docker运行时,现在驱逐node-3节点

图片

#移除节点
[root@master-1 ~]# kubectl drain node-3 --ignore-daemonsets#停止相关服务
[root@node-3 ~]# systemctl stop kubelet
[root@node-3 ~]# systemctl stop docker
[root@node-3 ~]# systemctl disable docker --now
[root@node-3 ~]# systemctl stop kube-proxy

2.部署containerd服务

Containerd部署指南

3.修改kubelet参数

加上containerd运行时参数--container-runtime=remote  --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock  

[root@node-3 ~]# cat /usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/kubernetes/kubernetes
After=containerd.service
Requires=containerd.service[Service]
WorkingDirectory=/var/lib/kubelet
ExecStart=/usr/local/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/cfg/kubelet-bootstrap.kubeconfig --cert-dir=/etc/kubernetes/ssl --kubeconfig=/etc/kubernetes/cfg/kubelet.config --config=/etc/kubernetes/cfg/kubelet.json --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.2   --alsologtostderr=true --logtostderr=false --log-dir=/var/log/kubernetes --container-runtime=remote --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock --v=2 
Restart=on-failure
RestartSec=5[Install]
WantedBy=multi-user.target

4.启动各个服务

#启动服务
[root@node-3 ~]# systemctl daemon-reload
[root@node-3 ~]# systemctl restart kubelet
[root@node-3 ~]# systemctl start kube-proxy[root@node-3 ~]# systemctl status kubelet
[root@node-3 ~]# systemctl status kube-proxy

5.查看node-3节点状态

#目前节点3已经准备好啦,处于不可调度状态
[root@master-1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
node-1   Ready <none> 71d v1.23.1
node-2   Ready <none> 71d v1.23.1
node-3   Ready,SchedulingDisabled <none> 24h v1.23.1

6.将node节点恢复为可调度

#恢复可调度状态
[root@master-1 ~]# kubectl uncordon node-3
node/node-3 uncordoned

7.查看节点运行时

#发现运行时已经切换成功啦
[root@master-1 ~]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node-3   Ready <none> 24h v1.23.1   192.168.91.23   <none> CentOS Linux 7 (Core) 3.10.0-862.el7.x86_64 containerd://1.6.4

8.测试业务

部署一个nginx业务

[root@master-1 ~]# cat nginx.yaml 
apiVersion: apps/v1
kind: Deployment 
metadata:name: nginx-demo
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresent[root@master-1 ~]# kubectl apply -f nginx.yaml
[root@master-1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-demo-68984b745f-5k5ts 1/1     Running 0          7m14s 10.244.1.2     node-2   <none> <none>
nginx-demo-68984b745f-9pmwk 1/1     Running 0          29m   10.244.2.56    node-3   <none> <none>
nginx-demo-68984b745f-bp8x2 1/1     Running 0          7m14s 10.244.0.2     node-1   <none> <none>

以上效果说明我们集群已从 Docker 全面切换至 Containerd,运行状态正常。

相关文章:

  • Alita:通过 MCP 实现自主进化的通用 AI 代理
  • 星敏感器:卫星姿态测量的“星空导航仪”
  • 三极管和MOS的三种状态命名的区别
  • 2024-2025-2-《移动机器人设计与实践》-复习资料-8……
  • 小家电外贸出口新利器:WD8001低成本风扇智能控制方案全解析
  • 视频转换新选择:XMedia Recode v3.6.1.2,绿色便携版来袭
  • MySQL数据一致性守护者:pt-table-checksum原理与实战全解析
  • FTXUI::Screen 模块
  • 详解开漏输出和推挽输出
  • 小白的进阶之路系列之十二----人工智能从初步到精通pytorch综合运用的讲解第五部分
  • one-hot编码VS对象嵌入表示
  • 解锁电商新势能:商城系统自动 SaaS 多开功能深度解析
  • LangChain学习系列之LangChain4j介绍
  • 活动选择问题一文详解
  • c# 显示正在运行的线程数
  • PCI DSS培训记录
  • redhat变更旧nas挂在参数不生效
  • 算法题(160):64位整数除法
  • 编译器对齐机制与硬件浮点计算详解
  • 19-项目部署(Linux)
  • 网站开发完了备案/seo图片优化的方法
  • 网页设计师是什么专业/sem优化技巧
  • 青岛的网站建设公司/网络营销形式
  • 手机wordpress写作/优化设计官方电子版
  • wap手机网站尺寸/重庆网页搜索排名提升
  • 做网站的用处/衡水seo排名