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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 本文记录了将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搭建和管理企业级网站应用
目录
相关文章
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
22 2
|
7天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
5天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
5天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
5天前
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?
|
13天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
50 1
|
7天前
|
API Docker 容器
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。
|
7天前
|
调度 Docker 容器
【赵渝强老师】Docker Swarm集群的体系架构
Docker Swarm自1.12.0版本起集成至Docker引擎,无需单独安装。它内置服务发现功能,支持跨多服务器或宿主机创建容器,形成集群提供服务。相比之下,Docker Compose仅限于单个宿主机。Docker Swarm采用主从架构,Swarm Manager负责管理和调度集群中的容器资源,用户通过其接口发送指令,Swarm Node根据指令创建容器运行应用。
|
1月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
3月前
|
Kubernetes Devops 持续交付
DevOps实践:使用Docker和Kubernetes实现持续集成和部署网络安全的守护盾:加密技术与安全意识的重要性
【8月更文挑战第27天】本文将引导读者理解并应用DevOps的核心理念,通过Docker和Kubernetes的实战案例,深入探讨如何在现代软件开发中实现自动化的持续集成和部署。文章不仅提供理论知识,还结合真实示例,旨在帮助开发者提升效率,优化工作流程。