kubernetes环境从docker迁移到containerd

简介: kubernetes环境从docker迁移到containerd

1、实验环境

本实验共两台节点,xianchaomaster1是master,xianchaonode1是worker
kubernetes版本是v1.23.1
系统版本是 centos7.6
具体如下:

[root@xianchaomaster1 ~]# kubectl get nodes -owide
NAME STATUS   ROLES                  AGE   VERSION  INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
xianchaomaster1 Ready   control-plane,master   52d   v1.23.1  192.168.40.180   <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://20.10.16
xianchaonode1 Ready   <none>                52d   v1.23.1   192.168.40.181   <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://20.10.16
[root@xianchaomaster1 ~]# kubectl get pods
NAME          READY  STATUS    RESTARTS   AGE
wordpress-54fc87d546-gqvc2 1/1    Running   0          18d
wordpress-mysql-f59cd675f-xkwsp 1/1    Running   0          18d

2、迁移master

(1)对k8s控制节点xianchaomaster1进行drain

[root@xianchaomaster1 ~]# kubectl drain xianchaomaster1--delete-emptydir-data  --force --ignore-daemonsets

备注:

drain:驱逐节点

首先,驱逐node上的pod,其他节点重新创建,接着,将节点调为** SchedulingDisabled**

drain的参数

--force

当一些pod不是经ReplicationController, ReplicaSet, Job, DaemonSet 或者StatefulSet 管理的时候,就需要用--force来强制执行 (例如:kube-proxy)

--ignore-daemonsets

驱逐daemonset管理的pod

--delete-emptydir-data

如果有mount local volumn的pod,会强制驱逐pod

(2)关闭并卸载Docker

[root@xianchaomaster1 ~]# systemctl disable docker --now
[root@xianchaomaster1 ~]# yum remove docker-ce docker-ce-cli -y

(3)安装并配置containerd

[root@xianchaomaster1 ~]# yum install containerd.io cri-tools  -y
[root@xianchaomaster1 ~]# crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock

生成配置文件

[root@xianchaomaster1 ~]# containerd config default > /etc/containerd/config.toml

使用vim编辑器打开/etc/containerd/config.toml

第一步:搜素mirrors,把

改成:

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://rsbud4vc.mirror.aliyuncs.com"]

第二步:搜索sandbox,把

改成:sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"

第三步:搜索SystemdCgroup,把

改成:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
 SystemdCgroup = true

保存退出

(4)重启containerd服务

[root@xianchaomaster1 ~]# systemctl enable containerd ; systemctl restart containerd

3、配置并启动kubelet

设置kubelet启动参数

[root@xianchaomaster1 ~]# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"

重启kubelet服务

[root@xianchaomaster1 ~]# systemctl restart kubelet

4、对master节点进行uncordon

[root@xianchaomaster1 ~]# kubectl uncordon xianchaomaster1

5、验证是否把容器运行时由docker迁移到containerd

[root@xianchaomaster1 ~]# kubectl get nodes -owide
NAME STATUS   ROLES                  AGE   VERSION  INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
xianchaomaster1 Ready   control-plane,master   52d   v1.23.1  192.168.40.180   <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   containerd://1.6.6
xianchaonode1 Ready   <none>                52d   v1.23.1   192.168.40.181   <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://20.10.16

4、迁移work节点

(1)对k8s工作节点xianchaonode1进行drain

[root@xianchaomaster1 ~]# kubectl drain xianchaonode1 --delete-emptydir-data --force --ignore-daemonsets

(2)关闭并卸载Docker

[root@xianchaonode1 ~]# systemctl disable docker --now
[root@ xianchaonode1 ~]# yum remove docker-ce docker-ce-cli -y

(3)安装并配置containerd

[root@ xianchaonode1 ~]# yum install containerd.io cri-tools  -y
[root@ xianchaonode1 ~]# crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock

生成配置文件

[root@ xianchaonode1 ~]# containerd config default > /etc/containerd/config.toml

使用vim编辑器打开/etc/containerd/config.toml

第一步:搜素mirrors,把

改成:

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://rsbud4vc.mirror.aliyuncs.com"]

第二步:搜索sandbox,把

改成:sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"

第三步:搜索SystemdCgroup,把

改成:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
 SystemdCgroup = true

保存退出

(4)重启containerd服务

[root@ xianchaonode1 ~]# systemctl enable containerd ; systemctl restart containerd

3、配置并启动kubelet

设置kubelet启动参数

[root@ xianchaonode1 ~]# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"

重启kubelet服务

[root@ xianchaonode1 ~]# systemctl restart kubelet

4、对master节点进行uncordon

[root@ xianchaonode1 ~]# kubectl uncordon xianchaonode1

5、验证是否把容器运行时由docker迁移到containerd

[root@xianchaomaster1 ~]# kubectl get nodes -owide
NAME STATUS   ROLES                  AGE   VERSION  INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
xianchaomaster1 Ready   control-plane,master   52d   v1.23.1  192.168.40.180   <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   containerd://1.6.6
xianchaonode1 Ready   <none>                52d   v1.23.1   192.168.40.181   <none>        CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   containerd://1.6.6
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
1天前
|
Kubernetes Ubuntu 开发工具
迁移Docker目录
迁移Docker目录
11 0
|
1天前
|
JavaScript 前端开发 测试技术
Docker环境下部署Ghost开源内容管理系统
【5月更文挑战第9天】Docker环境下部署Ghost开源内容管理系统
9 0
|
1天前
|
网络安全 Docker 容器
测试开发环境下centos7.9下安装docker的minio
测试开发环境下centos7.9下安装docker的minio
14 1
|
1天前
|
Shell 数据安全/隐私保护 Docker
docker安装anaconda3 python环境
docker安装anaconda3 python环境
11 0
|
1天前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境
|
1天前
|
Kubernetes Java 调度
Java容器技术:Docker与Kubernetes
Java容器技术:Docker与Kubernetes
17 0
|
1天前
|
算法 计算机视觉 Docker
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
|
1天前
|
Kubernetes 负载均衡 调度
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
【5月更文挑战第8天】Docker Swarm 和 Kubernetes 是两大容器编排工具,各有优势。Docker Swarm 简单易用,适合小到中型规模,与 Docker 生态系统集成紧密;而 Kubernetes 功能强大,扩展性好,适用于大规模、复杂场景。选择时需考虑团队技术能力、应用需求及现有技术栈。Kubernetes 学习曲线较陡,Docker Swarm 则较平缓。
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
|
1天前
|
Kubernetes Cloud Native 持续交付
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
【5月更文挑战第7天】本文探讨了Docker和Kubernetes如何协同构建和管理云原生应用。Docker提供容器化技术,Kubernetes则负责容器的部署和管理。两者结合实现快速部署、自动扩展和高可用性。通过编写Dockerfile创建镜像,然后在Kubernetes中定义部署和服务进行应用暴露。实战部分展示了如何部署简单Web应用,包括编写Dockerfile、构建镜像、创建Kubernetes部署配置以及暴露服务。Kubernetes还具备自动扩展、滚动更新和健康检查等高级特性,为云原生应用管理提供全面支持。
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
|
1天前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件