之前使用过 minikube 搭建过 k8s 玩具集群,最近想尝试一下搭建高可用集群。由于高可用集群至少需要三台 2C2G 的机器,一开始尝试使用本机的虚拟机搭建,但后面搭建过程中三台较高配的虚拟机高负载运行导致电脑死机。后面把目光转向云服务。阿里云和华为云都提供抢占式按时付费的 ECS,而腾讯云则没有,比较一下价格阿里云总体价格最便宜,所以就决定以阿里云抢占式 ECS 为基础尝试搭建一个 k8s 高可用集群。

总体架构

总体的架构就是在一个专用网络上 ECS 的互通来搭建集群。

k8s 搭建 fabric_阿里云

原本以为这个和在本地使用虚拟机以及本地机器连同一样简单,没想到有一堆的坑在等着我。

专有网络(VPC)坑

Keepalived 广播模式不能使用

VPC 是不支持组播和广播的,一开始 Keepalived 使用默认配置用的是广播方式,按照默认的配置会导致所有主机都认为自己是 Master。

默认情况下 VIP 不可达

没有在 VPC 上注册的 IP 都不可达,HaVip 是公测功能,需要单独开通, HaVip 需要绑定到机器上才能使得 VIP 可达,而且 HaVip 只能绑定两台机器,限制很大。

SLB 坑

由于上面 VPC 的坑,我就放弃了自己用 keepalived + haproxy 搭建负载均衡的想法,打算直接使用阿里云自带的 SLB 做负载均衡,没想到又从一个坑掉到另一个坑。

SLB 做以下的负载均衡

k8s 搭建 fabric_云计算_02

SLB 不能回环访问

搭好了 SLB 并配置好之后,就开始搭建,然后在 10.0.0.1 上 ping SLB 是能够 ping 通的,然后使用 telnet SLB 监听端口则不通。最终就导致了,我在负载均衡的机器上不能通过负载均衡来访问自身服务。在网上找到一些资料说这是 SLB 的一些限制。而且 SLB 的调试手段并不友好,基本的网络调试工具也没有。

这个限制我觉得非常限制我的系统,所以放弃了使用 SLB。

最终方法

单独申请了 HaVip,本以为申请很麻烦,要审批什么的,没想到很挺快,随申随用。

使用 Keepalived 的单播模式(就是指定 unicast_src_ip 和 unicast_peer)加上自己搭建 HaProxy 的方式自己搭建 SLB。自己搭建的 SLB 能够回环访问,十分的方便。

k8s 搭建 fabric_阿里云_03

最终也没搞明白为什么阿里云的 SLB 不允许回环访问。

总结

上云需谨慎,实施时真的要找相关云的专家做方案评审,不然浪费时间又出不了效果。

像 VPC 宣传时说可以完全掌握自己的专有网络,一开始就想是不是就是一个专属的 vSwitch 自己怎么玩都行,没想过它既不支持广播和组播。自己动态配置的 IP 都是不可达的,一定要使用 HaVip 绑定才行。

还有 SLB,一般的 SLB 就是四层的负载均衡器, LVS + Haproxy 搭建,如果自己搭建的也不会想到限制回环访问这种操作。