38

混合云环境中扩展Kubernetes的挑战及方案

 4 years ago
source link: http://dockone.io/article/8306?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

流量突增时,我们需要扩展应用程序以满足用户需求。本文分享了扩展Kubernetes以及管理混合云环境时可能遇到的挑战,以及如何简单高效地完成Kubernetes扩展。

b6zyMz7.jpg!web

------------

引 言

假设您的业务是在线的:您拥有自己的数据中心,拥有用于运行您网站的私有云。您需要部署许多服务器来运行应用程序并存储其数据。

也许大多数时候,您的网站的整体流量非常稳定。但也许也有时候,网站的流量会面临突然的增长,这时您该如何应对?

首先,您需要能够扩展应用程序,以应对流量增加。若您不想在每年只使用几次的新硬件上额外花钱,您可以考虑转向混合云模式。

从私有云转向混合云,可以大大节省时间和成本。将应用程序(部分)扩展到公有云后,您就只需在使用它们时、仅为您所使用的资源付费。

但是,您该如何选择公有云?您可以选择多个公有云吗?

简短来说,回答是肯定的,您很有可能需要选择多个公有云提供商。您也许有不同的团队,需要处理不同的应用程序,有不同的要求,因此一个云提供商可能无法满足您的所有需求。此外,许多组织需要遵守某些法律、法规和政策,这些法律、法规和政策要求他们的数据必须实际驻留在某些特定地点。使用多个公有云的策略可以帮助组织满足这些严格的、多样化的要求。他们还可以从多个数据中心区域或可用区域中进行选择,以尽可能接近最终用户,从而为他们提供最佳性能和最小延迟。

跨云扩展的挑战

你已经决定使用云了,所以让我们回过头来思考一下最初的问题。您的应用程序具有针对您的应用程序的微服务部署架构,这一架构上运行着需要扩展的容器。而这,就是Kubernetes发挥作用的地方。Kubernetes这一解决方案,可帮助您管理和编排节点集群中的容器化应用程序。虽然Kubernetes将帮助您管理和扩展部署、节点和集群,但它无法帮助您轻松地跨云提供商管理和扩展它们。这一点我们会在稍后详细介绍。

Kubernetes集群是一组机器(物理/虚拟),Kubernetes为集群提供资源以运行应用程序。首先,您需要了解的基本Kubernetes概念是:

Pod是控制一个或多个容器的单元,它会作为一个应用程序来被调度。通常,您应该为每个应用程序创建一个Pod,以便您可以单独扩展和控制它们。

节点组件是Kubernetes中的worker machine。节点可以是虚拟机(VM)或物理机,具体取决于集群。每个节点都包含运行pod所需的服务,并由主组件管理。

主组件管理着Pod的生命周期。如果Pod死亡,Controller会创建一个新的Pod;如果你对Pod进行扩容或缩容,那么Controller会创建/销毁你的Pod。有关Controller类型的更多信息,可以参阅此处:

https://kubernetes.io/docs/con ... aset/

这三个组件的作用是扩展和调度容器。主组件指示调度和扩容的命令,然后节点相应地根据命令来编排pod。

22y2AjF.jpg!web

上述只是Kubernetes非常基础的概念,这篇《零基础入门│带你理解Kubernetes》可以带你更详细地理解Kubernetes。

尝试使用Kubernetes解决跨云扩展的问题时,会遇到一些关键挑战:

  • 难以管理多个云、多个集群,设置用户,设置策略
  • 安装和配置的复杂性
  • 不同环境的用户或团队会有不同体验

Rancher可以帮助您解决上述难题。Rancher是一个开源的容器管理平台,用于在生产中运行Kubernetes。Rancher的下述功能可以帮助我们管理和扩展我们的应用程序,无论计算资源是在本地托管还是在多个云上托管:

  • 跨多个集群和云的通用基础架构管理
  • 简单易用的Kubernetes配置和部署界面
  • 一键轻松扩展Pod和集群
  • 访问控制和用户管理(ldap,AD)
  • 工作负载、RBAC、政策和项目管理

在多云、甚至有可能是多个任何可以运行Kubernetes的基础架构上,Rancher都可以成为您的多个Kubernetes集群的单一控制点。

下面让我们看看我们如何管理两个不同区域的多个Kubernetes集群。

启动Rancher 2.0实例

首先,启动Rancher 2.0实例。具体方法可以参照这个快速上手指南: https://rancher.com/quick-start/

上手Rancher和Kubernetes

让我们在两个不同的地区的GCP中创建两个托管的Kubernetes集群。为此,您需要一个服务帐户密钥。

在Global选项卡中,我们可以看到所有可用的集群及其状态。从Provisioning状态开始,集群准备好后,状态会变成Active。

i2ENJf6.jpg!web3QBZFzz.jpg!web

现在我们已经从Kubernetes集群中为每个节点部署了许多pod。这些pod将由Kubernetes和Rancher的内部系统使用。

下面继续为两个集群部署工作负载。按顺序选择默认项目; 这将打开Workloads选项卡。单击Deploy,将第一个集群的名称及Docker镜像设置为httpd,第二个集群的设置为nginx,因为我们希望将我们的Web服务器暴露给Port映射区域。选择一个四层负载均衡中的Internet流量。

ea6bmua.jpg!webeEzimuI.jpg!webUvYFryR.jpg!webmQnmuiV.jpg!web

如果单击nginx / httpd工作负载,您将看到Rancher实际上按照Kubernetes的建议创建了一个部署来管理ReplicaSet。您还将看到这个ReplicaSet创建的Pod。

扩展Pod和集群

Rancher实例正在管理两个集群:

  • us-east1b-cluster,运行5个httpd Pod
  • europe-west4-a cluster,运行1个 nginx Pod

单击Scale列下的“-”(减号图标),可以减少httpd Pod。我们很快就看到Pod数量减少了。

2EZBRvB.jpg!webeyiu6bv.jpg!web

若想要扩展pod,请单击Scale列下的“+”(加号图标)。完成后,您可以立即看到Pod正在被创建,以及ReplicaSet正在扩展事件。使用Pod的右侧菜单尝试删除其中一个pod,留意观察ReplicaSet如何重新创建它,以匹配所需的状态。

zqemMvF.jpg!webAnUJBvu.jpg!web

如此一来,第一个集群的httpd Pod数从5个变到了2个,第二个集群的nginx Pod从1个变到了7个。现在,第二个集群看起来几乎耗尽了资源。

jq6BNv2.jpg!web

通过Rancher,我们还可以通过添加额外的节点来扩展集群。下面尝试这样做一下,让我们将节点数编辑为5。

mauUBba.jpg!web

虽然是Rancher向我们展示了“协调集群”,但其实是Kubernetes在幕后升级集了群主服务器并调整节点池的大小。

3ER36vb.jpg!web

稍等一下,最终你应该看到5个节点启动并运行。

32Aje22.jpg!web

让我们检查一下Global选项卡,这样我们就可以对Rancher正在管理的所有集群有一个全局的了解。

umMRJrY.jpg!web

现在我们可以添加更多Pod(如果我们想的话),因为现在我们有新的可用资源了。下面试着把pod数变为13。

MVbu2eA.jpg!web

最重要的是,所有这些操作都是在没有停机的情况下完成的。在向上或向下扩展Pod或调整集群大小时,为httpd / nginx部署命中公有IP,HTTP响应状态代码始终为200。

AB3AVnB.jpg!webyMNJf2q.jpg!web

总 结

让我们回顾一下我们的Kubernetes集群缩放练习:

  • 我们使用Rancher创建了两个集群
  • 我们部署了含有1个 nginx Pod和5个httpd Pod的工作负载
  • 对这两个部署进行扩容和缩容
  • 调整了集群的大小

所有这些操作,都是通过在Rancher友好且直观的UI上,通过一些简单点击而完成的。当然,您也可以完全使用API完成这些操作。

在任何一种情况下,您都有一个中心点,您可以从中管理所有Kubernetes集群,观察其状态或根据需要扩展部署。如果您正在寻找一种工具来帮助您在混合/多云、多区域集群中进行基础架构管理和容器编排,那么开源的Rancher Kubernetes平台可能非常适合您。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK