写点什么

教你如何在混合云环境中扩展 Kubernetes

  • 2020-04-23
  • 本文字数:2728 字

    阅读完需:约 9 分钟

教你如何在混合云环境中扩展Kubernetes

引言

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


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


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


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


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


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

跨云扩展的挑战

你已经决定使用云了,所以让我们回过头来思考一下最初的问题。您的应用程序具有针对您的应用程序的微服务部署架构,这一架构上运行着需要扩展的容器。而这,就是 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/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 平台可能非常适合您。


2020-04-23 17:22604

评论

发布
暂无评论
发现更多内容

现代成本会计:企业经济管理的重要环节

智达方通

全面预算管理 成本会计

PostgreSQL技术内幕(十五):深度解析PG事务管理和分布式事务

酷克数据HashData

postgresql

SCA与SAST是什么,能为云原生安全提供哪方面的帮助

德迅云安全杨德俊

轻松上手Jackjson(珍藏版)

不在线第一只蜗牛

Python 开发语言

详讲openGauss 5.0 单点企业版如何部署_Centos7_x86

华为云开发者联盟

数据库 开源 华为云 华为云开发者联盟 企业号2024年4月PK榜

反套路打工:王子公主职场图鉴

脑极体

云计算

第一!天翼云领跑中国边缘云laaS市场!

天翼云开发者社区

云计算 云服务

小米一面:电商系统开发遇到了哪些问题?

王磊

Java 面试真题

Sql优化之回表

京东科技开发者

阿里巴巴API接口助力,快速搜索“智能手表”新品,精准获取商品ID

技术冰糖葫芦

API Explorer api 货币化 API 文档

软件测试学习笔记丨搭建远程可视化、可操作的ubuntu系统

测试人

ubuntu 软件测试 测试开发

并发编程中常见的设计模式

高端章鱼哥

一次接口的性能优化之旅

京东科技开发者

奥哲·云枢All in One,“掌舵”数字原生2.0

ToB行业头条

高并发环境下的实现与优化策略

gogo

架构 数据库、

jar包冲突组建设计书

京东科技开发者

通过方法引用获取属性名的底层逻辑是什么?

江南一点雨

Java Lambda mybatis

软件测试学习笔记丨自动化测试策略

测试人

软件测试 自动化测试 测试开发

从零开始学Spring Boot系列-SpringApplication

EquatorCoco

Java Spring Boot 后端

一个库帮你快速实现EF Core数据仓储模式

EquatorCoco

Java 数据库 服务器 ORM框架

中国科技少年的英雄梦想,从一场ICT大赛启程

脑极体

ICT

实力领跑!天翼云位列中国政务属地云市场第一!

天翼云开发者社区

云计算 云服务 云平台

事务隔离:为什么你改了我还看不见?

TimeFriends

第一次面字节,一面很简单,二面被疯狂拷打!

王中阳Go

Go 面试题 大厂面试题 校招 大厂面经

一文快速读懂消息推送的到达率、转化率和卸载率

MobTech袤博科技

淘宝/天猫按图搜索淘宝商品(拍立淘) API接口(商品标题、价格、销量、链接)

技术冰糖葫芦

API Explorer api 货币化 API 文档

QAnything-1.3.0,支持纯python笔记本运行,支持混合检索

有道技术团队

流量见顶了以后,APP为何仍然要使用推送通知?

MobTech袤博科技

MobTech积极参与鸿蒙生态建设,HarmonyOS NEXT鸿蒙星河版产品即将发布

MobTech袤博科技

10年产品经理教你快速提升消息推送的点击率

MobTech袤博科技

微信读书网页版终于能自动阅读了!

前夕

前端 浏览器插件

教你如何在混合云环境中扩展Kubernetes_文化 & 方法_Rancher_InfoQ精选文章