写点什么

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

评论

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

MegEngine 动态执行引擎-Imperative Runtime 概述

MegEngineBot

深度学习 开源 动态图 MegEngine

看过才知道,这套SpringCloudAlibaba笔记,把微服务玩的出神入化!

程序知音

Java 微服务 SpringCloud java架构 后端技术

国外云主机:为你的业务提供全球级托管!

一只扑棱蛾子

云主机

TDengine 合作伙伴 +1,这次是「DaoCloud道客」

爱倒腾的程序员

涛思数据 时序数据库 ​TDengine

华为云GaussDB,如何给世界一个更优选择?

YG科技

运维人员福音!自定义插件为运维提供更多可能

嘉为蓝鲸

#运维 Python运维 Linux 运维

详解驱动开发中内核PE结构VA与FOA转换

华为云开发者联盟

开发 华为云 驱动开发 华为云开发者联盟 企业号 6 月 PK 榜

肝到爆!通过Canal如何优雅的将MySQL同步到ES?

Java全栈架构师

Java MySQL 程序员 后端 ES

2023上海国际嵌入式展 | 如何通过人工智能驱动的自动化测试工具提升嵌入式开发效率

龙智—DevSecOps解决方案

嵌入式 嵌入式软件 嵌入式设计 嵌入式开发

Postman 前后端都适用吗?

Liam

前端 后端 开发 Postman API

如何保障医疗机器人的功能与安全?这几条编码标准你一定要了解

龙智—DevSecOps解决方案

医疗机器人 编码标准

打卡有礼!快来 2023 开放原子全球开源峰会找龙蜥玩~

OpenAnolis小助手

开源 操作系统 龙蜥社区 开放原子全球开源峰会 龙蜥实验室

提升效率:P4VFS让虚拟文件同步更迅速、更简单

龙智—DevSecOps解决方案

文件同步 虚拟文件同步 Virtual File Sync

软件测试丨Allure2报告中添加用例支持tags标签、失败重试功能

测试人

程序员 软件测试 测试开发 测试用例 Allure

NFT全链游戏dapp系统开发合约定制

开发v-hkkf5566

【羊城晚报】WeOps智慧护航,传媒“领头羊”业务迈向新高度

嘉为蓝鲸

IT运维 传媒 传媒公司

SpringBoot 升级所踩过的坑 (二)

技术小生

6 月 优质更文活动

华为云GaussDB,如何为企业数字创新保驾护航?

YG科技

优质高效!阿里内部超高质量的k8s+Jenkins笔记,技术与实战齐飞

程序知音

PAG动效框架源码笔记 (五)渲染流程

olinone

ios android 动效 渲染

做开发5年,这8个高效开发好习惯我悟了🔥

引迈信息

程序员 前端 低代码 JNPF

怎样区分试验与仿真的关系?

思茂信息

仿真软件 仿真技术

再也不怕“卡脖子”了?华为云数据库GaussDB究竟有什么神奇功能?

YG科技

聚焦 AIGC,函数计算为 AI 应用插上腾飞翅膀

Serverless Devs

Serverless FC AIGC

想让ChatGPT和低代码开发实现完美结合?看这篇文章就行!

加入高科技仿生人

低代码 数字化 ChatGPT

中企出海管理难,复杂的国际形势下怎么用对人?

用友BIP

中企出海

下载量破 15000!龙蜥社区登陆阿里云 ACR 制品中心 TOP5 榜单

OpenAnolis小助手

阿里云 操作系统 容器镜像 龙蜥社区 Dragonwell

软件测试/测试开发丨Allure2报告中添加附件-图片

测试人

程序员 软件测试 测试开发 Allure

备战金九银十:大厂面试官必问MySQL连环炮全梳理,你扛得住嘛?

程序员小毕

Java MySQL 数据库 程序员 面试

嘉为蓝鲸研运一体化解决方案入选“鑫智奖”

嘉为蓝鲸

智能硬件 蓝鲸 金融数据

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