V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Cloudpods
V2EX  ›  推广

Cloudpods 容器化经验分享

  •  1
     
  •   Cloudpods · 2022-12-05 19:30:07 +08:00 · 982 次点击
    这是一个创建于 479 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    2 条回复    2022-12-06 14:36:34 +08:00
    zsj1029
        1
    zsj1029  
       2022-12-05 22:08:12 +08:00
    支持,有机会部署试试
    Cloudpods
        2
    Cloudpods  
    OP
       2022-12-06 14:36:34 +08:00
    @zsj1029 谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3307 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 13:33 · PVG 21:33 · LAX 06:33 · JFK 09:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.