313 lines
16 KiB
Markdown
313 lines
16 KiB
Markdown
|
<h1><center>KubeGems简介</center></h1>
|
|||
|
|
|||
|
------
|
|||
|
|
|||
|
**作者:行癫<盗版必究>**
|
|||
|
|
|||
|
## 一:KubeGems简介
|
|||
|
|
|||
|
KubeGems 是一款开源的企业级多租户容器云平台。围绕云原生社区,KubeGems 提供了多 Kubernetes 集群接入能力,并具备丰富的组件管理和资源成本分析功能,能够帮助企业快速的构建和打造一个本地化、功能强大且低成本的云管理平台
|
|||
|
|
|||
|
<img src="D:\行癫kubernetes\KubeGems\KubeGems简介.assets\image-20220828200846527.png" alt="image-20220828200846527" style="zoom:50%;" />
|
|||
|
|
|||
|
#### 1.KubeGems生态
|
|||
|
|
|||
|
KubeGems广泛的使用来自包括 云原生基金会(CNCF) 和 Istio社区 开源的产品,并在此基础上做了二次开发和适配
|
|||
|
|
|||
|
为更好的降低用户对云原生生态内的熟悉门槛,KubeGems提供了专门的安装控制器对集成的三方插件进行集中管理
|
|||
|
|
|||
|
部署在不同方式构建的Kubernetes集群之上,使用户能更完整能够体验到KubeGems的功能
|
|||
|
|
|||
|
<img src="D:\行癫kubernetes\KubeGems\KubeGems简介.assets\image-20220828201129007.png" alt="image-20220828201129007" style="zoom:50%;" />
|
|||
|
|
|||
|
#### 2.产品架构
|
|||
|
|
|||
|
KubeGems 采用前后端分离的架构设计,后端通过 gems-service服务对外部提供 Rest API,同时内部实现对个模块的集成与封装
|
|||
|
|
|||
|
通过 gems-controller 服务对 kubernetes 的资源进行管理,已实现实现操作不同基础设施的集群
|
|||
|
|
|||
|
依托Kubernetes架构,KubeGems 无底层基础设施依赖,它可以在任何遵循带有 Kubernetes一致性认证 的平台上运行
|
|||
|
|
|||
|
<img src="D:\行癫kubernetes\KubeGems\KubeGems简介.assets\image-20220828201357167.png" alt="image-20220828201357167" style="zoom:50%;" />
|
|||
|
|
|||
|
<img src="D:\行癫kubernetes\KubeGems\KubeGems简介.assets\image-20220828201408818.png" alt="image-20220828201408818" style="zoom:50%;" />
|
|||
|
|
|||
|
#### 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 (网络策略)
|
|||
|
|
|||
|
<img src="D:\行癫kubernetes\KubeGems\KubeGems简介.assets\image-20220828202450109.png" alt="image-20220828202450109" style="zoom:50%;" />
|
|||
|
|
|||
|
##### 相关术语
|
|||
|
|
|||
|
| 术语 | 解释 |
|
|||
|
| :-----------------: | :----------------------------------------------------------: |
|
|||
|
| 用户(User) | KubeGems 上一个可登录的用户,用户的权限可以是平台管理员租户或者普通用户,用户的角色可以由各级管理员进行控制。 |
|
|||
|
| 应用(Application) | 部署在 KubeGmes 的一个应用,它可以是一个进程或进程组,通常它等同于Pods。应用是 KubeGems 上最小的部署单元 |
|
|||
|
| 环境(Enviroments) | KubeGems 应用部署的在 Kubernets 上一个命名空间,它等同于 Namespaces |
|
|||
|
| 项目(Project) | KubeGems 内多个环境组成的一个抽象集合,项目下的环境可以分布在多个Kubernets集群,也可以分布在一个Kubernetes集群内 |
|
|||
|
| 集群(Cluster) | 一个Kubernetes集群 |
|
|||
|
| 租户(Tenant) | KubeGems 上服务用户的主体单位,用户的计算资源运行在租户空间内,它与平台内的其他租户共享 Kubernetes 资源 |
|
|||
|
|
|||
|
##### Kubernetes集群关系
|
|||
|
|
|||
|
<img src="D:\行癫kubernetes\KubeGems\KubeGems简介.assets\image-20220828202725950.png" alt="image-20220828202725950" style="zoom:50%;" />
|
|||
|
|
|||
|
##### 用户角色说明
|
|||
|
|
|||
|
| 角色 | 类别 | 说明 |
|
|||
|
| :--------: | :--: | :--------------------------------: |
|
|||
|
| 系统管理员 | 系统 | 可以操作系统所有的资源,用户,租户 |
|
|||
|
| 系统成员 | 系统 | 没有任何系统级别的权限 |
|
|||
|
| 租户管理员 | 租户 | 可以操作租户下所有资源 |
|
|||
|
| 租户成员 | 租户 | 只能看到自己参与的项目 |
|
|||
|
| 项目管理员 | 项目 | 可以操作项目下的所有资源 |
|
|||
|
| 项目测试 | 项目 | 仅可以操作测试属性的环境 |
|
|||
|
| 项目研发 | 项目 | 仅可以操作研发属性的环境 |
|
|||
|
| 项目运维 | 项目 | 可以操作所有环境 |
|
|||
|
| 环境成员 | 环境 | 只可以查看环境下的资源 |
|
|||
|
| 环境管理员 | 环境 | 可以操作环境下的资源 |
|
|||
|
|
|||
|
#### 2.集群部署与资源管理
|
|||
|
|
|||
|
KubeGems 支持对接多套 Kubernetes 集群,并可以通过自身 Operator 完成集群的安装任务,无论您是采用裸金属部署的Kubernetes,还是由公有云厂家托管的Kubernetes,它们都能运行 Agent 服务并接入到中心集群进行管理
|
|||
|
|
|||
|
<img src="D:\行癫kubernetes\KubeGems\KubeGems简介.assets\mutil-cluster-5374431bf4eff4d5cacf2b8e4d3169a6.jpg" alt="img" style="zoom:50%;" />
|
|||
|
|
|||
|
##### 多种网络方案接入
|
|||
|
|
|||
|
支持Calico、Flannel 和 KubeOvn 等开源的网络解决方案
|
|||
|
|
|||
|
##### 多种存储方案接入
|
|||
|
|
|||
|
支持开源存储解决方案,例如GlusterFS、CephRBD、OpenEBS 和Longhorn等存储系统
|
|||
|
|
|||
|
支持其他商业存储以CSI插件方式连接到KubeGems平台中的各种块存储服务
|
|||
|
|
|||
|
<img src="D:\行癫kubernetes\KubeGems\KubeGems简介.assets\image-20220829211207755.png" alt="image-20220829211207755" style="zoom:50%;" />
|
|||
|
|
|||
|
##### 计算资源管理
|
|||
|
|
|||
|
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 的方式暴露内部监控指标
|
|||
|
|