之前使用过 minikube 搭建过 k8s 玩具集群,最近想尝试一下搭建高可用集群。由于高可用集群至少需要三台 2C2G 的机器,一开始尝试使用本机的虚拟机搭建,但后面搭建过程中三台较高配的虚拟机高负载运行导致电脑死机。后面把目光转向云服务。阿里云和华为云都提供抢占式按时付费的 ECS,而腾讯云则没有,比较一下价格阿里云总体价格最便宜,所以就决定以阿里云抢占式 ECS 为基础尝试搭建一个 k8s 高可用集群。
总体架构
总体的架构就是在一个专用网络上 ECS 的互通来搭建集群。
原本以为这个和在本地使用虚拟机以及本地机器连同一样简单,没想到有一堆的坑在等着我。
专有网络(VPC)坑
Keepalived 广播模式不能使用
VPC 是不支持组播和广播的,一开始 Keepalived 使用默认配置用的是广播方式,按照默认的配置会导致所有主机都认为自己是 Master。
默认情况下 VIP 不可达
没有在 VPC 上注册的 IP 都不可达,HaVip 是公测功能,需要单独开通, HaVip 需要绑定到机器上才能使得 VIP 可达,而且 HaVip 只能绑定两台机器,限制很大。
SLB 坑
由于上面 VPC 的坑,我就放弃了自己用 keepalived + haproxy 搭建负载均衡的想法,打算直接使用阿里云自带的 SLB 做负载均衡,没想到又从一个坑掉到另一个坑。
SLB 做以下的负载均衡
SLB 不能回环访问
搭好了 SLB 并配置好之后,就开始搭建,然后在 10.0.0.1 上 ping SLB 是能够 ping 通的,然后使用 telnet SLB 监听端口则不通。最终就导致了,我在负载均衡的机器上不能通过负载均衡来访问自身服务。在网上找到一些资料说这是 SLB 的一些限制。而且 SLB 的调试手段并不友好,基本的网络调试工具也没有。
这个限制我觉得非常限制我的系统,所以放弃了使用 SLB。
最终方法
单独申请了 HaVip,本以为申请很麻烦,要审批什么的,没想到很挺快,随申随用。
使用 Keepalived 的单播模式(就是指定 unicast_src_ip 和 unicast_peer)加上自己搭建 HaProxy 的方式自己搭建 SLB。自己搭建的 SLB 能够回环访问,十分的方便。
最终也没搞明白为什么阿里云的 SLB 不允许回环访问。
总结
上云需谨慎,实施时真的要找相关云的专家做方案评审,不然浪费时间又出不了效果。
像 VPC 宣传时说可以完全掌握自己的专有网络,一开始就想是不是就是一个专属的 vSwitch 自己怎么玩都行,没想过它既不支持广播和组播。自己动态配置的 IP 都是不可达的,一定要使用 HaVip 绑定才行。
还有 SLB,一般的 SLB 就是四层的负载均衡器, LVS + Haproxy 搭建,如果自己搭建的也不会想到限制回环访问这种操作。