K8S集群搭建——cri-dockerd版(包含问题解决方案)
创始人
2024-12-27 08:07:08
0

一.前期准备

1.更新软件包(每个节点都要做)

yum update -y yum upgrade -y #添加yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo yum -y install wget wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo #安装要使用的插件,基本的命令工具 yum -y install net-tools lrzsz wget tree vim unzip bash-completion bash-completion-extra ntpdate

2.关闭防火墙,SELinux,swap分区(修改完SELinux需要重启主机,每个节点都要做)

systemctl stop firewalld systemctl disable firewalld sed -i 's/enforcing/disabled/' /etc/selinux/config sed -ri 's/.*swap.*/#&/' /etc/fstab swapon -a df -h # -r 支持扩展正则+ ? () {} | # -i:直接修改文件,而不是输出到标准输出。这意味着命令会直接更改 /etc/fstab 文件的内容,而不是仅仅显示更改。 # 's/.*swap.*/#&/':这是 sed 的命令模式,其中: # s:表示替换操作。 # &:在替换模式中,& 表示匹配的文本(即所有匹配到的 swap 相关的行)。 # #&:在替换模式中,# 是注释符号,所以 #& 表示将匹配到的行前面添加 #,从而注释掉这些行。

3.安装docker(借鉴阿里云安装Docker-CE,每个节点都要做)

# step 1: 安装必要的一些系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3 sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo # Step 4: 更新并安装Docker-CE yum makecache fast yum -y install docker-ce # Step 4: 开启Docker服务 systemctl enable --now docker  #添加镜像加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' {   "registry-mirrors": ["https://pu7lyu61.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

二.K8s相关组件安装

1.首先规划一下IP分配

 

主机名IP地址节点
k8s-master192.168.113.120master
k8s-node1192.168.113.121node1
k8s-node2192.168.113.122node2

 

2.配置免密登录(可选,为了方便切换节点,我这里配置了免密登录)

#master执行 ssh-keygen  cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys scp -rp /root/.ssh/* root@192.168.113.121:/root/.ssh/ scp -rp /root/.ssh/* root@192.168.113.122:/root/.ssh/

3.修改host文件,方便节点间相互解析

#master执行 cat >> /etc/hosts << EOF 192.168.113.120 k8s-master 192.168.113.121 k8s-node1 192.168.113.122 k8s-node2 EOF  #给每个节点都传一份 vim host.sh for i in `seq 1 2` do scp /etc/hosts root@k8s-node$i:/etc/hosts done

4.将桥接的IPv4流量传递到iptables的链(每个节点都要做)

 

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

5.安装K8s相关组件(每个节点都要做)

#我这里安装最新版的k8s相关组件,你可以修改具体的版本号来自定义安装 cat <

6.添加命令补全(看个人习惯,可选)

#添加命令补全 source /usr/share/bash-completion/bash_completion source <(kubectl completion bash) # 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包。 echo "source <(kubectl completion bash)" >> ~/.bashrc # 在您的 bash shell 中永久的添加自动补全 source ~/.bashrc

7.时间同步(每台节点都要做,必做,否则可能会因为时间不同步导致集群初始化失败)

#主机执行脚本 vim ntp.sh for  i in `seq 120 122` do ssh 192.168.113.$i "ntpdate cn.ntp.org.cn" done

8.修改docker的daemon.json文件(因为K8s默认使用systemd驱动,详细原因请看官方文档)

#而docker的cri-dockerd默认Cgroup驱动,所以需要修改 "exec-opts": ["native.cgroupdriver=systemd"]  #修改以后重启docker systemctl restart docker

9.由于K8s丛1.24版本以后停止支持dockershim,默认使用containerd

由于以前搭建k8s集群默认使用containerd来做容器运行时,这次使用cri-dockerd(可以参考下面这两篇博客,写的很详细)

这是cri-dockerd的官方下载渠道:Releases · Mirantis/cri-dockerd · GitHub(新版本基本是已经处理好的rpm,只需要yum安装即可,非常方便)

参考文档:k8s 1.24 及以后版本如何对接 docker_nothing provides fuse-overlayfs >= 0.7 needed by d-CSDN博客

k8s集群搭建教程(使用cri-docker+flannel) | CodeCook (dettry.github.io)

10.Kubeadm初始化集群

#apiserver修改成自己的master节点ip kubeadm init \ --apiserver-advertise-address=192.168.113.120 \ --image-repository=registry.aliyuncs.com/google_containers \ --kubernetes-version=v1.30.1 \ --service-cidr=10.96.0.0/12  \ --pod-network-cidr=10.244.0.0/16 \ --cri-socket=unix:///var/run/cri-dockerd.sock

 

根据系统提示创建具体文件

 

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config  以下是 cp 命令的一些常用选项:  -r 或 --recursive:递归复制,用于连同子目录一起复制目录。 -i 或 --interactive:交互式模式,在覆盖文件前提示用户。 -v 或 --verbose:详细模式,显示复制过程中的信息。 -p 或 --preserve:保留原文件的属性,如修改时间、访问时间、所有者、权限等。 -u 或 --update:仅当源文件比目标文件新,或者目标文件不存在时,才复制文件。

 ##这是刚刚上面的提示##

##这是刚刚上面的提示## Your Kubernetes control-plane has initialized successfully!  To start using your cluster, you need to run the following as a regular user:    mkdir -p $HOME/.kube   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config   sudo chown $(id -u):$(id -g) $HOME/.kube/config  Alternatively, if you are the root user, you can run:    export KUBECONFIG=/etc/kubernetes/admin.conf  You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:   https://kubernetes.io/docs/concepts/cluster-administration/addons/  Then you can join any number of worker nodes by running the following on each as root:  kubeadm join 192.168.113.120:6443 --token rpypka.45mndosxyuszktgb \         --discovery-token-ca-cert-hash sha256:914ada8e868898a477d39a4bdaee4d00a3acf28bc8b31c0147cdc78c84d107d0 

大量报错

踩了一个大坑(节点无法加入到master节点上)

分析报错原因,是因为我们有两个容器运行时,一个cri-docker,另一个containerd,系统不知道你要用哪一个容器运行时,所以这个时候我们直接停掉containerd就行了,这是最简单高效的方法(摸索了小半个小时,网上各种攻略都行不通,最后还是需要自己去思考解决问题)

因为k8s默认containerd作为容器运行时,所以想要使用cri-dockerd,需要把containerd先停掉,否则,在node节点加入master节点时会报错,提示你有两个容器运行时,要使用哪一个
为什么我不直接去修改kubelet让他选择我的cri容器运行时?因为我找不到配置文件哈哈哈。网上有很多告诉你去修改/etc/sysconfig/kubelet这个kubelet的配置文件,但实际上根本没有这个文件

但是注意!!在node节点加入到master节点以后请把containerd打开,否则后续docker无法拉取镜像

以下是网上大部分人的解法(存在问题,修改完配置文件以后kubelet就无法正常启动了)请避坑,也有可能是我修改的有问题,各位可以自行修改尝试

node节点全都为NotReady

下图我们就可以看到,确实使用的docker engine,默认是containerd

NotReady排错(可以看到是集群内部网络出现了问题)

因为我们在初始化master节点的时候,是给Service和Pod划分过子网的,而K8s不自带网络插件,划分出来的子网又全是虚拟网络,这个时候肯定就没有办法进行通信了,所以我们需要安装相应的网络插件来解决这个问题,你可以选择安装flannel或者calico,甚至其他的各种网络插件,下面介绍使用calico插件
虽然我们节点虽然已经加入到master节点,但是我们没有安装网络插件,集群内部Pod和节点是无法通信的

 

#下载calico/fannel网络插件 curl -O https://docs.tigera.io/archive/v3.25/manifests/calico.yaml vim calico.yaml #这里修改为pod的所在子网 kubectl create -f  calico.yaml

 

node节点无法使用kubelet

这是由于node节点上没有admin.conf。出现这个问题的原因是kubectl命令需要使用kubernetes-admin的身份来运行,在“kubeadm int”启动集群的步骤中就生成了/etc/kubernetes/admin.conf,而node节点上是没有这个文件的,也就是系统认为工作节点时不能具有管理节点的权限,所以可以把master节点上的admin.conf拷贝到其他node节点上,这样就能通过认证,也能顺利的使用kubectl命令行工具了

scp /etc/kubernetes/admin.conf root@k8s-node1:/etc/kubernetes/ scp /etc/kubernetes/admin.conf root@k8s-node2:/etc/kubernetes/  #添加到环境变量中,否则每次开机重启都会失效 echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile source ~/.bash_profile

相关内容

热门资讯

第1实锤!wepoke科技外挂... 第1实锤!wepoke科技外挂透明挂辅助作弊,wepoke系统规律(有挂规律)-哔哩哔哩是一款可以让...
两刹那秒懂!(微乐内蒙麻将)外... 两刹那秒懂!(微乐内蒙麻将)外挂透视辅助作弊!(透视)详细教程(2023已更新)(哔哩哔哩)是一款可...
第6实锤!来玩德州扑克外挂辅助... 自定义新版来玩德州扑克系统规律,只需要输入自己想要的开挂功能,一键便可以生成出来玩德州扑克专用辅助器...
四分钟了解!(全民内蒙古麻将)... 四分钟了解!(全民内蒙古麻将)外挂透视辅助软件!(透视)详细教程(2020已更新)(哔哩哔哩)是一款...
第9实锤!AA 扑克外挂透明挂... 自定义新版微扑克ai系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克ai专用辅助器,不...
三分钟了解!(九九麻将)外挂辅... 三分钟了解!(九九麻将)外挂辅助插件!(透视)详细教程(2020已更新)(哔哩哔哩)是一款可以让一直...
第9个了解!摆菠萝扑克外挂透明... 第9个了解!摆菠萝扑克外挂透明挂辅助透视挂,微扑克系统是有问题(有挂方法)-哔哩哔哩;AI智能教程细...
二刹那秒懂!(小闲山城棋牌)外... 自定义新版小闲山城棋牌系统规律,只需要输入自己想要的开挂功能,一键便可以生成出小闲山城棋牌专用辅助器...
第五了解!wpk ai软件透明... 第五了解!wpk ai软件透明挂辅助透视挂,微扑克辅助测试(有挂总结)-哔哩哔哩是一款可以让一直输的...
六瞬间秒懂!(闲来玩游戏)外挂... 六瞬间秒懂!(闲来玩游戏)外挂辅助器作弊!(透视)详细教程(2021已更新)(哔哩哔哩)是一款可以让...