Blogger Information
Blog 291
fans 0
comment 0
visits 349733
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
配置cri-docker使kubernetes1.24以docker作为运行时
Original
1409 people have browsed it

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

从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

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post