kubernetes环境从docker迁移到containerd

1.实验环境

本实验共两台节点,k8s-master01是master,k8s-master01是worker
kubernetes版本是v1.23.2
系统版本是 centos7.4

[root@k8s-master01 ~]# kubectl get nodes
NAME            STATUS   ROLES                  AGE    VERSION
k8s-master01   Ready    control-plane,master   234d   v1.23.2
k8s-node1   Ready    <none>                 234d   v1.23.2
[root@k8s-master01 ~]#

[root@k8s-master01 ~]# kubectl get nodes -o wide
NAME            STATUS   ROLES                  AGE    VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
k8s-master01   Ready    control-plane,master   234d   v1.23.2   192.168.26.61   <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   docker://20.10.9
k8s-node1   Ready    <none>                 234d   v1.23.2   192.168.26.62   <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   docker://20.10.9

上面运行了一个测试用的deploy,有两个副本。

[root@k8s-master01 ~]# kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
web1-665f6b46cb-cqj4x   1/1     Running   0          2m59s
web1-665f6b46cb-nr9hc   1/1     Running   0          2m59s
[root@k8s-master01 ~]#

2.迁移master

1.先对master(k8s-master01)执行drain操作。

该操作 在k8s-master01 节点上操作

[root@k8s-master01 ~]# kubectl drain k8s-master01 --ignore-daemonsets 
node/k8s-master01 cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-lf6t2, kube-system/kube-proxy-mhr5g
evicting pod kube-system/coredns-6d8c4cb4d-vcbjl
evicting pod kube-system/calico-kube-controllers-78d6f96c7b-cfxvw
evicting pod kube-system/coredns-6d8c4cb4d-5wblx
pod/calico-kube-controllers-78d6f96c7b-cfxvw evicted
pod/coredns-6d8c4cb4d-5wblx evicted
pod/coredns-6d8c4cb4d-vcbjl evicted
node/k8s-master01 drained
[root@k8s-master01 ~]#

2.关闭并卸载docker

该操作 在k8s-master01 节点上操作

[root@k8s-master01 ~]# systemctl disable docker --now
Removed symlink /etc/systemd/system/multi-user.target.wants/docker.service.
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket
[root@k8s-master01 ~]# systemctl disable docker.socket --now
[root@k8s-master01 ~]#

卸载docker

[root@k8s-master01 ~]# yum remove docker-ce docker-ce-cli -y
已加载插件:fastestmirror
    ...输出...
[root@k8s-master01 ~]#

3.安装并配置containerd

该操作 在k8s-master01 节点上操作

在k8s-master01上安装containerd

[root@k8s-master01 ~]#  yum install  containerd.io cri-tools  -y

[root@k8s-master01~]#  crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock

步骤1:先生成配置文件/etc/containerd/config.toml。

[root@k8s-master01 ~]# containerd config default > /etc/containerd/config.toml

步骤2:使用vim编辑器打开/etc/containerd/config.toml。

第一:搜索mirrors,把

     [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
该成
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://frz7i079.mirror.aliyuncs.com"]

第二:搜索sandbox,把

sandbox_image = "k8s.gcr.io/pause:3.6"
该为
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"

第三:搜索SystemdCgroup,把

          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            BinaryName = ""
            CriuImagePath = ""
            CriuPath = ""
            CriuWorkPath = ""
            IoGid = 0
            IoUid = 0
            NoNewKeyring = false
            NoPivotRoot = false
            Root = ""
            ShimCgroup = ""
            SystemdCgroup = false
该成(注意这中间的行是被删除了并非忽略不写的意思)
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            SystemdCgroup = true

保存退出。

4.加载模块及修该参数

该操作 在k8s-master01 节点上操作

在k8s-master01上加载模块

[root@k8s-master01 ~]# modprobe overlay ; modprobe br_netfilter

在所有机器上执行下面的命令,目的是系统重启时模块能自动加载。

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

在k8s-master01上执行下面的命令,目的是实现重启系统后,参数也能继续生效。

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

让上述参数立即生效。

[root@k8s-master01 ~]# sysctl -p /etc/sysctl.d/k8s.conf
[root@k8s-master01 ~]#

重启containerd服务,并设置开机自动启动。

[root@k8s-master01 ~]# systemctl enable containerd  ; systemctl restart containerd

5.配置并启动kubelet

该操作 在k8s-master01 节点上操作

设置kubelet启动参数

[root@k8s-master01 ~]# cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"
[root@k8s-master01 ~]#

重启kubelet服务。

[root@k8s-master01 ~]# systemctl restart kubelet

6.对master执行uncordon操作

该操作 在k8s-master01 节点上操作

[root@k8s-master01 ~]# kubectl uncordon k8s-master01 
node/k8s-master01 uncordoned
[root@k8s-master01 ~]#

7.验证

[root@k8s-master01 ~]# kubectl get nodes -o wide
NAME            STATUS   ROLES                  AGE    VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
k8s-master01   Ready    control-plane,master   234d   v1.23.2   192.168.26.61   <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   containerd://1.6.6
k8s-master01   Ready    <none>                 234d   v1.23.2   192.168.26.62   <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   docker://20.10.9
[root@k8s-master01 ~]# 
[root@k8s-master01 ~]#

3.迁移worker

1.先对worker(k8s-node1)执行drain操作。

该操作 在k8s-node1 节点上操作

[root@k8s-node1 ~]#  systemctl disable docker --now
Removed symlink /etc/systemd/system/multi-user.target.wants/docker.service.
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket
[root@k8s-node1 ~]#  systemctl disable docker.socket --now
[root@k8s-node1 ~]#

该操作 在k8s-master01 节点上操作

[root@k8s-master01 ~]# kubectl drain k8s-node1 --ignore-daemonsets 
node/k8s-node1 cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-hth7g, kube-system/kube-proxy-24z5b
evicting pod kube-system/coredns-6d8c4cb4d-dxqld
evicting pod default/web1-665f6b46cb-cqj4x
evicting pod default/web1-665f6b46cb-nr9hc
evicting pod kube-system/calico-kube-controllers-78d6f96c7b-bckd8
evicting pod kube-system/coredns-6d8c4cb4d-bfshv
pod/web1-665f6b46cb-cqj4x evicted
pod/web1-665f6b46cb-nr9hc evicted
pod/calico-kube-controllers-78d6f96c7b-bckd8 evicted
pod/coredns-6d8c4cb4d-dxqld evicted
pod/coredns-6d8c4cb4d-bfshv evicted
node/k8s-node1 drained

[root@k8s-master01~]#

2.关闭并卸载docker

该操作 在k8s-node1 节点上操作

[root@k8s-node1 ~]#  systemctl disable docker --now
Removed symlink /etc/systemd/system/multi-user.target.wants/docker.service.
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket
[root@k8s-node1 ~]#  systemctl disable docker.socket --now
[root@k8s-node1 ~]#

卸载docker

[root@k8s-node1 ~]# yum remove docker-ce docker-ce-cli -y
已加载插件:fastestmirror
    ...输出...
[root@k8s-node1 ~]#

3.安装containerd

该操作 在k8s-node1 节点上操作

在k8s-node1上安装containerd

[root@k8s-node1 ~]#  yum install  containerd.io cri-tools  -y

[root@k8s-node1~]#  crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock

4.把k8s-master01上的文件同步到k8s-node1

该操作 在k8s-node1 节点上操作

[root@k8s-master01 ~]# scp /etc/containerd/config.toml k8s-node1:/etc/containerd/
root@k8s-node1's password: 
config.toml          100% 6880     3.8MB/s   00:00    
[root@k8s-master01 ~]# scp /etc/modules-load.d/containerd.conf  k8s-node1:/etc/modules-load.d/
root@k8s-node1's password: 
containerd.conf        100%   21    16.4KB/s   00:00    
[root@k8s-master01 ~]# scp  /etc/sysctl.d/k8s.conf k8s-node1:/etc/sysctl.d/
root@k8s-node1's password: 
k8s.conf            100%  103   219.4KB/s   00:00    
[root@k8s-master01 ~]# scp /etc/sysconfig/kubelet k8s-node1:/etc/sysconfig/
root@k8s-node1's password: 
kubelet             100%  146    76.4KB/s   00:00    
[root@k8s-master01 ~]#

5.加载模块并修该参数,并启动kubelet和containerd

该操作 在k8s-node1 节点上操作

[root@k8s-node1 ~]#  modprobe overlay ; modprobe br_netfilter
[root@k8s-node1 ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
[root@k8s-node1 ~]#

[root@k8s-node1 ~]# systemctl enable containerd  ; systemctl restart containerd
Created symlink from /etc/systemd/system/multi-user.target.wants/containerd.service to /usr/lib/systemd/system/containerd.service.
[root@k8s-node1 ~]#

重启kubelet服务,并设置开机自动启动。

该操作 在k8s-node1 节点上操作

[root@k8s-node1 ~]#  systemctl restart kubelet

6.对worker执行uncordon操作

该操作 在k8s-master01 节点上操作

[root@k8s-master01 ~]# kubectl uncordon k8s-node1 
node/k8s-node1 uncordoned
[root@k8s-master01 ~]# kubectl get nodes
NAME            STATUS   ROLES                  AGE    VERSION
k8s-master01   Ready    control-plane,master   234d   v1.23.2
k8s-node1   Ready    <none>                 234d   v1.23.2
[root@k8s-node1 ~]#

7.验证

[root@k8s-master01 ~]# kubectl get nodes -owide
NAME            STATUS   ROLES                  AGE    VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
k8s-master01   Ready    control-plane,master   234d   v1.23.2   192.168.26.61   <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   containerd://1.6.6
k8s-node1   Ready    <none>                 234d   v1.23.2   192.168.26.62   <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   containerd://1.6.6
[root@k8s-master01 ~]#

现在可以看到所有节点的运行时都是contianerd了

[root@k8s-master01 ~]# kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
web1-665f6b46cb-fl9b4   1/1     Running   0          13m
web1-665f6b46cb-jgzp8   1/1     Running   0          13m

8.参考

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/6760

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年1月20日 下午2:50
下一篇 2023年1月20日 下午2:50

相关推荐

  • iftop详解

    Linux安装iftop 界面如下 界面参数说明 常用的参数 显示网卡eth0的信息,主机通过ip显示 显示端口号(添加-P参数,进入界面可通过p参数关闭) 显示将输出以byte为单位显示网卡流量,默认是bit 显示流量进度条 显示每个连接的总流量 显示指定ip 8.8.8.8的流量

    2023年1月5日
    4400
  • centos7查看cpu核心数

    总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep “hysical id”| sort| uniq| wc -l 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep “cpu core”| uniq 查看逻辑CPU的个数 c…

    2023年1月10日
    4200
  • 在 VMware 中安装 Kali Linux 系统的详细过程

    Kali Linux 是用于学习和练习黑客攻击和渗透测试的Linux发行版的不二之选。 而且,如果你经常捣鼓 Linux 发行版,出于好奇心,你可能已经尝试过它。 警告!本文介绍的内容仅供学习 Kali Linux 的安装,请勿使用 Kali Linux 进行任何非授权的行为。Kali Linux 应该用于在授权的情况下,对授权的目标进行合理的渗透测试,以了…

    2022年6月8日
    34600
  • Ubuntu 18.04 永久修改DNS

    每次在/etc/resolv.conf 修改DNS之后,重启服务器DNS就会重置为127.0.0.53 解决过程 从/etc/resolv.conf的注释中发现systemd-resolved为本地应用程序提供了DNS解析服务。通过 systemd-resolved 在本地回环网口 127.0.0.53 上提供的本地DNS服务器。 应用程序可以直接向 127…

    2022年7月5日
    16400
  • Firewalld遇到ipset not usable,无法启用的问题

    centos7在启用firewalld的时候,启动没有报错,但是查看状态显示如下: 处理过程 定位问题 尝试手动调用ipset 此时基本可以判定是内核出了问题。列出相关内核文件夹内容,查看具体问题。 ls /lib/modules/3.10.0-1160.36.2.el7.x86_64/kernel/net/netfilter 上图是正常的内容。实际小编自身…

    2022年12月19日
    7300

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信