Kubernetes 是一个开源平台。 那么,您可能会认为它是一个与供应商无关的平台,这意味着您可以轻松地从一个 Kubernetes 实现转移到另一个。
但你错了。 实际情况是,许多 Kubernetes 解决方案(特别是与特定公共云绑定的解决方案)与供应商的相关性远比您想象的要低。
幸运的是,如果您想避免锁定,这并不意味着您不能利用公共云作为 Kubernetes 托管解决方案。 你可以,但是你必须以一种方式设计你的 Kubernetes 策略,使你摆脱被锁定在特定云提供商的 Kubernetes 服务中,同时仍然使你能够享受基于云的 Kubernetes 的优势。
如今,所有主要的公共云都通过 SaaS 架构提供托管的 Kubernetes 服务。 亚马逊有 Elastic Kubernetes 服务。 Azure 提供 Azure Kubernetes 服务。 Google 提供 Google Kubernetes Engine。 IBM 有 IBM Cloud Kubernetes Service。
由于这些服务将基于云的基础设施与有助于自动化 Kubernetes 部署和管理的软件结合在一起,因此对于希望快速启动和运行 Kubernetes 的组织来说,它们是一个有吸引力的解决方案。
这些云 Kubernetes 服务看似不可知的事实也增加了它们的吸引力。 从表面上看,从一个 Kubernetes SaaS 平台转移到另一个 Kubernetes SaaS 平台似乎很容易。 所有这些平台都基于标准的开源 Kubernetes。 它们提供对相同 Kubernetes 工具(如 kubectl)的访问,并且通常支持相同类型的存储和网络配置。 从这个角度来看,他们看起来与供应商无关。
然而,当你深入挖掘时,你会意识到提供 Kubernetes 作为托管服务的公共云并不像它们看起来那么灵活和通用。 它们以各种方式集成并依赖于托管它们的公共云中运行的其他服务。 您必须在使用的任何云上创建 IAM 策略来管理您的 Kubernetes 集群。 您最终可能会使用特定于供应商的服务(例如 Azure Kubernetes 服务中的 Azure Active Directory)进行身份验证。 在很多情况下,Kubernetes 服务会推荐您使用附加工具或替代工具,即使它们并不严格要求这些工具。 例如,Google Kubernetes Engine 希望您使用 gke-deploy 而不是 kubectl,而 Elastic Kubernetes Service 则设计用于亚马逊的专有工具 eksctl。
因此,尽管无论您使用哪个云来托管 Kubernetes,底层 Kubernetes 代码可能都是相同的,并且如果您真的尝试过,您在技术上可以坚持使用通用工具,但您最终很可能会使用的工具和配置并不是与供应商无关的。 它们特定于您所使用的 Kubernetes 服务。
如果您想从 Azure Kubernetes 服务迁移到 Google Kubernetes Engine,这将会造成重大障碍。 即使您可以提升和转移 Kubernetes 工作负载,但您也无法对支持它们的工具链和配置文件执行相同的操作。
如果您想在部署 Kubernetes 集群时利用公有云的便利性和可扩展性,但又不想被锁定,那么有两种基本解决方案。
一种是使用基于云的虚拟机手动设置自己的集群,然后自行管理。 采用这种方法,您无法获得云提供商的 SaaS Kubernetes 产品附带的自动化和集成,但您仍然可以获得基础设施。 因为您没有使用专门的工具,所以可以更轻松地将集群从一个云主机迁移到另一个云主机,而无需重建所有内容。 当然,这里的缺点是需要大量的手动工作来设置和管理集群。
另一种方法(更加自动化和可扩展)是使用像 Volterra 的VoltStack®服务这样的解决方案来管理您的集群,无论它们驻留在哪个云上。 通过这种策略,您基本上可以用可与任何公共云配合使用的集中式命令和控制中心替换每个供应商平台的特定于云的工具,从而可以轻松地在不同的公共云之间迁移或复制集群。 您可以获得与 Google Kubernetes Engine 和 Azure Kubernetes Engine 等服务相同的可管理性,而无需锁定特定的公共云。
不要错误地认为无论在哪里或如何运行 Kubernetes 都是 Kubernetes。 不同基于云的 Kubernetes 服务之间存在很大差异,这可能会阻碍 Kubernetes 集群从一个云到另一个云的可移植性(更不用说难以管理不同云上的集群,因为每个云都有一组不同的工具)。
好消息是有一个解决方案:通过使用与云无关的 Kubernetes 管理解决方案(如 Volterra 的VoltStack服务)来管理您的所有集群,您可以摆脱对特定云提供商的依赖,同时仍然可以享受基于云的 Kubernetes 的易用性。