[EWS系列分享]容器集群管理系统模型杂谈

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 前记     在开始动手设计EWS(即TAE3.0)之时, 我们参考了诸如swarm, kubernetes, mesos, yarn等众多与容器集群管理相关的系统或者设计思路, 当然最为**惊艳**的莫过于kubernetes了.考虑到历史数据及公司特有的网络, 运维环境, EWS不可能

前记

    在开始动手设计EWS(即TAE3.0)之时, 我们参考了诸如swarm, kubernetes, mesos, yarn等众多与容器集群管理相关的系统或者设计思路, 当然最为**惊艳**的莫过于kubernetes了.考虑到历史数据及公司特有的网络, 运维环境, EWS不可能完全抛弃原有的数据模型而使用全新的设计或者说直接建立在诸如kubernetes上(感谢上帝我做了一个非常明确的决定!)。

    时至今日, kubernetes也刚刚发布了1.2版本, 一大波特性袭来. 在简单了解了一番之后, 回头再看看EWS在这段时间内的变化, 觉得还是应该记录一下, 也分享一下我对于TAE模型设计方面的理解.

TAE

    EWS的模型设计是由PaaS时代变迁过来的. 当时比较流程的解决方案有heroku, gae, sae等等。比较常见的组件就是一个7层负载接入层, 一个逻辑路由层以及用于运行用户App的主机(Grid)。


     在TAE1.0时期, 我们使用过基于JavaWeb的运行环境, 后期使用了基于lxc的轻量级linux隔离环境, 在TAE2.0时期我们开始使用docker作为容器虚拟化环境。下表是TAE2.0时期的主要应用模型, 命名上, 当时更多的是参考了阿里的运维系统。

EWS支持多分区

    与最新的kubernetes版本支持的多分区不同, EWS从一开始就支持了多分区的容器集群管理能力。下边两幅图分别简单描述了EWS与kubernetes在部署结构上的不同。


   通过上两图的对比, EWS将用户运行的环境认为是受控区, 而每个受控区会对应一个管控区, 而中心管控节点(ControllerCenter)与各个管控区通信, 负责指令的下发与管理. 对于Kubernetes而言, 其所有的Node都是直接与Master进行交互的(目前Ubernetes实现多分区的思路是基于label机制, 在构架本质上并没有发生明显的变化)。


EWS模型

总结一下EWS目前的核心设计(与kubernetes对比)


EWS系统模型

    目前主要支持的是商家事业部的聚石塔业务-EWS。对于商家, 对于ISV开发者来说, 我们把管控单元, 主机分区等等包装成了Region, Zone, App等概念, 明确了运维和开发两种不同的关注点。


EWS与kukernetes功能对比:


  • EWS在调度层面,Container为主,Node为辅
  • 将模型分为运维段和开发段,引入Region,Zone,App概念,匹配现有业务模型
  • EWS 不强调块存储,但强调存有状态业务服务化,即使用RDS,OSS,OCS等服务化存储

Kubernetes

     在起初看到Pod, Replication Controller, Label等等概念时, 我就暗自心想不愧是打着谷歌光环的容器集群管理系统. 下表记录了一些我认为Kubernetes较为核心的模型概念.

在1.2版本中, Kubernetes开始支持多分区集群这与EWS的多分区支持还是有本质上不同的.。

Node,Pod,Container

    Pod由Container组成并且运行在Node之上。


Pod的关键特性是其内的容器共享一组资源:

  • PID命名空间: Pod中的不同应用程序可以看到其他应用程序的进程ID.
  • 网络命名空间: Pod中的多个容器能够访问同一个IP和端口范围.
  • IPC命名空间: Pod中的多个容器能够使用SystemV IPC或者POSIX消息队列进行通信.
  • UTS命名空间: Pod中的多个容器共享一个主机名
  • Volumes: Pod中的各个容器可以访问在Pod级别定义的Volumes.

    Pod是Kubernetes中一个很重要也特有的模型概念, TAE中存在叫做节点的概念与之对应, 但是不具备容器共享一组资源的能力.

   从TAE2.0时期开始, 当时我们使用docker运行诸如wordpress的做法是将Apache2, PHP, Mysql运行在一个容器中. 而如果按照Kubernetes的做法, 是应该将Apache2, PHP, Mysql都运行在独立的容器中, 一起封装成一个Pod.


Why not just run multiple programs in a single (Docker) container?1 Transparency. Making the containers within the pod visible to the infrastructure enables the infrastructure to provide services to those containers, such as process management and resource monitoring. This facilitates a number of conveniences for users.2 Decoupling software dependencies. The individual containers may be versioned, rebuilt and redeployed independently. Kubernetes may even support live updates of individual containers someday.3 Ease of use. Users don’t need to run their own process managers, worry about signal and exit-code propagation, etc.4 Efficiency. Because the infrastructure takes on more responsibility, containers can be lighter weight.

    以上是Kubernetes官方对于为何不要在一个容器中运行多个进程的理由.另外, 值得一提的是如果Pod内的容器异常退出时, Kubernetes将会如何处理?

在Pod的配置文件中有restartPolicy这个参数, 可选值是Always|Never|OnFailure.如果设置为OnFailure, Kubernetes将会在发现容器出现问题时, 尝试重启.

    在我看来, Pod更多的体现的是一种思想及规范; 而为了实现这个规范, 容器集群管理系统, 包括docker本身则需要付出较大的代价.

RC

    在我看来, Kubernetes使用Replication Controller(RC)概念, 向用户统一抽象了关于调度的几个重要问题:

  • 调度的单位: Pod.
  • 调度的结果: 最终集群中运行多少个Pod副本.
  • 调度模式: 重新调度, 弹性伸缩, 滚动更新.
  • 调度算法: 通过AlgorithmProvider来提供.

Label

Label是我认为Kubernetes中最为精彩的模型, 功能设计. Kubernetes中所有的模型几乎都是通过label来相互关联.通过对Pod, Node打上标签, 即可以通过类似SQL语句来进行筛选或过滤.


    在EWS中, 也使用了Label机制来进行对主机, 镜像, 容器等等进行划分和挑选.

Service

    在Kubernetes中, Service是用于解决Pod访问问题的. 目前Kubernetes提供了NodePort和LoadBalancer两种方式.

Namespace

    在Kubernetes中, Namespace可以用于对Pod, Rc, Service等等进行逻辑划分. 默认情况下, 这些对象都是被分配到"default"分组中的.

    在EWS中, 由于提供了用户及主机分组的概念, 所以并没有提供Namespace概念.

后记

    EWS的模型不是一蹴而就的, 在经历了TAE1.0, TAE2.0并参考了众多优秀的框架,系统设计, 目前从完整性, 功能性, 扩展性上来看已经不落后于任何已有的系统.

    后续, EWS会在动态调度, 弹性缩容, 灾备恢复等场景能力上继续发力.

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
Kubernetes 容器
要获取ACK(阿里云容器服务)集群中的Deployment
要获取ACK(阿里云容器服务)集群中的Deployment【1月更文挑战第8天】【1月更文挑战第40篇】
100 4
|
存储 负载均衡 调度
Docker 多主机部署:构建容器集群的最佳实践,助力高可用性与负载均衡
Docker 多主机部署:构建容器集群的最佳实践,助力高可用性与负载均衡
813 0
|
运维 安全 Docker
Docker 网络模型:多角度分析容器网络的原理与应用
Docker 网络模型:多角度分析容器网络的原理与应用
100 0
|
2月前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(23)页管理容器(TabBox)、选中模型(SelectionModel)
本文介绍了Twaver HTML5中的页管理容器(TabBox)和选中模型(SelectionModel)。文章解释了如何使用TabBox来管理Tab页,并通过示例代码展示了SelectionModel的多种功能,包括追加选中元素、设置选中元素、选中所有元素、移除元素选中状态、清除所有选中状态等。此外,还介绍了如何监听选中状态的变化事件以及如何设置不同的选中模式,如多选、单选和不可选。
35 2
Twaver-HTML5基础学习(23)页管理容器(TabBox)、选中模型(SelectionModel)
|
1月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
70 0
|
1月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--k8s集群使用容器镜像仓库Harbor
本文介绍了在CentOS 7.9环境下部署Harbor容器镜像仓库,并将其集成到Kubernetes集群的过程。环境中包含一台Master节点和两台Node节点,均已部署好K8s集群。首先详细讲述了在Harbor节点上安装Docker和docker-compose,接着通过下载Harbor离线安装包并配置相关参数完成Harbor的部署。随后介绍了如何通过secret和serviceaccount两种方式让Kubernetes集群使用Harbor作为镜像仓库,包括创建secret、配置节点、上传镜像以及创建Pod等步骤。最后验证了Pod能否成功从Harbor拉取镜像运行。
104 0
|
4月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB产品使用问题之原PolarDB-X集群无法连接且Docker容器已经被删除,如何恢复数据
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
6月前
|
存储 Java Serverless
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
|
6月前
|
运维 Kubernetes Cloud Native
为什么需要容器集群
小陈打算将使用Docker构建的WordPress网站部署到生产环境,但他意识到单个容器可能无法应对潜在的故障、升级需求和高用户访问量。大刘建议小陈采用容器集群,这样能保证服务的持续性和弹性。容器集群通过自动化管理工具,如Kubernetes,简化了多容器的部署和协调,解决了扩展性、服务连续性和监控等问题。随着容器技术的发展,Kubernetes已成为主流的容器编排工具。
|
6月前
|
存储 Kubernetes Docker
容器服务Kubernetes版产品使用合集之集群节点和 pod 实现自动扩缩容如何解决
容器服务Kubernetes版,作为阿里云提供的核心服务之一,旨在帮助企业及开发者高效管理和运行Kubernetes集群,实现应用的容器化与微服务化。以下是关于使用这些服务的一些建议和合集,涵盖基本操作、最佳实践、以及一些高级功能的使用方法。