K8S容器运行时从Docker切换为Containerd

K8S从1.24版本起不再支持docker容器引擎,可选的替代品有containerdcri-opodman。下面演示将单个node节点的容器引擎从docker切换为containerd的过程。

检查内核参数与模块

overlay和br_netfilter

检查是否已经加载内核模块overlaybr_netfilter

lsmod | grep overlay
lsmod | grep br_netfilter

如果没有,手动加载内核模块:

cat <<EOF | tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

# 加载内核模块
modprobe overlay
modprobe br_netfilter

内核网络参数

检查系统内核参数:

sysctl -a | grep bridge
sysctl -a | grep ip_forward

如果没有开启,手动调整:

cat <<EOF | tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

sysctl --system

containerd安装配置

安装containerd

安装containerd相关依赖包:

yum install -y yum-utils device-mapper-persistent-data lvm2 

配置docker源(如果已配置,跳过此步骤):

ls /etc/yum.repos.d | grep docker-ce
yum-config-manager \ 
--add-repo \ 
https://download.docker.com/linux/centos/docker-ce.repo 

安装containerd:

ls /etc | grep containerd

# 如果没有安装
yum install -y containerd.io 

修改containerd为独立运行时的默认配置:

containerd config default > /etc/containerd/config.toml

修改镜像仓库地址

修改containerd配置文件:

vim /etc/containerd/config.toml

#pause镜像地址修改为阿里云镜像仓库地址
[plugins."io.containerd.grpc.v1.cri"] 
  sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"

#cgroups驱动引擎修改为systemd
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 
  SystemdCgroup = true

#Dcoker Hub镜像仓库地址修改为阿里云镜像仓库地址(非必须)
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] 
  endpoint = ["https://b9pmyelo.mirror.aliyuncs.com"]

保存退出后,重启服务生效:

systemctl restart containerd

# 启用开机自启
systemctl enable containerd

切换容器运行时

修改kubelet配置,将当前节点的默认容器运行时修改为containerd:

vim /etc/sysconfig/kubelet 
KUBELET_EXTRA_ARGS=--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock --cgroup-driver=systemd 

# 保存退出,重启生效
systemctl restart kubelet

在k8s-master检查:

[root@k8s-master1 ~]# kubectl get nodes -o wide
NAME          STATUS   ROLES                  AGE     VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
k8s-master1   Ready    control-plane,master   3d11h   v1.23.0   192.168.x.x   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   containerd://1.6.18
k8s-master2   Ready    control-plane,master   3d10h   v1.23.0   192.168.x.x   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   containerd://1.6.18
k8s-master3   Ready    control-plane,master   3d10h   v1.23.0   192.168.x.x   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   containerd://1.6.18
k8s-worker1   Ready    <none>                 3d10h   v1.23.0   192.168.x.x   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   containerd://1.6.18
k8s-worker2   Ready    <none>                 3d10h   v1.23.0   192.168.x.x   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   containerd://1.6.18

输出中,CONTAINER-RUNTIME一列,k8s-node2的容器运行时已变成containerd,其余节点还是docker。

最后停用docker服务:

systemctl disable docker && systemctl stop docker

crictl管理工具

Containerd可以通过crictl命令来管理容器。

配置crictl管理containerd:

vi /etc/crictl.yaml 
runtime-endpoint: unix:///run/containerd/containerd.sock 
image-endpoint: unix:///run/containerd/containerd.sock 
timeout: 10 
debug: false

查看crictl常用命令:

crictl --help
### 更改Kubernetes集群中的容器运行 在现代云原生环境中,更改Kubernetes集群使用的容器运行是一个常见的需求。当考虑从Docker切换Containerd作为容器运行,需遵循一系列特定的操作流程。 #### 准备工作 为了确保平滑过渡,在执行任何变更之前备份现有配置文件至关重要。这包括但不限于`kubelet`配置、网络设置以及其他可能影响节点稳定性的组件配置[^1]。 #### 安装Containerd 安装过程取决于操作系统版本及其包管理工具。对于大多数Linux发行版而言,可以通过官方仓库获取最新版本的Containerd: ```bash sudo apt-get update && sudo apt-get install -y containerd ``` 完成安装后,编辑Containerd配置文件(通常位于 `/etc/containerd/config.toml`),启用必要的特性并调整参数以适应环境需求[^2]。 #### 配置CRI插件 为了让Kubernetes能够识别和利用新的容器运行,必须启动gRPC服务来实现容器运行接口(CRI)协议。此功能已内置于Containerd中,只需通过修改其配置文件激活即可。具体操作如下所示: - 将 `disabled_plugins` 中移除 `"cri"` 条目; - 设置合适的沙箱镜像路径用于初始化Pod; 这些改动使得Containerd可以充当符合CRI标准的服务端点[^3]。 #### 更新Kubelet配置 接下来更新各节点上的Kubelet配置使其指向新安装好的Containerd实例所提供的CRI地址,默认情况下为unix:///run/containerd/containerd.sock。如果采用静态pod方式部署核心控制平面,则还需相应地调整API Server等相关组件的启动选项[^4]。 #### 迁移已有资源 考虑到兼容性和稳定性因素,建议逐步迁移而不是一次性替换整个集群内的所有节点。每次仅处理少量机器,并密切监控它们的状态变化直至确认无误后再继续下一批次的工作[^5]。 #### 测试验证 最后一步是对转换后的系统进行全面测试,特别是关注性能指标和服务可用性等方面的表现差异。只有经过充分检验之后才能正式宣布项目成功落地[^6]。 ```yaml apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: nginx image: nginx:latest ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GottdesKrieges

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

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

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

打赏作者

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

抵扣说明:

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

余额充值