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

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


引 言面试

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

也许大多数时候,您的网站的总体流量很是稳定。但也许也有时候,网站的流量会面临忽然的增加,这时您该如何应对?架构

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

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

可是,您该如何选择公有云?您能够选择多个公有云吗?工具

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

跨云扩展的挑战网站

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

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

Pod是控制一个或多个容器的单元,它会做为一个应用程序来被调度。一般,您应该为每一个应用程序建立一个Pod,以便您能够单独扩展和控制它们。

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

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

https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/

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

上述只是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。

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

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

若是单击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数量减小了。

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

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

经过Rancher,咱们还能够经过添加额外的节点来扩展集群。下面尝试这样作一下,让咱们将节点数编辑为5。

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

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

让咱们检查一下Global选项卡,这样咱们就能够对Rancher正在管理的全部集群有一个全局的了解。

如今咱们能够添加更多Pod(若是咱们想的话),由于如今咱们有新的可用资源了。下面试着把pod数变为13。

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

总 结

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

  • 咱们使用Rancher建立了两个集群

  • 咱们部署了含有1个 nginx Pod和5个httpd Pod的工做负载

  • 对这两个部署进行扩容和缩容

  • 调整了集群的大小

全部这些操做,都是经过在Rancher友好且直观的UI上,经过一些简单点击而完成的。固然,您也能够彻底使用API完成这些操做。

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

相关文章
相关标签/搜索