用Kubernetes解决容器的混乱(上)
存在的问题。你需要精心准备比Dockerfiles更多的东西来将其应用于生产——管理所有容器的容器编排系统。
问题
让我们来看一个相对简单的应用程序,一个使用PHP和MySQL的、数据库驱动的Web应用程序。你想到的第一个解决方案可能是分解所有HTTP职责,例如将API和前端用户界面(UI)投放到一个容器中,将所有后端存储投放到另一个容器中。
那么,你看下面两个图:
如果要扩展这个架构,很容易,你可以添加前端容器的更多副本。 接下来的两个图显示具有单个后端的单个前端,以及具有单个后端的多个前端:
还有人指出,在临时容器上运行MySQL持久性数据存储是次优的,因为当容器关闭时你就丢失了数据。 要解决这个问题,你可以向位于该容器外部的一个容器添加持久存储卷。 运行MySQL的容器可以关闭而不会带走你的数据。
现在,你可以扩展容器解决方案,并使用更多的容器来处理更大的负载。
现在你有一个很棒的容器解决方案,能够处理大量的流量,但它是基于一个谎言的。说成谎言可能有点不公平,那就说它是基于抽象的。容器仍然在拥有有限资源的机器上运行,因此我们希望该工作在多个机器之间分割。 如果其中一台机器出现故障,需要移动容器,该怎么办?
现在的设置增加了很多复杂性,但你仍然需要维护单个的机器,处理正常运行时间和移动资源。
解决方案:容器编排
你喜欢用一种系统来管理所有需要运行容器的裸机或虚拟机。你也会喜欢这样的系统——它可以管理你的容器,在底层机器上启动容器,确保容器是分布式的,并保持容器的健康。这是被称为容器编排系统的系统,Kubernetes就是一个这样的系统。
当讨论容器和Kubernetes时,有两个概念非常重要。
一、临时计算
服务器故障。堆栈溢出。当你每天为数百万个请求提供服务时,总会有问题发生。不要试图避免问题,你应该设计应用程序来处理问题。所以你应该明白在容器中运行的任何东西都可能离开,并被该容器的另一个新版本替换。
有很多隐喻来形容这种情况,最常见的是“宠物与牛”——宠物是指服务器,它们像养的狗、猫等。你给它们取名,好好照顾,当它们半夜生病时,你照顾它们。用容器时你可不想这样。相反,你想要的服务器是可以像牛一样的:可以大量运行,不用每个有名字,生病了不用那么费神。
二、期望状态
期望状态是所谓的命令式指令的对应物,它是一个很长的脚本语言。当我们写脚本时,事情发生,因为我们列出具体的步骤,等待它们完成。你可以创建新的:
带有代码更新的图像
SQL数据库
API服务器
前端服务器
如果有一个步骤失败,该进程停止,应用程序不启动。如果其中一台机器在启动后发生故障,必须重新启动它。
期望状态(或声明)意味着:“描述你想要什么设置,系统将使它发生”。所以,不是写出步骤,而是告知:
“我想要1个数据库的副本。
我想要2个API服务器的副本。
我想要3个前端服务器副本。”
声明性系统确保始终有许多副本在运行。如果一个发生故障,系统重新启动另一个。如果太多副本正在运行,系统会杀死多余的。现在你必须改变应用程序。如果API服务器在SQL数据库之前启动,你可能会遇到SQL连接错误。你希望确保向系统添加渐进重试。但这些变化是直接的,在许多情况下已经是最佳实践。
本文转移K8S技术社区-用Kubernetes解决容器的混乱(上)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何为Kubernetes配置Pod水平自动扩展
干货教程!教你如何在K8S上实现根据CPU等实际使用量与用户的期望值进行比对,实现部署的自动扩展和缩减! 介 绍 Kubernetes有一个强大的功能,它能在运行的服务上进行编码并配置弹性伸缩。如果没有弹性伸缩功能,就很难适应部署的扩展和满足SLAs。这一功能称为Horizontal Pod Autoscaler (HPA)。 为什么使用HPA 使用HPA,您可以根据资源的使用情况或者自定义的指标,实现部署的自动扩展和缩减,让部署的规模接近于实际服务的负载。 HPA可以为您的服务带来两个直接的帮助: 在需要计算和内存资源时提供资源,在不需要时释放它们 按需增加/降低性能以实现SLA HPA工作原理 HPA会根据监测到的CPU/内存利用率(资源指标),或基于第三方指标应用程序(如Prometheus、Datadog等)提供的自定义指标,自动调整副本控制器、部署或者副本集合的pods数量(定义最小和最大pods数)。HPA是一种控制回路,它的周期由Kubernetes的controller manager –horizontal-pod-autoscaler-sync-period标志控制...
- 下一篇
用K8S解决容器的混乱(下)
Kubernetes编排 Kubernetes(K8S)是一个开源容器编排系统,它使用期望状态理念来运行所有的应用程序容器。Kubernetes是由Google创建的,旨在集合工程师们在过去10年中构建自己容器编排系统(Brog)所获得的经验。Kubernetes不是这个系统的端口或转换。相反,它本意是尝鲜,开始就想避免错误并分享经验。它从与RedHat、CoreOS、IBM、Mesosphere和Microsoft的合作中受益匪浅。 Kubernetes有很多组件,下面探讨一些最为重要的。 容器 容器是Kubernetes中的“亚原子”组件,这意味着你不会只运行一个容器,因为它们必须在一个称为pod的控制结构中运行。但是你可以用与在Docker中一样的方式,来基于Dockerfiles运行Docker映像。我经常用Makefiles在Docker中运行一个容器来进行开发,然后将它启动到Kubernetes中进行生产。 Pod Pod是Kubernetes的“原子”单位。Kubernetes的其他组件启动一个或多个pod,或将一个或多个pod连接到网络。Pod由一个或多个容器组成。在...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题