高可用的K8S集群部署方案
阅读目录
以上是最小生产可用的整体拓补图(相关节点根据需要进行增加,但不能减少)按功能组划分
- 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层代理能力的服务后续会更容易维护和扩展。推荐配置
用途 数量 CPU 内存 Keepalive 2 4 4GB HAProxy 2 4 4GB etcd
etcd是一个采用了raft算法的分布式键值存储系统。
这不是k8s专属的是一个独立的分布式系统,具体的介绍大家可以参考官网,这边不多做介绍。
我们采用了 static pod的方式部署了etcd集群。失败容忍度
最小可用节点数:(n/2)+1,下面是一个参考表格,其中加粗的是推荐的节点数量:
| 总数 | 最少存活 | 失败容忍 |
| :--: | :--: | :--: |
| 1 | 1 | 0 |
| 2 | 2 | 0 |
| 3 | 2 | 1 |
| 4 | 3 | 1 |
| 5 | 3 | 2 |
| 6 | 4 | 2 |
| 7 | 4 | 3 |
| 8 | 5 | 3 |
| 9 | 5 | 4 |推荐配置
括号内是官方推荐的配置
用途 数量 CPU 内存 etcd 3 4 (8~16) 8GB (16GB~64GB) 官网:
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/- SLB