《HarmonyOS:领航者说》技术公开课来啦,大咖分享、实战解码,不容错过 了解详情
写点什么

教你如何在混合云环境中扩展 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:22746

评论

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

Jenkins 如何玩转接口自动化测试?

Liam

测试 jenkins 自动化测试 API 测试框架

顶礼膜拜!阿里内部出品,全网首发Spring Security项目实战搭建

冉然学Java

编程 spring security springboot Spring 框架漏洞

在 Spring Boot 中使用 Dataway 配置数据查询接口

程序员啊叶

Java 编程 程序员 架构 java面试

活动回顾 | 大咖云集“开源安全治理模型和工具”线上研讨会

安势信息

开源安全 供应链攻击 SBOM SLSA 软件供应链安全

上海移动基于亚信科技AntDB完成核心账务数据库的国产化替换

亚信AntDB数据库

AntDB 国产数据库 aisware antdb

重磅来袭!豆瓣评分9.9,万人血书的多线程与高并发v2.0版本

冉然学Java

编程 源码 高并发 线程池 多线程并发

SR-TE的功能架构概述

穿过生命散发芬芳

7月月更 SR-TE

浅谈智能家居应用及传输方式

家和万事兴

物联网,

面试官:小伙子你来说说MySQL底层架构设计

程序员小毕

Java MySQL 数据库 程序员 面试

闭关三月:整理出了这份对标阿里p7的java秋招面试必备指南。

程序员啊叶

Java 编程 程序员 架构 java面试

SpringBoot 遗忘后的简单快速回忆之环境搭建与常见注解

程序员啊叶

Java 编程 程序员 架构 java面试

详解异步任务 | 看 Serverless Task 如何解决任务调度&可观测性中的问题

Serverless Devs

云原生

微信公众号借助小程序云函数实现支付功能

Geek_24ed5f

签约计划第三季

2022年最全大厂面试真题解析:java集合+spring+并发编程+MyBatis

程序员啊叶

Java 编程 程序员 架构 java面试

直播实录 | 37 手游如何用 StarRocks 实现用户画像分析

StarRocks

数据库 大数据

腾讯开源摘星计划培养开源贡献者的实践思考

腾源会

开源 腾源会

你想怎么使用 Serverless 函数计算?(评测赢好礼 )

Serverless Devs

这88道阿里高级岗面试题,刷掉了80%以上的Java程序员

程序员啊叶

Java 编程 程序员 架构 java面试

如何写好设计文档

观测云

NFTScan 与 PANews 联合发布多链 NFT 数据分析报告

NFT Research

区块链 以太坊 NFT

第三届云原生编程挑战赛正式启动,Serverless 赛道邀你参加!

Serverless Devs

版本更新 | 极狐GitLab 15.2 发布飞书通知机器人、多层史诗调整至专业版、实时 Wiki 图表预览和全新设计的合并请求报告

极狐GitLab

git DevOps 敏捷开发 CI/CD 极狐GitLab

KubeMeet 报名 | 「边缘原生」线上技术沙龙完整议程公布!

阿里巴巴云原生

阿里云 容器 云原生 边缘计算

Apache Doris 1.1 特性揭秘:Flink 实时写入如何兼顾高吞吐和低延时

SelectDB

数据库 flink 数据仓库 Doris 数仓

面试被问到 HashMap 底层原理?我有点慌.

程序员啊叶

Java 编程 程序员 架构 java面试

面试官:MySQL如何根据执行计划调优SQL语句?

程序员小毕

Java MySQL 数据库 程序员 面试

传统渲染农场和云渲染农场选择哪个好?

Finovy Cloud

云渲染 GPU服务器

专访亚信科技张桦:AntDB面向企业核心业务支撑的数据库产品

亚信AntDB数据库

AntDB 国产数据库 aisware antdb

算力顶天地,存力纳乾坤:国家超级计算济南中心的一体两面

脑极体

要卖课、要带货,知识付费系统帮你一步搞定!

CRMEB

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