kubernetes 1.24 安装步骤
参考文档
使用 kube-vip 搭建高可用的 Kubernetes 集群(完整版)
安装前准备
修改hosts文件
3个节点,每个节点上添加hosts信息:
外网 | hostname | 说明 |
---|---|---|
192.168.2.81 | master1 | |
192.168.2.82 | node1 | |
192.168.2.83 | node2 |
修改hostname
重启服务器
关闭 swap 交换区
或编辑文件 /etc/fstab
,将 swap
注释掉即可;
禁用 selinux
或编辑文件 /etc/selinux/config
:
关闭防火墙
允许 iptables 检查桥接流量
由于开启内核 ipv4 转发需要加载 br_netfilter 模块,所以加载下该模块
编辑文件 /etc/sysctl.d/k8s.conf
在文件中添加以下内容:
执行命令
安装docker
使用阿里源
安装docker
设置加速器并修改docker驱动
重启并设置自启动
安装 Containerd
我们已经了解过容器运行时 containerd 的一些基本使用,接下来在各个节点上安装 Containerd。
由于 containerd 需要调用 runc,所以我们也需要先安装 runc,不过 containerd 提供了一个包含相关依赖的压缩包 cri-containerd-cni-${VERSION}.${OS}-${ARCH}.tar.gz,可以直接使用这个包来进行安装。
此处我们使用1.5.5 版本
下载压缩包
修改配置文件
生成默认配置
containerd 的默认配置文件为 /etc/containerd/config.toml,我们可以通过如下所示的命令生成一个默认的配置
设置SystemdCgroup = true
对于使用 systemd 作为 init system 的 Linux 的发行版,使用 systemd 作为容器的 cgroup driver 可以确保节点在资源紧张的情况更加稳定,所以推荐将 containerd 的 cgroup driver 配置为 systemd。修改前面生成的配置文件 /etc/containerd/config.toml,在 plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options 配置块下面将 SystemdCgroup 设置为 true:
配置镜像加速器
然后再为镜像仓库配置一个加速器,需要在 cri 配置块下面的 registry 配置块下面进行配置
由于上面我们下载的 containerd 压缩包中包含一个 etc/systemd/system/containerd.service 的文件,这样我们就可以通过 systemd 来配置 containerd 作为守护进程运行了,现在我们就可以启动 containerd 了,直接执行下面的命令即可:
检查服务是否可用
安装k8s
配置安装源
安装kubelet,kubeadm,kubectl
启动设置自启
自动补全
master节点初始化
单节点master
可选参数说明:
--kubernetes-version
: 指定版本
--apiserver-advertise-address
: master 和 worker 间能互相通信的 IP--image-repository
: 设置国内镜像仓库--pod-network-cidr
:指定 pod 网络的 IP 地址范围。如果设置,控制平面将自动为每个节点分配 CIDR。--token-ttl=0
:token 永不过期
外网ip地初始化
去掉--apiserver-advertise-address参数,增加--apiserver-cert-extra-sans
参数
- --apiserver-cert-extra-sans:主题备用名称 (SAN) 用于 API 服务器服务证书。可以是 IP 地址和 DNS 名称。
错误解决
如发生
SystemVerification
错误时可加上--ignore-preflight-errors=SystemVerification
重新执行。
如果初始化失败了,自行百度解决,然后执行reset重新初始化:
成功信息
-
进行初始化成功后返回如下信息:
记录生成的最后一部分内容,此内容在配置worker节点时需要用到。
如果是高可用初始化,成功信息中会有带
--control-plane
参数的kubeadm join
命令,在其他控制平面节点执行即可 -
执行以下命令,使kubectl可以自动补充
-
查看node 及pod 状态
节点未就绪,因为
coredns pod
没有启动, 缺少相关的网络插件。
node节点加入
复制出kubeadm join命令
安装网络插件flannel
如果执行失败且错误为raw.githoursercontent.com无法访问,可浏览器访问下载或自行创建粘贴。
也可配置其他网络插件,如: calico, weave , CNI bridge ...
隔一会儿查看 Pod 运行状态:
kubectl get pods -n kube-system
安装Dashboard
安装Kubernetes-Dashboard
官方部署仪表板的服务没使用nodeport,将yaml文件下载到本地,在service里添加nodeport
如果此方式无法下载可通过浏览器访问自行创建
创建完成后,检查相关服务运行状态
在浏览器中访问Dashboard
创建token
1.24版本创建不过期token
安装Kuboard
-
使用 hostPath 提供持久化存储
-
等待kuboard v3就绪
如果结果中没有出现
kuboard-etcd-xxxxx
的容器,或者kuboard v3一直在重启,有可能是Master Role
问题 -
常见错误
-
缺少 Master Role
当您的集群是通过二进制方式安装时,您的集群中可能缺少 Master Role,或者当您删除了 Master 节点的
node-role.kubernetes.io/master=
标签时,此时执行kubectl get nodes
,结果如下所示:在集群中缺少 Master Role 节点时,您也可以为一个或者三个 worker 节点添加
k8s.kuboard.cn/role=etcd
的标签,来增加 kuboard-etcd 的实例数量;执行如下指令,可以为
your-node-name
节点添加所需要的标签
-
-
Master可调度
配置 Ingress-nginx
ingress-nginx官网
https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#a-pure-software-solution-metallb
在裸金属服务器使用ingress-controller时不支持LoadBlancer类型,可参考ingress-nginx官网的说明,解决方案有一下几种
自建LB服务:metalLB、openelb
使用NodePort方式部署ingress-controller
使用hostNetwork
推荐使用 metaLB kubernetes外部负载均衡器使用,或者使用nodePort方式(因kubernets默认端口范围为30000-32767,因此无法使用80/443,可以通过上层网络的80转发到kubernetes的ingress-nginx端口)
kubeadm 证书续期
查看k8s某一证书过期时间
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not
可使用脚本更新:更新证书脚本
如果提示sh找不到可能是文件编码问题
使用kubeadm默认的续期命令
新建renew_certs.sh文件并复制到所有master节点
遇到的问题
pod中无法访问外网
在node节点执行
flannel与cni网卡网段不一致
参考文档:https://www.qikqiak.com/k8strain2/containerd/install-cluster/
检查cni网卡与flannel是否网段不同,如果不同则可能是存在两个cni配置文件
可以看到里面包含两个配置,一个是 10-containerd-net.conflist
,另外一个是我们上面创建的 Flannel 网络插件生成的配置,我们的需求肯定是想使用 Flannel 的这个配置。
查看containerd 这个自带的 cni 插件配置可以看到上面的 IP 段恰好就是 10.88.0.0/16
,但是这个 cni 插件类型是 bridge
网络,网桥的名称为 cni0
但是使用 bridge 网络的容器无法跨多个宿主机进行通信,跨主机通信需要借助其他的 cni 插件,比如上面我们安装的 Flannel,或者 Calico 等等,由于我们这里有两个 cni 配置,所以我们需要将 10-containerd-net.conflist
这个配置删除,因为如果这个目录中有多个 cni 配置文件,kubelet 将会使用按文件名的字典顺序排列的第一个作为配置文件,所以前面默认选择使用的是 containerd-net
这个插件。
重建 coredns 和 dashboard 的 Pod,重建后 Pod 的 IP 地址就正常了,或者直接重启kubelet或者重启服务器。
清理
如果你的集群安装过程中遇到了其他问题,我们可以使用下面的命令来进行重置:
__EOF__

本文链接:https://www.cnblogs.com/yg0070/p/17469408.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」