• 配置cri-docker使kubernetes1.24以docker作为运行时


    镜像下载、域名解析、时间同步请点击 阿里云开源镜像站

    kubernetes 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能再作为kubernetes的容器运行时了,即从kubernetesv1.24开始不再使用docker了。

    但是如果想继续使用docker的话,可以在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim(垫片)。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。但是这种架构缺点也很明显,调用链更长,效率更低。

    虽然本文演示了cri-docker的使用,但是更推荐使用containerd作为kubernetes的容器运行时。

    实验环境

    两台机器,vms41和vms42

    系统:centos7.4

    vms41为master,vms42是worker

    一.所有节点的基本设置

    1.所有节点设置好/etc/hosts,使它们之间能互相解析

    [root@vms4X ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.26.41 vms41.rhce.cc vms41
    192.168.26.42 vms42.rhce.cc vms42
    [root@vms4X ~]# 
    • 1
    • 2
    • 3
    • 4
    • 5

    2.在所有节点上关闭swap分区

    [root@vms4X ~]# swapoff -a ; sed -i '/fstab/d' /etc/fstab 
    [root@vms4X ~]# 
    • 1

    3.在所有节点上更新yum源

    [root@vms4X ~]#  rm -rf /etc/yum.repos.d/*  ; wget ftp://ftp.rhce.cc/k8s/* -P /etc/yum.repos.d/
    [root@vms4X ~]# yum clean all
    [root@vms4X ~]# 
    • 1
    • 2

    4.在所有节点安装docker

    所有节点安装docker-ce。

    [root@vms4X ~]#  yum install docker-ce -y

      在所有节点启动docker并设置开机自动启动

      [root@vms4X ~]# systemctl enable docker --now

        所有节点设置docker加速器

        cat > /etc/docker/daemon.json <
        • 1
        • 2
        • 3
        • 4
        • 5

        所有节点重启docker

        [root@vms4X ~]#  systemctl restart docker

          5.在所有节点安装cri-docker

          到下面的链接下载最新版cri-docker https://github.com/Mirantis/cri-dockerd/tags

          先在vms41上解压出cri-docker,然后拷贝到vms42上

          [root@vms41 ~]# tar zxf cri-dockerd-0.2.1.amd64.tgz 
          [root@vms41 ~]# cp cri-dockerd/cri-dockerd /usr/bin/
          [root@vms41 ~]# scp /usr/bin/cri-dockerd vms42:/usr/bin/
          root@vms42's password: 
          cri-dockerd         100%   50MB 117.2MB/s   00:00    
          [root@vms41 ~]# 
          • 1
          • 2
          • 3
          • 4
          • 5

          6.设置系统参数

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

          cat < /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
          • 1
          • 2
          • 3
          • 4

          让上述参数立即生效。

          [root@vms4X ~]# sysctl -p /etc/sysctl.d/k8s.conf
          [root@vms4X ~]#
          • 1

          7.创建cri-docker启动文件

          启动文件从下面链接找到。

          https://github.com/Mirantis/cri-dockerd/tree/master/packaging/systemd

          创建cri-docker启动文件。

          [root@vms41 ~]# cat /usr/lib/systemd/system/cri-docker.service
          [Unit]
          Description=CRI Interface for Docker Application Container Engine
          Documentation=https://docs.mirantis.com
          After=network-online.target firewalld.service docker.service
          Wants=network-online.target
          Requires=cri-docker.socket
          
          [Service]
          Type=notify
          ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
          ExecReload=/bin/kill -s HUP $MAINPID
          TimeoutSec=0
          RestartSec=2
          Restart=always
          
          StartLimitBurst=3
          
          StartLimitInterval=60s
          
          LimitNOFILE=infinity
          LimitNPROC=infinity
          LimitCORE=infinity
          
          TasksMax=infinity
          Delegate=yes
          KillMode=process
          
          [Install]
          WantedBy=multi-user.target
          [root@vms41 ~]# 
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26
          • 27
          • 28
          • 29
          • 30

          这里/usr/bin/cri-dockerd一定要加上参数

          –pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7

          用来指定所用的pause镜像是哪个,否则默认拉取k8s.gcr.io/pause:3.6,会导致安装失败。

          创建启动文件。

          [root@vms41 ~]# cat /usr/lib/systemd/system/cri-docker.socket
          [Unit]
          Description=CRI Docker Socket for the API
          PartOf=cri-docker.service
          
          [Socket]
          ListenStream=%t/cri-dockerd.sock
          SocketMode=0660
          SocketUser=root
          SocketGroup=docker
          
          [Install]
          WantedBy=sockets.target
          [root@vms41 ~]#
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13

          8.把启动脚本拷贝到vms42上

          [root@vms41 ~]# scp /usr/lib/systemd/system/cri-docker.socket /usr/lib/systemd/system/cri-docker.service vms42:/usr/lib/systemd/system/
          root@vms42's password: 
          cri-docker.socket          100%  204   103.1KB/s   00:00    
          cri-docker.service         100%  605   822.7KB/s   00:00    
          [root@vms41 ~]#
          • 1
          • 2
          • 3
          • 4

          启动cri-docker并设置开机自动启动

          [root@vms41 ~]# systemctl daemon-reload ; systemctl enable cri-docker --now
          Created symlink from /etc/systemd/system/multi-user.target.wants/cri-docker.service to /usr/lib/systemd/system/cri-docker.service.
          [root@vms41 ~]#
          
          [root@vms4X ~]# systemctl is-active cri-docker
          active
          [root@vms4X ~]#
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6

          二.安装kubernetes

          查看当前源里有哪些版本

          [root@vms41 ~]#yum list --showduplicates kubeadm --disableexcludes=kubernetes

            在本试验时最新的版本是v1.24.1,所以本次就安装v1.24.1版本的。 所有节点上安装软件包

            [root@vms4X ~]#yum install -y kubelet-1.24.1-0 kubeadm-1.24.1-0 kubectl-1.24.1-0  --disableexcludes=kubernetes
            [root@vms4X ~]#
            • 1

            所有节点上启动kubelet并设置开机自动启动。

            [root@vms4X ~]# systemctl enable kubelet --now
            Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
            [root@vms4X ~]#
            • 1
            • 2

            此时kubelet状态是activating的,不是active的。

            [root@vms41 ~]# systemctl is-active kubelet
            activating
            [root@vms41 ~]# 
            • 1
            • 2

            三.初始化kubernetes

            1.在master(vms41)上初始化集群

            [root@vms41 ~]# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.24.1 --pod-network-cidr=10.244.0.0/16 --cri-socket /var/run/cri-dockerd.sock

              注意,这里需要添加选项–cri-socket /var/run/cri-dockerd.sock

              file

              按提示创建kubeconfig文件。

              [root@vms41 ~]# mkdir -p $HOME/.kube
              [root@vms41 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
              [root@vms41 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
              [root@vms41 ~]#
              • 1
              • 2
              • 3

              2.把worker加入集群

              [root@vms42 ~]# kubeadm join 192.168.26.41:6443 --token l05cgf.kj5dvy5heki3jixt --discovery-token-ca-cert-hash sha256:07c1765ff4ac6eb2e54ed69fa57ca1afc728e825a6d4a11a83c96ff60ea545cd  --cri-socket /var/run/cri-dockerd.sock
              [root@vms42 ~]#
              • 1

              注意,这里也要加上选项–cri-socket /var/run/cri-dockerd.sock

              切换到master,查看节点

              [root@vms41 ~]# kubectl get nodes
              NAME            STATUS     ROLES           AGE     VERSION
              vms41.rhce.cc   NotReady   control-plane   4m12s   v1.24.1
              vms42.rhce.cc   NotReady             13s     v1.24.1
              [root@vms41 ~]#
              • 1
              • 2
              • 3
              • 4

              四.安装calico

              到下面链接下载最新版的calico.yaml。 [root@vms71 ~]# wget https://docs.projectcalico.org/manifests/calico.yaml

              修改calico.yaml找到CALICO_IPV4POOL_CIDR按下面修改。

              file

              改成

              file

              在vms41(master)上安装calico,不需要在vms42上做什么。

              [root@vms41 ~]# kubectl apply -f calico.yaml
              [root@vms41 ~]# 
              • 1

              五.验证

              在vms41上再次查看节点状态。

              [root@vms41 ~]# kubectl get nodes
              NAME            STATUS   ROLES           AGE     VERSION
              vms41.rhce.cc   Ready    control-plane   11m     v1.24.1
              vms42.rhce.cc   Ready              7m20s   v1.24.1
              [root@vms41 ~]# 
              [root@vms41 ~]# kubectl get nodes -o wide
              NAME            STATUS   ROLES           AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
              vms41.rhce.cc   Ready    control-plane   11m     v1.24.1   192.168.26.41           CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   docker://20.10.17
              vms42.rhce.cc   Ready              7m23s   v1.24.1   192.168.26.42           CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   docker://20.10.17
              [root@vms41 ~]#
              • 1
              • 2
              • 3
              • 4
              • 5
              • 6
              • 7
              • 8
              • 9

              原文链接:https://blog.csdn.net/lduan_001/article/details/125198823

          • 相关阅读:
            mysql远程连接失败
            如何从零开始系统的学习项目管理?
            Golang 自定义函数库(个人笔记)
            windows11应用商店错误:0x800704cf
            正则表达式中 “$” 并不是表示 “字符串结束
            云小课|3种常用Git工作流推荐
            vhr后端-2
            SpringBoot 和 Vue前后端分离在线工具项目实战,源码+超详细讲解
            servlet和vue的增删改查
            微服务应用与开发知识点练习【Nacos、Ribbon、Sentinel】
          • 原文地址:https://blog.csdn.net/m0_60028455/article/details/125990724