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

简介: 前记     在开始动手设计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会在动态调度, 弹性缩容, 灾备恢复等场景能力上继续发力.

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes 容器
要获取ACK(阿里云容器服务)集群中的Deployment
要获取ACK(阿里云容器服务)集群中的Deployment【1月更文挑战第8天】【1月更文挑战第40篇】
231 4
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
498 5
|
10月前
|
人工智能 Kubernetes jenkins
容器化AI模型的持续集成与持续交付(CI/CD):自动化模型更新与部署
在前几篇文章中,我们探讨了容器化AI模型的部署、监控、弹性伸缩及安全防护。为加速模型迭代以适应新数据和业务需求,需实现容器化AI模型的持续集成与持续交付(CI/CD)。CI/CD通过自动化构建、测试和部署流程,提高模型更新速度和质量,降低部署风险,增强团队协作。使用Jenkins和Kubernetes可构建高效CI/CD流水线,自动化模型开发和部署,确保环境一致性并提升整体效率。
|
9月前
|
存储 测试技术 对象存储
容器计算服务ACS单张GPU即可快速搭建QwQ-32B推理模型
阿里云最新发布的QwQ-32B模型拥有320亿参数,通过强化学习大幅度提升了模型推理能力,其性能与DeepSeek-R1 671B媲美,本文介绍如何使用ACS算力部署生产可用的QwQ-32B模型推理服务。
|
9月前
|
存储 测试技术 对象存储
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。
|
12月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
10月前
|
人工智能 Prometheus 监控
容器化AI模型的监控与治理:确保模型持续稳定运行
在前几篇文章中,我们探讨了AI模型的容器化部署及构建容器化机器学习流水线。然而,将模型部署到生产环境只是第一步,更重要的是确保其持续稳定运行并保持性能。为此,必须关注容器化AI模型的监控与治理。 监控和治理至关重要,因为AI模型在生产环境中面临数据漂移、概念漂移、模型退化和安全风险等挑战。全面的监控涵盖模型性能、数据质量、解释性、安全性和版本管理等方面。使用Prometheus和Grafana可有效监控性能指标,而遵循模型治理最佳实践(如建立治理框架、定期评估、持续改进和加强安全)则能进一步提升模型的可信度和可靠性。总之,容器化AI模型的监控与治理是确保其长期稳定运行的关键。
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(23)页管理容器(TabBox)、选中模型(SelectionModel)
本文介绍了Twaver HTML5中的页管理容器(TabBox)和选中模型(SelectionModel)。文章解释了如何使用TabBox来管理Tab页,并通过示例代码展示了SelectionModel的多种功能,包括追加选中元素、设置选中元素、选中所有元素、移除元素选中状态、清除所有选中状态等。此外,还介绍了如何监听选中状态的变化事件以及如何设置不同的选中模式,如多选、单选和不可选。
128 2
Twaver-HTML5基础学习(23)页管理容器(TabBox)、选中模型(SelectionModel)
|
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容器编排
373 3
|
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拉取镜像运行。
1790 0