侧边栏壁纸
博主头像
小周的知识站 博主等级

行动起来,活在当下

  • 累计撰写 89 篇文章
  • 累计创建 13 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

切换Kubernetes的容器运行时

Administrator
2025-12-12 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

1 简介

集群

版本

Kubernetes

1.23.3

2 实践

2.1 维护节点

root@k8s-master:~# kubectl get node -owide
NAME           STATUS   ROLES                  AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
k8s-master     Ready    control-plane,master   3d    v1.23.3   10.1.1.10     <none>        Ubuntu 18.04.6 LTS   4.15.0-167-generic   docker://20.10.14
k8s-worker-1   Ready    <none>                 3d    v1.23.3   10.1.1.11     <none>        Ubuntu 18.04.6 LTS   4.15.0-167-generic   docker://20.10.14
k8s-worker-2   Ready    <none>                 3d    v1.23.3   10.1.1.12     <none>        Ubuntu 18.04.6 LTS   4.15.0-167-generic   docker://20.10.14

1:首先标记需要切换的节点为维护模式,强制驱逐节点上正在运行的 Pod,这样可以最大程度降低切换过程中影响应用的正常运行,比如我们先将 worker-1 节点切换到 containerd
首先使用 kubectl cordon 命令将 worker-1 节点标记为 unschedulable 不可调度状态:

root@k8s-master:~# kubectl cordon k8s-worker-1 
node/k8s-worker-1 cordoned
root@k8s-master:~# kubectl get node
NAME           STATUS                     ROLES                  AGE   VERSION
k8s-master     Ready                      control-plane,master   3d    v1.23.3
k8s-worker-1   Ready,SchedulingDisabled   <none>                 3d    v1.23.3
k8s-worker-2   Ready                      <none>                 3d    v1.23.3

2:执行完上面的命令后,worker-1 节点变成了一个 SchedulingDisabled 状态,表示不可调度,这样新创建的 Pod 就不会调度到当前节点上来了。
接下来维护 worker-1 节点,使用 kubectl drain 命令来维护节点并驱逐节点上的 Pod:

root@k8s-master:~# kubectl drain k8s-worker-1 --ignore-daemonsets 
node/k8s-worker-1 already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-c22zs, kube-system/kube-proxy-5thht
evicting pod kube-system/coredns-6d8c4cb4d-ww9vq
evicting pod kube-system/coredns-6d8c4cb4d-dplfx
pod/coredns-6d8c4cb4d-dplfx evicted
pod/coredns-6d8c4cb4d-ww9vq evicted
node/k8s-worker-1 drained

上面的命令会强制将 worker-1 节点上的 Pod 进行驱逐,我们加了一个 --ignore-daemonsets 的参数可以用来忽略 DaemonSet 控制器管理的 Pods,因为这些 Pods 不用驱逐到其他节点去,当节点驱逐完成后接下来我们就可以来对节点进行维护操作了,除了切换容器运行时可以这样操作,比如我们需要变更节点配置、升级内核等操作的时候都可以先将节点进行驱逐,然后再进行维护。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区