KubeGems简介

------ **作者:行癫<盗版必究>** ## 一:KubeGems简介 ​ KubeGems 是一款开源的企业级多租户容器云平台。围绕云原生社区,KubeGems 提供了多 Kubernetes 集群接入能力,并具备丰富的组件管理和资源成本分析功能,能够帮助企业快速的构建和打造一个本地化、功能强大且低成本的云管理平台 image-20220828200846527 #### 1.KubeGems生态 ​ KubeGems广泛的使用来自包括 云原生基金会(CNCF) 和 Istio社区 开源的产品,并在此基础上做了二次开发和适配 ​ 为更好的降低用户对云原生生态内的熟悉门槛,KubeGems提供了专门的安装控制器对集成的三方插件进行集中管理 ​ 部署在不同方式构建的Kubernetes集群之上,使用户能更完整能够体验到KubeGems的功能 image-20220828201129007 #### 2.产品架构 ​ KubeGems 采用前后端分离的架构设计,后端通过 gems-service服务对外部提供 Rest API,同时内部实现对个模块的集成与封装 ​ 通过 gems-controller 服务对 kubernetes 的资源进行管理,已实现实现操作不同基础设施的集群 ​ 依托Kubernetes架构,KubeGems 无底层基础设施依赖,它可以在任何遵循带有 Kubernetes一致性认证 的平台上运行 image-20220828201357167 image-20220828201408818 #### 3.组件列表 gems-dashbaord:KubeGems 用户管理界面,用户在上面可以完成平台支持的所有功能操作 gems-service:KubeGems 核心服务,负责管理API 接口和集群内部各个模块之间通信的枢纽,以及集群安全、审计控制 gems-msgbus:KubeGems 实时消息服务,负责处理前端对Kubernetes实时性较强的业务逻辑 gems-worker:KubeGems 异步任务服务,负责执行系统的后台异步任务 gems-agent:KubeGems 集群Agent,负责处理平台业务逻辑,直接与 Kubernetes API通信 gems-controller-manager:KubeGems Operator,负责完成 Kubernetes 的 CRD 与 Webhook 的处理 gems-installer-manager:KubeGems Operator,负责完成 KubeGems 产品的部署与 Kubernetes 初始化 nginx-ingress-operator:Nginx Ingress Operator,负责提供KubeGems产品多租户独立网关的能力 cert-manager:Kubernetes 证书管理套件,负责处理平台内TLS证书的自动管理 prometheus-operator:kubernetes 监控控制器,为KubeGems提供主机、容器、微服务等监控告警等功能 logging-operator:kubernetes 监控控制器,为KubeGems提供容器日志采集等功能 grafana:开源的监控指标展示平台,为KubeGems提供指标展示的扩展 fluentd:日志采集客户端,具备丰富灵活的插件配置,为KubeGems提供主机、容器的日志采集 loki:云原生日志分析服务,为KubeGems提供日志存储、查询和分析服务 helm:一种应用容器打包和部署标准,为KubeGems提供应用商店接入的能力 kustomize:一种应用容器编排的方法,为KubeGems提供用户应用编排的能力 argocd:一套开源实现ci/cd流程的系统,为KubeGems提供用户CD的部署能力 istio:服务网格,为KubeGems提供微服务治理和流量管控的能力 jaeger:应用分布式链路跟踪服务,为Sidecar和应用提供数据接受的服务 calico:Kubernetes容器组网服务,负责容器间通信和网络隔离策略管理 ## 二:功能介绍 #### 1.多租户管理 ​ 在 KubeGems 中,资源(例如集群)可以在租户之间共享。管理员或运维人员掌握了平台内不同的用户角色的权限设置。普通用户在环境空间对各种计算资源进行操作。基础设施层上的计算资源由 **KubeGems管理员** 集中管理和分配,由于 KubeGems 在租户层面实现了资源的隔离,因此用户不必担心计算资源分配额度以及资源竞争问题 ​ 角色身份: 内置多身份类型,平台内用户可按照角色进行授权 ​ 多认证方式: 平台内置用户账号认证,同时也支持OpenLdap、GitLab、GitHub和遵循 Oauth2.0 协议的第三方用户系统 ​ 成员管理: 普通用户与租户(空间),项目(空间),环境(空间) 进行关联,可为空间做精细化的成员管理 ​ 网络隔离: 支持基于 Calico 模式下的网络策略管理,在平台内部为租户在基于租户、项目、环境实现网络隔离的策略分发 ​ KubeGems的租户控制主要在Tenant和Enviroments两个CRD中实现管理,里面分别定义了租户以及环境(包含项目)等信息 ##### CostomResourceDefinition ​ KubeGems通过自定义 CRD(Custom Resource Definitions) 将租户资源抽象为5个类型进行统一管理 ​ Tenant (租户) ​ Enviroments (环境) ​ TenantResourceQuotas (资源) ​ TenantGateways (网关) ​ TenantNetworkPolicys (网络策略) image-20220828202450109 ##### 相关术语 | 术语 | 解释 | | :-----------------: | :----------------------------------------------------------: | | 用户(User) | KubeGems 上一个可登录的用户,用户的权限可以是平台管理员租户或者普通用户,用户的角色可以由各级管理员进行控制。 | | 应用(Application) | 部署在 KubeGmes 的一个应用,它可以是一个进程或进程组,通常它等同于Pods。应用是 KubeGems 上最小的部署单元 | | 环境(Enviroments) | KubeGems 应用部署的在 Kubernets 上一个命名空间,它等同于 Namespaces | | 项目(Project) | KubeGems 内多个环境组成的一个抽象集合,项目下的环境可以分布在多个Kubernets集群,也可以分布在一个Kubernetes集群内 | | 集群(Cluster) | 一个Kubernetes集群 | | 租户(Tenant) | KubeGems 上服务用户的主体单位,用户的计算资源运行在租户空间内,它与平台内的其他租户共享 Kubernetes 资源 | ##### Kubernetes集群关系 image-20220828202725950 ##### 用户角色说明 | 角色 | 类别 | 说明 | | :--------: | :--: | :--------------------------------: | | 系统管理员 | 系统 | 可以操作系统所有的资源,用户,租户 | | 系统成员 | 系统 | 没有任何系统级别的权限 | | 租户管理员 | 租户 | 可以操作租户下所有资源 | | 租户成员 | 租户 | 只能看到自己参与的项目 | | 项目管理员 | 项目 | 可以操作项目下的所有资源 | | 项目测试 | 项目 | 仅可以操作测试属性的环境 | | 项目研发 | 项目 | 仅可以操作研发属性的环境 | | 项目运维 | 项目 | 可以操作所有环境 | | 环境成员 | 环境 | 只可以查看环境下的资源 | | 环境管理员 | 环境 | 可以操作环境下的资源 | #### 2.集群部署与资源管理 ​ KubeGems 支持对接多套 Kubernetes 集群,并可以通过自身 Operator 完成集群的安装任务,无论您是采用裸金属部署的Kubernetes,还是由公有云厂家托管的Kubernetes,它们都能运行 Agent 服务并接入到中心集群进行管理 img ##### 多种网络方案接入 ​ 支持Calico、Flannel 和 KubeOvn 等开源的网络解决方案 ##### 多种存储方案接入 ​ 支持开源存储解决方案,例如GlusterFS、CephRBD、OpenEBS 和Longhorn等存储系统 ​ 支持其他商业存储以CSI插件方式连接到KubeGems平台中的各种块存储服务 image-20220829211207755 ##### 计算资源管理 ​ gems-service服务于维护了 Kubernetes 集群资源的使用统计和注册。当 Kubernetes 集群在 KubeGems 平台上成功导入,gems-agent便会被推送到kubernetes集群内运行,并将集群资源上报给 service,交由用户在 KubeGems 后端进行资源的分配 ![img](D:\行癫kubernetes\KubeGems\KubeGems简介.assets\cluster-resources-2928a8677bfbff980f9ad90446a48a2c.jpg) KubeGems提供了多维度的集群资源管理配置功能: ​ 资源超分: 支持 Kubernetes 集群资源超分规划,更好的提高集群资源使用率,降低IT成本 ​ 资源管理: 支持对租户空间内的资源进行扩容、监控等管理 ​ 细粒度资源控制: 基于ResouceQuota和LimitRange对用户环境空间内各应用进行细粒度资源的控制 ​ 资源智能分析: KubeGems 根据用户过去的时间周期,在后台离线为用户资源进行资源使用率分析,并推荐用户进行资源调整 ​ 灵活分配: 租户可以在 KubeGems 内提交资源工单,并在平台内部扭转给后台管理员进行审批和分配 #### 3.应用管理 ​ 在KubeGems中,应用是一等公民,其内部的功能大都以围绕应用管理展开。KubeGems内定义了两种应用管理渠道,分别是应用商店和用户编排 ##### 应用商店 ​ KubeGems 内部提供了一个基于Helm v3的应用仓库,里面集成了众多的定制中间件应用。除此之外,应用商店还提供了额外的功能 ​ 多仓库支持: 无缝对接外部 Helm 仓库,并自动离线同步到本地 ​ 人性化定制: 用户可以通过填写应用表单或者编写Values文件方式灵活定制自己的应用 ​ 资源可视化: 用户可以在应用详情中对应用拓扑结构和生命周期进行完整管理 ![img](D:\行癫kubernetes\KubeGems\KubeGems简介.assets\appstore-c62985ea23194fde36ffe54c7f077542.jpg) ##### 应用管理和编排 ​ 应用中心为用户/企业提供了私有化应用的编排和管理,在KubeGems内部,我们提供了以Kustomize风格的应用编排方式,用户只需在平台的界面上,就可以自主进行 kubernetes 的资源编排 ​ 可视化编排: Kustomize风格的应用编排方式 ​ 版本化管理: KubeGems内置GitOps引擎,为应用编排提供版本变更的追踪、回滚和历史等高级功能 ​ 镜像安全: 支持对用户镜像进行CVE漏洞分析和风险等级报告( 需对接 Harbor) ​ 应用管理: 提供用户应用完整的生命周期管理 ​ 灵活发布: 应用编排可灵活推送到用户环境,并提供一键批量部署 ##### 策略部署 金丝雀发布: ​ 自定义流量比例: 可根据用户定义的流量比例进行发布 ​ 自定义灰度策略: 根据用户请求头(header) 、路径(url)和进行流量比例分配 ​ 应用监控分析: 灰度过程中全程监控应用请求的状态,用户可根据灰度监控数据进行流程控制 ![img](D:\行癫kubernetes\KubeGems\KubeGems简介.assets\gray-deploy-2c57905f5b501b73ac06a003b2163bc5.jpg) 蓝绿发布: ​ 双重资源保障: 控制蓝绿两个版本的应用容量,避免出现雪球效应 ​ 操作简洁: 一键完成应用蓝绿部署 ​ 应用监控: 蓝绿过程中全程监控应用请求的状态,可根据应用监控数据进行流程控制 ![img](D:\行癫kubernetes\KubeGems\KubeGems简介.assets\blue-green-60723dc76833478aeee8d86d4ecea9ef.jpg) #### 4.可观察性 ##### 监控与告警 ![img](D:\行癫kubernetes\KubeGems\KubeGems简介.assets\observability-monitoring-356abca7222c19befc82a8c278d88c60.jpg) ​ 多维度监控: KubeGems 内置了对主机、Kubernetes集群、容器和中间件等服务的监控模板,通过内置的查询器为用户提供精细化的监控 ​ 自定义告警策略和规则: 支持多租户模式下的监控指标采集,用户可自定义被监控应用的指标采集策略,如监控端口,请求路径、频率等信息 ​ 兼容 Prometheus: KubeGems 采用 Prometheus Operator,可与用户现有环境无缝集成 ​ 平台组件状态: KubeGems 集成了内部组件和 Kubernetes 三方组件状态的监控,避免因平台组件故障造成的不必要停机 ​ 自定义告警策略和规则: 支持租户模式下的监控指标采集策略,用户可根据监控模板自助设定告警策略 ​ 丰富的阈值规则: 支持用户在告警规则中设置告警事件的重复时间、持续时间、告警级别、黑名单等功能 ​ 分级告警: 支持用户自定义的告警级别,并进行分级告警,避免无效告警 ​ 历史跟踪: KubeGems 为每一条告警记录都设置了详情页,里面完整记录了该规则自创建以来发生的每一次事件,为用户提供告警事件的回溯 ​ 告警渠道: 支持 邮件(SMTP协议) 和 Webhook 两种渠道告警 ​ 告警实时通知: KubeGems 内置的实时消息组件,在发生告警时可将内容实时推送到用户界面 ##### 日志与分析 ![img](D:\行癫kubernetes\KubeGems\KubeGems简介.assets\observability-logging-0d094d03e1d3d7e07e612975234fe44f.jpg) ​ 日志采集管理: 支持多租户模式下的日志采集管理,利用 CRD 可在租户空间内进行自定义控制容器日志采集和解析规则 ​ 标签化查询语句: 注入多维度的日志标签(项目、环境、容器组、应用、集群等关键字),用户可以灵活查询或者实时分析日志 ​ 日志告警: 支持关键字过滤,可以在用户应用发生告警时通知到运维、研发等同事 ​ 多种日志收集平台: 支持多种日志收集平台,例如 Elasticsearch、Loki、Kafka、S3 等 ​ 高性能和水平扩展: 采用 FluenBit/d 分级架构,满足日志高吞吐情况下,汇聚层 水平扩展 以提高采集吞吐量 #### 5.基于Istio的微服务网格 ##### 服务治理 ![img](D:\行癫kubernetes\KubeGems\KubeGems简介.assets\service-mesh-3560e46a2a4e8cb7c37c013f7eb37acc.jpg) ##### 流量管理 ​ 负载均衡: 为 HTTP、gRPC、WebSocket 和 TCP 流量自动负载均衡 ​ 访问控制: 支持丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制 ​ 流量控制: 可插拔的策略层和配置 API,支持访问控制、速率限制和配额 ##### 安全 ​ 丰富的认证策略: 使用 peer 和 request 认证策略为在 Istio 网格中接收请求的工作负载指定认证 ​ 自定义应用授权: 支持基于 RBAC 的应用权限控制 ​ 公钥基础设施 (PKI): 使用 X.509 证书为每个工作负载都提供 tls 双向认证 ##### 可观察性 ​ 应用指标: 基于 4 个监控的黄金标识(延迟、流量、错误、饱和)生成了一系列服务指标 ​ 分布式追踪: 为每个服务生成分布式追踪 span,对网格内的服务调用进行追踪 ​ 访问日志: 记录应用流量生成请求的完整记录,包括源和目标的元数据 ##### 微服务网关 ![img](D:\行癫kubernetes\KubeGems\KubeGems简介.assets\api-gateway-basic-8a339807cfee4e457d06768c8d29702a.jpg) ​ KubeGems 内置微服务网关控制器,以支持应用南北向流量的代理,网关类型分为基础版(Basic Nginx)和微服务版(Mesh Istio) 基础版网关: ​ 租户独占网关: 每个租户可创建独占的 ingress 网关,通过 class 方式关联 ingress 资源 ​ 应用路由管理: 支持 TCP/UDP, HTTP/HTTPS, GRPC/HTTP2.0 等协议的支持和路由转发 ​ 流量负载均衡: 支持对 ingress 关联的上游 pod 进行流量负载均衡 ​ 访问监控:支持以 Prometheus 的方式暴露内部监控指标