网站首页 > 技术教程 正文
涉及到的内容
- LVS
- HAProxy
- Harbor
- etcd
- Kubernetes (Master Worker)
整体拓补图
以上是最小生产可用的整体拓补图(相关节点根据需要进行增加,但不能减少)
按功能组划分
- SLB
- LVS
- HAProxy
- etcd
- K8S Node (Master / Worker)
SLB
LVS 、HAProxy 被规划为基础层,主要提供了一个高可用的7层负载均衡器。
由LVS keepalived 提供一个高可用的VIP(虚拟IP)。
这个VIP DR模式转发到后端的HAProxy服务器。
HAProxy反代了K8S Master服务器,提供了K8S Master API的高可用和负载均衡能力。
可以使用Nginx代替HAProxy吗?
是可以的,这边使用HAproxy是因为k8s文档中出现了HAproxy,且后续可能会有4层反代的要求,从而使用了HAProxy。
可以直接从LVS转发到Master吗?
理论上可行,我没有试验。
如果不缺两台机器推荐还是架设一层具有7层代理能力的服务。
k8s apiserver、harbor、etcd都是以HTTP的方式提供的api,如果有7层代理能力的服务后续会更容易维护和扩展。
推荐配置
etcd
etcd是一个采用了raft算法的分布式键值存储系统。
这不是k8s专属的是一个独立的分布式系统,具体的介绍大家可以参考官网,这边不多做介绍。
我们采用了 static pod的方式部署了etcd集群。
失败容忍度
最小可用节点数:(n/2)+1,下面是一个参考表格,其中加粗的是推荐的节点数量:
推荐配置
括号内是官方推荐的配置
官网:
https://etcd.io/
官方硬件建议:
https://etcd.io/docs/v3.3.12/op-guide/hardware/
Static Pod部署文档:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/
Kubernetes集群
kubernetes集群主要有两种类型的节点:Master和Worker。
Master则是集群领导。
Worker是工作者节点。
可以看出这边主要的工作在Master节点,Worker节点根据具体需求随意增减就好了。
Master节点的高可用拓补官方给出了两种方案。
- Stacked etcd topology(堆叠etcd)
- External etcd topology(外部etcd)
可以看出最主要的区别在于etcd的部署方式。
第一种方案是所有k8s Master节点都运行一个etcd在本机组成一个etcd集群。
第二种方案则是使用外部的etcd集群(额外搭建etcd集群)。
我们采用的是第二种,外部etcd,拓补图如下:
如果采用堆叠的etcd拓补图则是:
这边大家可以根据具体的情况选择,推荐使用第二种,外部的etcd。
参考来源:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/
Master节点的组件
- apiserver
- controller-manager
- scheduler
一个master节点主要含有上面3个组件 ( 像cloud-controller-manager这边就不多做说明了,正常不会用到 )
apiserver: 一个api服务器,所有外部与k8s集群的交互都需要经过它。(可水平扩展)
controller-manager: 执行控制器逻辑(循环通过apiserver监控集群状态做出相应的处理)(一个master集群中只会有一个节点处于激活状态)
scheduler: 将pod调度到具体的节点上(一个master集群中只会有一个节点处于激活状态)
可以看到除了apiserver外都只允许一个 实例处于激活状态(类HBase)运行于其它节点上的实例属于待命状态,只有当激活状态的实例不可用时才会尝试将自己设为激活状态。 这边牵扯到了领导选举(zookeeper、consul等分布式集群系统也是需要领导选举)
Master高可用需要几个节点?失败容忍度是多少?
k8s依赖etcd所以不存在数据一致性的问题(把数据一致性压到了etcd上),所以k8s master不需要采取投票的机制来进行选举,而只需节点健康就可以成为leader。
所以这边master并不要求奇数,偶数也是可以的。
那么master高可用至少需要2个节点,失败容忍度是(n/0)+1,也就是只要有一个是健康的k8s master集群就属于可用状态。(这边需要注意的是master依赖etcd,如果etcd不可用那么master也将不可用)
Master组件说明:
https://kubernetes.io/docs/concepts/overview/components/
部署文档:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/
硬件配置
高可用验证
至此生产可用的k8s集群已“搭建完成”。为什么打引号?因为还没有进行测试和验证,下面给出我列出的验证清单
还有涉及的BGP相关的验证不在此次文章内容中,后续会为大家说明。
写在最后
还有一点需要注意的是物理机的可用性,如果这些虚拟机全部在一台物理机上那么还是存在“单点问题”。这边建议至少3台物理机以上。
为什么需要3台物理机以上?
主要是考虑到了etcd的问题,如果只有两台物理机部署了5个etcd节点,那么部署了3个etcd的那台物理机故障了,则不满足etcd失败容忍度而导致etcd集群宕机,从而导致k8s集群宕机。
猜你喜欢
- 2024-10-13 minio分布式集群的搭建(minio分布式存储现在已弃用)
- 2024-10-13 Spring Cloud Alibaba——docker-compose搭建nacos1.4.0集群
- 2024-10-13 nginx负载均衡http flink集群端口配置的完整的nginx.conf文件
- 2024-10-13 Nginx负载均衡(nginx负载均衡有哪几种方式)
- 2024-10-13 Nacos集群搭建(nacos集群搭建打开网页提示未找到请求怎么回事)
- 2024-10-13 K8S云管理平台集群配置说明(k8s部署consul集群)
- 2024-10-13 一线开发大牛教你如何使用Kubernetes部署分布式集群
- 2024-10-13 Nginx、Keepalived高可用集群解决方案,安装配置
- 2024-10-13 集群部署看过来,低代码@AWS智能集群的架构与搭建方案
- 2024-10-13 基于Linux自己初步搭建Kubernetes(k8s)集群基础,详细教程
你 发表评论:
欢迎- 最近发表
-
- Oracle 在其新的 Linux 内核中引入了热补丁功能
- CentOS 7.6下安装Oracle 11.2.0.4
- ORACLE体系 - 2(oracle体系讲解)
- ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
- Hadoop自学系列集(二) ---- CentOS下安装JDK
- 如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 搭建Oracle数据库服务器(oracle服务器创建用户)
- OGG同步到Kafka(oggforbigdata到kafka)
- oracle是什么软件?(oracle是干什么用的)
- 脚本化修改Oracle用户的密码以及执行sql(增删改查等)
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)