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
管理员可以在控制节点统一地查看运行在各个节点的服务状态,查看日志,启停和发布回滚服务,甚至 exec 进入服务容器排查问题。同时我们引入 Loki 收集所有容器的日志,可以统一地查看各个服务的日志。对分布式集群的运维和排障都变得相对简单。采用 Kubernetes 之后,直接登录各个节点排障的机会大大降低了。
整个集群的状态可以保存为一个 OnecloudCluster yaml 文件。可以方便地变更集群的配置,包括集群的版本,实现版本的升级和回退,以及集群服务的开启和关闭,镜像版本等关键参数的变更等。更进一步地,可以通过 git 进行配置 yaml 的版本控制,做到变更的历史记录审计,并且可以随时恢复到任意指定的配置。
Kubernetes 作为一层中间层,从一定程度上屏蔽了底层的差异。采用 Kubernetes 后,对 CPU 和操作系统的适配大概分为三部分工作:
Kubernetes 对 CPU 和操作系统的适配;
不同 CPU 架构下服务容器镜像的构建;
Kubernetes 之外的组件的适配,例如平台依赖的 rpm 包等。基于 Kubernetes 自身强大的生态,基本都有现成的解决方案,只需要做相应的集成工作。只需通过 docker buildx 工具生成异构 CPU 架构的镜像。因此,整个适配工作复杂度大大降低了。
引入 Kubernetes 之后,整个部署流程分为几个阶段:
Kubernetes 的部署,这个步骤通过基于 kubeadm 改造的 ocadm 实现。
Cloudpods 服务容器的部署,这个步骤通过 ocadm 在容器内部署 operator ,通过 operator 实现相应 configmaps ,deployments 和 daemonsets 等资源的创建,进而自动创建服务集群。
Kubernetes 之外依赖组件的安装部署。这个步骤通过 ocboot ,集成 ansible 实现。每个阶段都是基于成熟的开源方案扩展实现,可靠性高。同时,各个组件分工明确,模块化清晰,易于维护和扩展。
如 coredns 可以自定义域名,甚至可以做泛域名解析。Ingress 自带反向代理的功能。service+deployment 提供的多副本冗余机制。daemonset 提供的在新添加节点自动拉起服务的能力。对服务的资源限制( CPU ,内存,进程号等)。这些都使得云平台服务功能特性的实现变得更加容易。
下面总结一些遇到的问题。这些问题是我们在采用 Kubernetes 管理和运行云平台组件中陆续发现的。有些已经彻底解决,但很大一部分还只是部分解决,彻底解决的方案还在持续摸索中。。。
由于字数限制,无法全部展开,具体详情查看:https://mp.weixin.qq.com/s/z6IcZ2nDyTF9yycVbiqzQA
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.