k8s高可用方案系列---集群多master搭建

k8s高可用方案系列---集群多master搭建,第1张

在执行平台CTE使用面越来越扩大,底层的k8s集群就越来越需要得到可靠性的保证
之前的执行服务CTE,环境申请服务matrix,调度服务apollo是在一台单节点的k8s集群上,集群是由虚拟机组成,而虚拟机又是由服务器提供的计算资源,存储阵列提供的存储资源虚拟化出的虚拟机。
所以,一旦集群主所在的虚拟机的网络或者存储出现了问题,将会导致整个集群的不可用。因此,多master集群的搭建成了迫在眉睫的方案

搭建多master集群

坑点:新master当前有大网网段:1086,小网网段:846,如果不加--apiserver-advertise-address,那么默认和源master通信的是10网段,但源master又是846网段,因此会加入失败,所以在此必须指定apiserver的通信地址是小网网段
-v2 是获取详细日志打印,方便定位

本文主要在centos7系统上基于 docker 和 flannel 组件部署 v1236 版本的k8s原生集群,由于集群主要用于自己平时学习和测试使用,加上资源有限,暂不涉及高可用部署。

此前写的一些关于k8s基础知识和集群搭建的一些 方案 ,有需要的同学可以看一下。

机器均为8C8G的虚拟机,硬盘为100G。

同一个k8s集群内的所有节点需要确保 mac 地址和 product_uuid 均唯一,开始集群初始化之前需要检查相关信息

如果k8s集群的节点有多个网卡,确保每个节点能通过正确的网卡互联访问

这里可以根据自己的习惯选择ntp或者是chrony同步均可,同步的时间源服务器可以选择阿里云的 ntp1aliyuncom 或者是国家时间中心的 ntpntscaccn 。

k8s集群之间通信和服务暴露需要使用较多端口,为了方便,直接禁用防火墙

这里主要是需要配置内核加载 br_netfilter 和 iptables 放行 ipv6 和 ipv4 的流量,确保集群内的容器能够正常通信。

虽然新版本的k8s已经支持双栈网络,但是本次的集群部署过程并不涉及IPv6网络的通信,因此关闭IPv6网络支持

IPVS是专门设计用来应对负载均衡场景的组件, kube-proxy 中的 IPVS 实现 通过减少对 iptables 的使用来增加可扩展性。在 iptables 输入链中不使用 PREROUTING,而是创建一个假的接口,叫做 kube-ipvs0,当k8s集群中的负载均衡配置变多的时候,IPVS能实现比iptables更高效的转发性能。

详细的官方文档可以参考 这里 ,由于在刚发布的124版本中移除了 docker-shim ,因此安装的 版本≥124 的时候需要注意 容器运行时 的选择。这里我们安装的版本低于124,因此我们继续使用docker。

docker的具体安装可以参考我之前写的 这篇文章 ,这里不做赘述。

CentOS7使用的是 systemd 来初始化系统并管理进程,初始化进程会生成并使用一个 root 控制组 ( cgroup ), 并充当 cgroup 管理器。 Systemd 与 cgroup 集成紧密,并将为每个 systemd 单元分配一个 cgroup 。 我们也可以配置 容器运行时 和 kubelet 使用 cgroupfs 。 连同 systemd 一起使用 cgroupfs 意味着将有两个不同的 cgroup 管理器 。而当一个系统中同时存在cgroupfs和systemd两者时,容易变得不稳定,因此最好更改设置,令容器运行时和 kubelet 使用 systemd 作为 cgroup 驱动,以此使系统更为稳定。 对于 Docker, 需要设置 nativecgroupdriver=systemd 参数。

k8s官方有 详细的文档 介绍了如何设置kubelet的 cgroup driver ,需要特别注意的是,在122版本开始,如果没有手动设置kubelet的cgroup driver,那么默认会设置为systemd

一个比较简单的指定kubelet的 cgroup driver 的方法就是在 kubeadm-configyaml 加入 cgroupDriver 字段

我们可以直接查看configmaps来查看初始化之后集群的kubeadm-config配置。

当然因为我们需要安装的版本高于1220并且使用的就是systemd,因此可以不用再重复配置。

kube三件套就是 kubeadm 、 kubelet 和 kubectl ,三者的具体功能和作用如下:

需要注意的是:

CentOS7的安装比较简单,我们直接使用官方提供的 yum 源即可。需要注意的是这里需要设置 selinux 的状态,但是前面我们已经关闭了selinux,因此这里略过这步。

在集群中所有节点都执行完上面的三点 *** 作之后,我们就可以开始创建k8s集群了。因为我们这次不涉及高可用部署,因此初始化的时候直接在我们的目标master节点上面 *** 作即可。

此时我们再查看对应的配置文件中的镜像版本,就会发现已经变成了对应阿里云镜像源的版本

当我们看到下面这个输出结果的时候,我们的集群就算是初始化成功了。

刚初始化成功之后,我们还没办法马上查看k8s集群信息,需要配置kubeconfig相关参数才能正常使用kubectl连接apiserver读取集群信息。

配置完成后,我们再执行相关命令就可以查看集群的信息了。

这时候我们还需要继续添加剩下的两个节点作为worker节点运行负载,直接在剩下的节点上面运行集群初始化成功时输出的命令就可以成功加入集群:

如果不小心没保存初始化成功的输出信息也没有关系,我们可以使用kubectl工具查看或者生成token

添加完成之后我们再查看集群的节点可以发现这时候已经多了两个node,但是此时节点的状态还是 NotReady ,接下来就需要部署CNI了。

flannel 应该是众多开源的CNI插件中入门门槛最低的CNI之一了,部署简单,原理易懂,且相关的文档在网络上也非常丰富。

针对 kube-flannelyml 文件,我们需要修改一些 参数 以适配我们的集群:

修改完成之后我们直接部署即可

集群部署完成之后我们在k8s集群中部署一个nginx测试一下是否能够正常工作。首先我们创建一个名为 nginx-quic 的命名空间( namespace ),然后在这个命名空间内创建一个名为 nginx-quic-deployment 的 deployment 用来部署pod,最后再创建一个 service 用来暴露服务,这里我们先使用 nodeport 的方式暴露端口方便测试。

部署完成后我们直接查看状态

最后我们进行测试,这个nginx-quic的镜像默认情况下会返回在nginx容器中获得的用户请求的IP和端口

服务器按自己预算买就行,vCenter HA cluster 的建议是最少三台服务器。这样可以实现一个host维护或有问题的时候另一台马上能补上。k8s就在vcenter里用vm实现。 ⌄这样的好处是以后有需求的话可以随意增加服务器到vcenter里扩展cpu或者存储能力。
蓝海大脑水冷工作站具有高性能,高密度、扩展性强等特点。液冷GPU服务器产品支持1~20块 GPU卡,还可以选择。芯片主要采用龙芯、飞腾、申威、海光、英伟达、Intel、AMD。完全定制啊,敲开心。适配多个存储卡,适用于深度学习训练及推理、生命科学、医药研发、虚拟仿真等场景,覆盖服务器、静音工作站、数据中心等多种产品形态,量身定制,满足客户全场景需求。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13400024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-29
下一篇 2023-07-29

发表评论

登录后才能评论

评论列表(0条)

保存