将Kubernetes集群的CRI实现从cri-docker更改为containerd

简介: 本文记录了将Kubernetes集群的CRI实现从cri-docker更改为containerd的过程,包括cri-docker相关的卸载和containerd的安装配置。

将Kubernetes集群的CRI实现从cri-docker更改为containerd

1. 系统配置

虚拟机版本:VMware Workstation Pro 17

虚拟机镜像版本:CentOS Linux release 7.9.2009 (Core)

Docker版本:ce-20.10.11

Kubernetes版本:1.24.16

2. 更改容器进行时的背景

containerd是Kubernetes官方推荐使用的容器运行时(Container Running),同时,阿里云的Kubernetes1.24版本以上集群只支持containerd,所以将之前的cri-docker更改为containerd。

3. 更改过程

对于正在工作的节点,可以使用腾空命令禁止调度该节点:

# 在主节点使用
# 主节点一般不运行pod,所以主要用来腾空工作节点
kubectl cordon <nodeName>
kubectl drain <nodeName> --ignore-daemonsets

# 升级完成后,解除腾空
kubectl uncordon <nodeName>

卸载Docker相关组件以及配置:

systemctl stop docker

# 避免旧配置影响新的CR,所以这里将containerd也进行删除
yum remove -y docker-ce docker-ce-cli containerd.io

删除cri-docker相关组件以及配置:

systemctl stop cri-docker

rm -rf /usr/bin/cri-dockerd
rm -rf /usr/lib/systemd/system/cri-docker.socket
rm -rf /usr/lib/systemd/system/cri-docker.service
rm -rf /run/cri-dockerd.sock
rm -rf /run/docker.sock

# 刷新
systemctl daemon-reload

安装containerd.io并初始化配置:

# 直接yum安装
yum install -y containerd.io
# 创建默认配置文件
containerd config default > /etc/containerd/config.toml
# 使用阿里云镜像地址
sed -i "s#registry.k8s.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
# 设置启动为systemd
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
# docker地址使用阿里云的地址,<code>需要填入自己的阿里云镜像加速地址
sed -i '/\[plugins\."io\.containerd\.grpc\.v1\.cri"\.registry\.mirrors\]/a\      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]        endpoint = ["https://<code>.mirror.aliyuncs.com" ,"https://registry-1.docker.io"]' /etc/containerd/config.toml

# 刷新重启,并设置为开机自启动
systemctl daemon-reload
systemctl enable --now containerd
systemctl restart containerd

安装cri-tools工具并配置:

yum install -y cri-tools
# 生成配置文件
crictl config runtime-endpoint
# 编辑配置文件
cat << EOF | tee /etc/crictl.yaml
runtime-endpoint: "unix:///run/containerd/containerd.sock"
image-endpoint: "unix:///run/containerd/containerd.sock"
timeout: 10
debug: false
pull-image-on-create: false
disable-pull-on-run: false
EOF

配置k8s使用containerd作为容器进行时:

# 添加或修改成下面的配置
vim /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd.sock"

在主节点编辑此节点:

# 修改使用的cri-socker
kubectl edit node <node>
...
kubeadm.alpha.kubernetes.io/cri-socket: unix:///run/containerd/containerd.sock

在修改的节点上进行刷新重启:

systemctl daemon-reload
systemctl restart kubelet

此时可以查看该节点的容器运行时修改结果:

kubectl describe <node>
...
Container Runtime Version:  containerd://1.6.22
...

# 至此,该节点的容器进行时已修改完成

其他节点只需要模仿该节点的做法即可。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
118 77
|
1天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
11天前
|
Prometheus 监控 Cloud Native
如何使用Prometheus监控Docker Swarm集群的资源使用情况?
还可以根据实际需求进行进一步的配置和优化,如设置告警规则,当资源使用超出阈值时及时发出警报。通过这些步骤,能够有效地使用 Prometheus 对 Docker Swarm 集群的资源进行监控和管理。
32 8
|
11天前
|
Prometheus 监控 Cloud Native
如何监控Docker Swarm集群的性能?
如何监控Docker Swarm集群的性能?
47 8
|
11天前
|
监控 Docker 容器
Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项
本文深入探讨了Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项,旨在帮助用户高效管理集群资源,适应业务变化,确保服务稳定性和资源优化。
31 6
|
13天前
|
Kubernetes 监控 云计算
Docker与Kubernetes的协同工作
Docker与Kubernetes的协同工作
|
13天前
|
运维 Kubernetes Docker
深入理解容器化技术:Docker与Kubernetes的协同工作
深入理解容器化技术:Docker与Kubernetes的协同工作
30 1
|
18天前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
13天前
|
Kubernetes 开发者 Docker
Docker与Kubernetes的协同工作
Docker与Kubernetes的协同工作
|
22天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
56 1