点击上方云原生CTO,选择设为星标
优质文章,每日送达
「」
如何部署具有内置灾难恢复功能的跨云Kubernetes集群本文介绍了如何运行跨越混合云环境的单个Kubernetes集群,使其具有故障恢复能力。它将解释为什么这是必要的,以及如何使用MicroK8s、WireGuard和Netmaker来实现这个架构。好的,准备好了吗?
Kubernetes很难,但你知道什么更难吗?多云、多集群Kubernetes,这是您在生产中运行Kubernetes时不可避免地要处理的问题。
通常,您将至少为任何生产设置部署两个集群:一个作为实时环境,另一个用于故障转移(灾难恢复)。这可能会让你想知道:
“为什么我需要两个集群来处理灾难恢复?我以为Kubernetes有分布式架构?”
正确的!Kubernetes是分布式的!它分布在单个数据中心/区域内。除此之外……没有那么多。
通常,要拥有“高度可用”的基础架构,您最终会部署两个(或更多)集群,最重要的是您必须部署自动化工具来在集群之间移动和复制应用程序,以及某种机制来处理当集群出现故障时进行故障转移。听起来很有趣,对吧?
坚持下去,我们将通过一种不那么痛苦的方式来处理灾难恢复(以及混合工作负载,就此而言),这种方法不需要额外的工具,并且可以在单个集群中执行。
分布式集群——MicroK8s和Netmaker存在三个限制通常会阻止您跨环境使用单个集群:
「Etcd」:它是集群的大脑,不能容忍延迟。在地理上分离的环境中运行它是有问题的。
「网络」:集群节点需要能够直接且安全地相互通信。
「延迟」:对于企业应用程序来说,高延迟是不可接受的。如果基于微服务的应用程序跨越多个环境,您最终可能会获得次优的性能。
我们可以用MicroK8s和Netmaker解决所有三个问题:「Etcd」:Etcd是Kubernetes的默认数据存储,但它不是唯一的选择。MicroK8s默认运行Dqlite。Dqlite具有延迟容忍性,允许您运行相距很远的主节点而不会破坏集群。
「网络」:Netmaker易于与Kubernetes集成,并通过WireGuard创建扁平、安全的网络,供节点进行通信。
「延迟」:Netmaker是可用的最快的虚拟网络平台之一,因为它使用内核WireGuard,对网络性能的降低可以忽略不计(与OpenVPN等选项不同)。此外,我们可以使用Kubernetes的内置放置策略将应用程序组合到同一数据中心的节点上,从而消除跨云延迟问题。
所以,现在我们有了答案。通过运行MicroK8s和Netmaker,您可以消除复杂的、传统的、多集群部署。您可以用更少的工作和更简单的架构获得相同的结果。
话不多说,让我们付出行动吧!
设置我们的环境我们将使用三个环境。这确保了如果任何一个环境出现故障,我们的master节点仍然可以形成共识。
你会注意到我们不会区分master和worker。那是因为在MicroK8s中,每个节点都有一个控制平面的副本,所以真的没有区别。我们的集群布局
数据中心:2个节点(datacenter1、datacenter2)DigitalOcean(区域1):1个节点(do1)DigitalOcean(区域2):1个节点(do2)
我们有两个数据中心节点和两个云节点,可用于故障转移。
我们将DigitalOcean用于我们的云节点,因为它们的带宽成本最低。根据您的云提供商的不同,数据传输成本可能会快速增加。DigitalOcean的带宽定价非常合理,您应该能够运行您的集群而根本不会产生额外的成本。
我们所有的节点都运行Ubuntu20.04,在运行本教程之前,每个节点都应该安装WireGuard。
aptinstallwireguardwireguard-tools节点1:seed
SSH到您的第一个节点,该节点将充当集群的“seed”,因为它将设置Netmaker并建立将在其他节点上运行的网络。此节点应可公开访问。我们正在使用do1:
sshroot
do1snapinstallmicrok8s--classicmicrok8senablednsingressstorage您会注意到我们使用的是内置MicroK8s存储。对于生产设置,您可能需要更强大的东西,比如另一个MicroK8s插件openebs。接下来,确保您已将通配符DNS设置为指向这台机器。例如,在Route53中,您可以为*.kube.mydomain.