博客列表 >配置cri-docker使kubernetes1.24以docker作为运行时

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

哈
原创
2022年07月26日 11:28:341408浏览

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

从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,使它们之间能互相解析

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

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

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

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

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

4.在所有节点安装docker

所有节点安装docker-ce。

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

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

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

所有节点设置docker加速器

  1. cat > /etc/docker/daemon.json <<EOF
  2. {
  3. "registry-mirrors": ["https://frz7i079.mirror.aliyuncs.com"],
  4. "exec-opts": ["native.cgroupdriver=systemd"]
  5. }
  6. EOF

所有节点重启docker

  1. [root@vms4X ~]# systemctl restart docker

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

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

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

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

6.设置系统参数

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

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

让上述参数立即生效。

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

7.创建cri-docker启动文件

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

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

创建cri-docker启动文件。

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

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

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

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

创建启动文件。

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

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

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

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

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

二.安装kubernetes

查看当前源里有哪些版本

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

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

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

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

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

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

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

三.初始化kubernetes

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

  1. [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文件。

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

2.把worker加入集群

  1. [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
  2. [root@vms42 ~]#

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

切换到master,查看节点

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

四.安装calico

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

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

file

改成

file

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

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

五.验证

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

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

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

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议