Cloudpods 容器化经验分享

2022-12-05 19:30:07 +08:00
 Cloudpods

Cloudpods 是一个开源的多云混合云管理平台。Cloudpods 首先是一个私有云云平台,具备将计算节点使用开源 QEMU/KVM 虚拟化技术虚拟出虚拟机,实现私有云的功能。其次,Cloudpods 能够纳管其他的云平台,包括主流私有云和公有云,实现云管的功能。Cloudpods 的目标是帮助用户基于本地基础设置以及已有云基础设置,构建一个统一融合的云上之云,达到降低复杂度,提高管理效率的效果。 Cloudpods 从 3.0 开始全面拥抱 Kubernetes ,基于 Kubernetes 部署运行云平台的服务组件,采用 Kubernetes Operator ,基于 Kubernetes 集群自动化部署服务,实现了云平台的服务的容器化分布式部署。 本文总结了 Cloudpods 在过去 3 年云平台底层容器化改造的经验。目前,将 Kubernetes 作为 IAAS 平台的底层服务管理平台是一个趋势,例如 OpenStack 的 Kolla 项目,VMware 的 Tanzu ,以及基于 Kubernetes 的虚拟化方案 KubeVirt 。Cloudpods 顺应此趋势,早在 2019 年下半年开始基于 Kubernetes 构建 Cloudpods 的服务组件基础设施。理论上,Cloudpods 站在了巨人的肩膀上。有了 Kubernetes 的加持,我们基于 Operator 管理 CRD(Custom Resource Definition)机制做到了更优雅的服务自动化部署,符合 IaC ( Infrastructure as code )实践的服务升级和回滚,服务的自动高可用部署等等。但在实际效果上,我们基于 Kubernetes ,获得了一些便利,但也遇到了不少未曾预料到的问题。本文介绍自从 2019 年 3.0 容器化改造以来,因为引入 Kubernetes 遇到的问题,我们的一些解决方案,以及将来的规划。

GitHub: https://github.com/yunionio/cloudpods

欢迎使用、体验+star

1 、容器化带来了哪些好处

1 )方便对分布于多个节点上的服务的管理

管理员可以在控制节点统一地查看运行在各个节点的服务状态,查看日志,启停和发布回滚服务,甚至 exec 进入服务容器排查问题。同时我们引入 Loki 收集所有容器的日志,可以统一地查看各个服务的日志。对分布式集群的运维和排障都变得相对简单。采用 Kubernetes 之后,直接登录各个节点排障的机会大大降低了。

2 )集群配置变更更方便及可控

整个集群的状态可以保存为一个 OnecloudCluster yaml 文件。可以方便地变更集群的配置,包括集群的版本,实现版本的升级和回退,以及集群服务的开启和关闭,镜像版本等关键参数的变更等。更进一步地,可以通过 git 进行配置 yaml 的版本控制,做到变更的历史记录审计,并且可以随时恢复到任意指定的配置。

3 )便于适配不同的 CPU 架构和操作系统

Kubernetes 作为一层中间层,从一定程度上屏蔽了底层的差异。采用 Kubernetes 后,对 CPU 和操作系统的适配大概分为三部分工作:

  1. Kubernetes 对 CPU 和操作系统的适配;

  2. 不同 CPU 架构下服务容器镜像的构建;

  3. Kubernetes 之外的组件的适配,例如平台依赖的 rpm 包等。基于 Kubernetes 自身强大的生态,基本都有现成的解决方案,只需要做相应的集成工作。只需通过 docker buildx 工具生成异构 CPU 架构的镜像。因此,整个适配工作复杂度大大降低了。

4 )部署的便利性增加

引入 Kubernetes 之后,整个部署流程分为几个阶段:

Kubernetes 的部署,这个步骤通过基于 kubeadm 改造的 ocadm 实现。

Cloudpods 服务容器的部署,这个步骤通过 ocadm 在容器内部署 operator ,通过 operator 实现相应 configmaps ,deployments 和 daemonsets 等资源的创建,进而自动创建服务集群。

Kubernetes 之外依赖组件的安装部署。这个步骤通过 ocboot ,集成 ansible 实现。每个阶段都是基于成熟的开源方案扩展实现,可靠性高。同时,各个组件分工明确,模块化清晰,易于维护和扩展。

5 )可复用 Kubernetes 本身自带的强大功能

如 coredns 可以自定义域名,甚至可以做泛域名解析。Ingress 自带反向代理的功能。service+deployment 提供的多副本冗余机制。daemonset 提供的在新添加节点自动拉起服务的能力。对服务的资源限制( CPU ,内存,进程号等)。这些都使得云平台服务功能特性的实现变得更加容易。

2 、容器化遇到了哪些问题,如何解决

下面总结一些遇到的问题。这些问题是我们在采用 Kubernetes 管理和运行云平台组件中陆续发现的。有些已经彻底解决,但很大一部分还只是部分解决,彻底解决的方案还在持续摸索中。。。

由于字数限制,无法全部展开,具体详情查看:https://mp.weixin.qq.com/s/z6IcZ2nDyTF9yycVbiqzQA

1134 次点击
所在节点    推广
2 条回复
zsj1029
2022-12-05 22:08:12 +08:00
支持,有机会部署试试
Cloudpods
2022-12-06 14:36:34 +08:00
@zsj1029 谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/900309

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX