1. 背景

当前,公司内部存在不同的容器产品:KUN、UK8S(及 Cube)、UEC 容器等,各个容器产品在技术栈的选择、产品形态上存在着一些差异,不同产品之间没有很好的协同性。同时,公有云容器产品获客过度依赖 IaaS 本身,缺少独立获客的特性和能力。
新的容器平台,一方面需要打通 KUN、UK8S、UEC 容器等内部及公有云容器产品,统一管理、统一规划,另一方面需要结合内部技术积累及外部技术需求,丰富开发、部署周边工具,降低用户接入门槛、增加用户粘性。

2. 产品目标

2.1 目标用户需求

外部用户

  • 中大型客户:1. 能够简单、快速地搭建一套测试环境,快速切入;2. 提供一套 CI/CD 工具,能够对接客户现有、或者帮助客户对接主流的代码仓库、CI 工具(如 GitLab、Jenkins、Rancher)等,简化客户在 UCloud 的业务部署流程,降低业务容器化的门槛。
  • 小型客户:能够进一步降低容器产品的使用门槛,扩大容器产品用户池。

内部用户

  • 继续完善现有的容器平台,提供更完善的发布、灰度工具。
  • 容器产品的预研 / 实验平台。

    2.2 整体架构

    一套技术栈,两套底层环境。根据不同的接入渠道(公有云 / 内部网)对接不同的底层资源环境,及不同的核心服务模块。
    新容器平台产品规划 - 图1

    3. 项目整体规划

功能项 优先 目标 UK8S 现状 KUN 现状
集群管理 P0
- 公有云和 KUN 底层架构的统一
- 接入层界面尽量做到统一,针对不同的接入渠道,展示不同的模块

- 专有 / 托管版集群
- VK + Cube 容器实例已上线
- VK + 边缘容器对接中

- 多租户共享集群
- 租户 / 项目间通过 NS 隔离
监控告警 P0
- 容器平台资源及应用监控数据的采集
- 对接公司监控产品

- Prometheus 插件

- 平台级别:Prometheus:节点、网关等监控信息
- 用户级别:Prometheus:节点、Pod 等 Metrics 信息
- 可以通过 Prometheus 接入天梁
日志管理 P0
- 容器内资源及应用日志的采集
- 对接公司日志产品

- ELK + ES 插件

- 平台级:filebeat + logstash 统一收集到 ES
- 单独分 top 日志:Kafka 收集
容器安全 P1
- 镜像安全
- 容器运行时安全
x x
CI 流水线 P1
- 对接主流的代码仓库和 CI 工具(如 GitLab、Jenkins、Rancher 等)
- 提供 CI 中间产物(文件、镜像)的管理(UHub)
x ○ 对接 GitLab
CD 部署 P1
- 应用自动部署
- 不同环境(开发、预发、测试、生产)的管理
- 发布回滚、配置变更
x √ 对接 GitLab,实现 KUN 集群的持续部署
应用商店 P2
- Helm 应用商店,及主流的容器 Operator
- 后期需要耗费至少 1 个人力,进行迭代、适配等维护工作
x 曾经有 Helm,因为缺少人维护下线 √ Helm 应用商店
权限管理 P2
- 在 K8S 集群中对控制台权限的继承
- 针对不同账号,分配集群中各个 NS 下资源对象的增/删/改/查权限
x √ 租户 / 项目间通过 NS 隔离
流量治理
灰度发布
P2
- 按照地域进行灰度发布
- 同一集群中的蓝绿发布
x ○ 基于 Istio 实现

4. UK8S & KUN 当前技术栈整理

集群管理功能整理
功能部分 功能详细描述 kun实现方式 uk8s实现方式 通用实现方式 备注
管理层 master部署+ 认证 openssl每个组件都签发不同证书, 其中APIserver带有节点信息 cfssl生成证书不同组件证书
etcd存储 3节点或5节点集群(http或https) etcd部署到3台master节点组成集群
高可用 keepalive, 每个node上配置ipvs ULB4
节点 kubelet节点认证 openssl每个节点签发不同的证书 所有的节点共用admin权限的证书
kubelet部署 systemd 启动 kubelet systemd 启动 kubelet
运行时 docker(18.9.9) docker(<1.19), containerd(>=1.19)
k8s 1.21 废弃docker,使用containerd
其他节点类型vk
支持Cube的VK
POD网络 固定IP功能 自定义annotation + libcalico 自定义annotation+sdn网络
双站功能 自定义cni(2个网卡)+ annotaion
CNI插件主要做 网桥 / 路由 会创建2个网卡实现双站 配置节点网络(路由)
IPAM,IP管理 libcaclio(ippool+ipblock+iphandle) sdn网络(虚拟网api申请)
路由 BGP(bataman+gobgp) sdn网络
存储CSI 块存储 udsk + ceph (CSI + agent)ceph使用ustore部署方式 UDisk
文件存储 UFS(CSI + 自定义ULB) UFS和自建nfs
对象存储 S3 (CSI) UFile
服务访问 集群内service kube-proxy(VIP + iptables) ULB+集群svc(iptables)
双站service 自实现 kun-proxy(VIP + ipvs)
网络联通性 集群外(内网) 互通, 网关(proxy + bgp宣告全网) VPC直通
公网 只允许从内到外,网关(dns+ nat64) ULB对外暴露
用户网 互通 (网关静态flow + ip映射+ uxr + custom-route)
域名解析 service域名解析 coredns + 插件+ 公司内dns coredns
跨集群域名解析 coredns + 插件 + 所有集群dns
双站dns解析 coredns + 插件
多集群管理 部署方式 ansible脚本 脚本
服务管理 单独控制台 控制台页面+webterminal
集群升级 控制台
运维管理平台 如何获取整个集群信息 命令行 + prometheus + 邮件 控制台页面+webterminal