从 Kubernetes 到 PaaS
本文并非 Kubernetes 教程或 PaaS 研发教程,不涉及具体或详细的实现方式。
摘要
本文基于我参与 PaaS 研发的经历,介绍了 Kubernetes 在实际生产中的不便与不足,以及基于 Kubernetes 和云平台基础设施研发 PaaS 需要干的事情。
Kubernetes 在实际生产中的部分待改进列表
Kubernetes 的强大毋庸置疑,而它在实际生产中仍然有诸多需要增强的地方。
操作麻烦:需要准备各种各样的 yml 文件,而且要用 kubectl 进行命令行操作。
多集群管理不便:需要切来切去。
用户和权限难以满足需要:实际使用中,需要支持用户、租户、部门、工程项目这样的业务属性,也需要比较细致的权限控制。
功能不够强:例如调度器,需要网络就近、小任务优先、Pod 分布控制等等方面的加强。例如 Deployment,有时需要或希望在修改镜像时 Pod 仍然在原来的节点上启动。例如 DaemonSet,有时需要各节点分批拉取镜像(或支持镜像 P2P 传输)以免给镜像中心过大压力。等等等等。
到 PaaS 需要增添的功能
Kubernetes 资源的图形化操作支持:在界面上既可以直观的操作各类资源(如 StatefulSet、Service、PVC、ConfigMap),又可以直接以 yaml 或 json 的方式编辑这些资源。
用户与权限:定义用户和组织层级(可简可繁)。权限一般要支持基于角色的访问控制(RBAC),或类似主流云平台的 IAM。
监控:包括针对节点、集群、资源、组织层级的各类指标的监控。如各个节点的 CPU 使用率,某部门使用的 PVC 数,某集群的 etcd 存储了多少个对象。有了监控还要有告警,在某个指标达到某个条件后则通过邮件、webhook、微信、钉钉等方式发出通知。告警要支持定义告警的级别或给告警的严重程度模糊打分。另外,还应该增加告警频率控制、告警沉默等一些列细致的功能。
DevOps:主要是工作流(workflow)相关的支持,包括图形化的工作流创建和编辑,需要支持执行脚本、多语言构建、代码拉取、镜像构建、资源部署、文件保存(到对象存储之类的地方)等一系列功能。
微服务:流量治理,调用链,组件管理。
日志:支持对集群内程序的日志收集、过滤、存储。需要比较复杂的查询功能(按时间、用户、程序、关键词多条件查询)。高级一点的还可以增加基于自然语言处理(NLP)的日志分析。
开发者工具:VS 扩展,IDEA 插件,Eclipse 插件,SDK,远程调试。
中间件:常用基础软件(如 Redis、Mongo、MySQL、RabbitMQ)的即用即取。
配额:限制用户或某组织层级对资源(如 CPU、存储空间、带宽、工作流数量)的使用。还可以更细致一些,如白天限制,晚上放宽。
非 Docker 容器支持:主要是 Kata。
与云平台其他部件融合:对于已经有了私有云或类似 IaaS 企业,建设 PaaS 必然要考虑充分利用现有设施并与之融合。如让 IAM、网络、存储、中间件直接接入进来。这部分不同企业差异很大。

浙公网安备 33010602011771号