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