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

Kubernetes节点运行时从Docker切换到Containerd

        由于k8s将于1.24版本弃用dockershim,所以最近在升级前把本地的k8s切换到了Containerd运行时,目前我的k8s版本是1.22.5,一个master,二个Node的配置,以下做为一个操作记录日志整理,其它可以参考官网文档。

在Master节点使用cordon命令将node标记为不可调度,执行drain命令,将该Node上运行的pod平滑的赶到其他节点上(对于只有一个Master节点的集群也是一样的操作,只是在维护过程中Master会停止服务)。

sudo kubectl cordon <node_name>
sudo kubectl drain <node_name>

停止kubelet和Docker,并删除Dockers相关

sudo systemctl stop kubelet
sudo systemctl stop docker && sudo systemctl disable docker.service --nowsudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
sudo yum remove docker-ce docker-ce-cli
rm -rf /var/run/docker && rm -rf /var/run/dockershim.sock

配置一些环境变量

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfiltercat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOFcat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOFcat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOFsudo sysctl --system

安装并配置Containerd

sudo yum install -y containerd.iomkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml

修改  /etc/containerd/config.toml 文件中 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 的 SystemdCgroup = true,以使 runc 使用 systemd cgroup 驱动

重启containerd服务

sudo systemctl daemon-reload
sudo systemctl restart containerd

修改/var/lib/kubelet/kubeadm-flags.env文件修改并添加以启动变量

--cgroup-driver=systemd --container-runtime=remote --container-runtime-endpoint=/run/containerd/containerd.sock

修改 /var/lib/kubelet/config.yaml, 将 cgroupDriver 由 cgroupfs 修改为 systemd

重启kubelet服务

systemctl daemon-reload
systemctl start kubelet

恢复节点,注意操作后需要一点时间来启动容器,日志出现报错可暂时忽略,大概几分钟到10几分钟,可以通过crictl ps命令来查看各容器启动的情况。

kubectl uncordon <node_name>

以下是一些维护过程中可能会用到的命令,以供备用。

#通过以下指令查看上面设置已生效
lsmod | grep br_netfilter
lsmod | grep overlay
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward#显示日志
journalctl --no-pager -xe  -u containerd#重新加入节点
kubeadm join 172.16.1.111:6443 --token xxx \--discovery-token-ca-cert-hash sha256:xxx#查看systemd管理的进程
systemd-cgls#配置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 ps

http://www.lryc.cn/news/34182.html

相关文章:

  • 【编程基础之Python】12、Python中的语句
  • android h5餐饮管理系统myeclipse开发mysql数据库编程服务端java计算机程序设计
  • 容易混淆的嵌入式(Embedded)术语
  • Nodejs 中 JSON 和 YAML 互相转换
  • C++入门教程||C++ 修饰符类型||C++ 存储类
  • Android开发面试:Java知识答案精解
  • Windows上一款特别好用的画图软件
  • html--学习
  • 关于递归处理,应该怎么处理,思路是什么?
  • 重磅!牛客笔试客户端可防ChatGPT作弊
  • 春季训练营 | 前端+验证直通车-全实操项目实践,履历加成就业无忧
  • 2.详解URL
  • Android特别的数据结构(二)ArrayMap源码解析
  • 减少if else
  • 硕士毕业论文常见的排版小技巧
  • JAVA开发(数据类型String和HasMap的实现原理)
  • Hbase 映射到Hive
  • 14_MySQL视图
  • 做程序界中的死神,斩魂刀始解
  • 顺序表——“数据结构与算法”
  • 嵌入式Linux从入门到精通之第十六节:U-boot分析
  • UART 串口通信
  • 【硬件】P沟道和N沟道MOS管开关电路设计
  • 中移杭研一面经历
  • 如何成为一名全栈工程师:专业建议与技能要求
  • MySQL架构篇
  • Redhat7.6安装weblogic10.3.6(超详细,有图文)
  • dashboard疏散主机提示报错:无法疏散主机...处理方法、openstack虚拟机状态卡在重启处理方法、openstack在数据库修改虚拟机状态的方法
  • 力扣:轮转数组(详解)
  • Vue计算属性Computed