当前位置: 代码网 > it编程>开发工具>Docker > 【云原生-K8s】kubeadm搭建安装k8s集群v1.25版本完整教程【docker、网络插件calico、中间层cri-docker】

【云原生-K8s】kubeadm搭建安装k8s集群v1.25版本完整教程【docker、网络插件calico、中间层cri-docker】

2024年08月01日 Docker 我要评论
从 k8s 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能再作为k8s的容器运行时了,即从k8s v1.24开始不再使用docker了但是如果想继续使用docker的话,可以在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim(垫片)。

前言

基础描述

  • 从 k8s 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的cri(容器运行时接口)标准,所以docker不能再作为k8s的容器运行时了,即从k8s v1.24开始不再使用docker了
  • 但是如果想继续使用docker的话,可以在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持cri标准的shim(垫片)。一头通过cri跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。但是这种架构缺点也很明显,调用链更长,效率更低。
  • 本文采用了cri-docker的使用,但是更推荐使用containerd作为k8s的容器运行时
  • 其实本来我也准备采用containerd作为容器运行时的,怎奈技术和时间有限,且最新版本网上资料比较少,核心目的还是为了考cka证书,想快速构建起集群

其他

  • 为了搭建次教程虚拟机已经重装系统三次啦,含泪整理出此教程,请各位小伙伴仔细小心的阅读,按照此教程的顺序一步步搭建肯定是能成功的,后面教程也会有遇到的问题处理
  • 期间会用到如calico插件及其他需要的安装包,博主也会上传镜像包供大家下载,所有大家不慌不忙,仔细阅读争取一次就能搭建成功。
  • 教程如果没有特殊说明的命令和操作, 默认所有机器都需要执行

机器环境

在这里插入图片描述

基础环境

hostname设置

  • 把每一台虚拟机或者云服务器进行hostname设置,方便查看【master、node节点】
  • 不同节点设置不同的hostname
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node-1
hostnamectl set-hostname k8s-node-2
  • 所有节点,包括master节点,修改/etc/hosts文件,在最后加入如下你的集群ip信息,内网外网都行,只要能够互相ping通
vi /etc/hosts

172.24.214.110 k8s-master
172.24.214.108 k8s-node-1
172.24.214.109 k8s-node-2

yum更新

  • 更新为最新的内核版本,更新lrzsz方便后面上传镜像包
yum install update
yum install lrzsz
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp

docker安装

脚本安装【推荐】

  • 直接在linux上面执行该命令,选择了脚本安装docker,下面的命令安装无需执行
wget -o docker.sh https://files.rundreams.net/sh/docker.sh && sh docker.sh

命令安装

  • 设置repo
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 设置国内镜像并重启 daemon
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'eof'
{
  "registry-mirrors": ["https://j16wttpi.mirror.aliyuncs.com"]
}
eof
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
  • 进行安装命令,并设置docker自动重启
yum install -y docker-ce
systemctl start docker
systemctl enable docker
  • 查看是否成功
docker info

k8s安装配置

脚本配置【推荐】

  • linux直接执行该命令,选择了脚本配置,无需执行命令配置
wget -o k8s-init.sh https://files.rundreams.net/sh/k8s-init.sh && sh k8s-init.sh

命令配置

  • 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
  • 关闭selinux
setenforce 0
sed -i 's/^selinux=enforcing$/selinux=permissive/' /etc/selinux/config
  • 关闭swap
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
  • 配置iptables的accept规则
iptables -f && iptables -x && iptables -f -t nat && iptables -x -t nat && iptables -p forward accept
  • 设置系统参数
cat <<eof >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
eof

sysctl --system

部署 cri-dockerd

官方信息

百度网盘下载

中国移动云盘下载

cri-dockerd部署【所有节点均要执行】

  • 解压并执行以下命令
tar -xf cri-dockerd-0.2.6.amd64.tgz
cp cri-dockerd/cri-dockerd /usr/bin/
chmod +x /usr/bin/cri-dockerd
  • 配置启动⽂件,执行如下命令
cat <<"eof" > /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
eof
  • ⽣成 socket ⽂件,执行如下命令
cat <<"eof" > /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
eof
  • 启动 cri-docker 并设置开机⾃动启动
systemctl daemon-reload
systemctl enable cri-docker --now
systemctl is-active cri-docker
  • 添加阿⾥云 yum 源
cat > /etc/yum.repos.d/kubernetes.repo << eof
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
eof

k8s安装

安装 kubeadm kubelet kubectl

  • 执行如下命令
yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0

在这里插入图片描述

  • 大概执行1分钟左右吧,看网络情况而定。
kubeadm version

k8s其他必须配置

systemctl enable kubelet
  • 配置cgroup-driver=systemd
cat <<eof > /etc/sysconfig/kubelet
kubelet_extra_args="--cgroup-driver=systemd"
eof
  • 配置 docker native.cgroupdriver=systemd
cat <<eof > /etc/docker/daemon.json
{
  "registry-mirrors": ["https://j16wttpi.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
eof
  • 重新加载daemon
systemctl daemon-reload
  • 重启docker
systemctl restart docker

初始化master节点

  • 此命令只在master节点执行,172.24.214.110替换为你的master节点ip
kubeadm init \
--apiserver-advertise-address=172.24.214.110 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.25.0 \
--service-cidr=10.10.0.0/12 \
--pod-network-cidr=172.17.0.0/16 \
--cri-socket /var/run/cri-dockerd.sock \
--ignore-preflight-errors=all

在这里插入图片描述

  • 执行成功后,会有加入节点的代码,然后复制到其他节点进行加入
kubeadm join 172.24.214.110:6443 --token 5efiso.2zibi97nx4cunivt \
        --discovery-token-ca-cert-hash sha256:158fb29cb08d54e58d76239292eed553c25c54fb307424bee8d5776690827303 \
        --cri-socket /var/run/cri-dockerd.sock

网络插件calico

网络插件 yaml下载

wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
  • 然后自行修改,建议大家使用我修改过的yaml直接使用

百度网盘下载calico.yaml

阿里云网盘下载calico.yaml

中国移动云盘下载calico.yaml

  • 下载calico镜像压缩包,然后手动上传至每台主机

百度网盘下载 calico-v3.24.3

中国移动云盘 calico-v3.24.3

  • 下载calico到本地进行解压
    在这里插入图片描述
  • 把三个压缩包分别上传到全部节点
  • 每个节点手动通过docker离线加载镜像
docker load -i calico~cni~v3.24.3.tar.gz
docker load -i calico~kube~controllers~v3.24.3.tar.gz
docker load -i calico~node~v3.24.3.tar.gz
  • 通过命令 docker images | grep calico 查看是否成功
    在这里插入图片描述
  • 在master节点执行命令进行calico插件安装
kubectl apply -f calico.yaml

查看节点情况

  • 在主节点执行命令看集群是否成功 kubectl get node -o wide
    在这里插入图片描述

参考资料

参考文献





其他低版本搭建参考

问题

问题1:初始化master节点错误

解决

  • 我的问题是 重启机器 reboot 解决问题。
  • 参考文献:

问题2:加入节点报错

  • 大概的意思是找到多个cri,需要指定一个

结尾

k8s集群搭建起来确实有些困难,比如插件多、有的镜像在国外不能拉去等诸多原因,但大家一定要坚持多尝试几次就会学到 更多的知识。

如果大家在搭建中需要帮助,大家也可以私信我。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com