业务场景:

        解决服务同城,异地多活灾备.

环境:

        a机房

                私网 : 192.168.1.0/24

                公网ip : 111.111.111.111 

         b机房

                 私网 : 192.168.2.0/24

                  公网ip : 222.222.222.222

         c机房 

                  私网 : 192.168.3.0/24

                  公网ip :333.333.333.333

        组网公网宽带50M以上,与业务宽带分离

1 组网 

        a机房的公网ip上通过dnat映射内网58080端口至公网ip111.111.111.111上

        b,c同理

        生成wg配置,详见上篇<<wireguard full mesh组网>>

         结果: a,b,c机房构建基于wg的虚拟vpn网络172.20.1.1/16,

                异机房节点通过公网ip通信,同机房节点需要手动修改endpoint为内部地址,以减少公网负载,提升性能

2 安装k8s集群

        GitHub - easzlab/kubeasz at 3.0.1

        拉取以上代码

        修改https://github.com/easzlab/kubeasz/blob/3.0.1/roles/flannel/templates/kube-flannel.yaml.j2

         该模板的194行,新增一行指定网卡名称(wg0根据实际网卡名称修改)

          - --iface=wg0

          然后根据https://github.com/easzlab/kubeasz/blob/3.0.1/docs/setup/00-planning_and_overall_intro.md

          安装即可

           注意: etcd集群应该均匀分布于三个机房,master同理

3 出口,数据库等规划

           为存储性能的保证,不建议使用跨机房的网络存储,机房内使用私网ceph作为集群存储实现

           出口通过ingress集群实现,ingress出口dnat带入网公网ip,每个机房标记一台节点,将ingress服务以  DaemonSet形式部署,至此,将有三个服务入口,以dns解析处理多活选择性问题.

           数据库以mysql多活(三节点)形式,pg主从(三节点)部署,三节点分处于三个机房,将数据库主节点在的机房调整为对外服务,通过主节点判断触发器与云上dns服务的api结合实现,整体待实践

            原则上除了必要同步的数据,应用层不允许跨机房调用,以给数据库服务腾空间.

4 容灾实现

        当a机房故障时,监测机制报警,通过脚本/api触发数据库主节点切换,触发云上dns解析切换,b/c机房上位

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐