作者
徐迪,腾讯云容器技术专家。 汝英哲,腾讯云高级产品经理。
摘要
在做多集群应用分发的时候,经常会遇到以下的差异化问题,比如:
- 在分发的资源上全部打上统一的标签,比如
apps.my.company/deployed-by: my-platform
; - 在分发到子集群的资源上标记集群的信息,比如
apps.my.company/running-in: cluster-01
; - 调整应用在每个集群中的副本数目、镜像名称等等,比如有一个名为
my-nginx
(声明的副本数为 3)的Deployment
应用要分发到集群 cluster-01,集群 cluster-02,集群 cluster-03 中,我希望在这三个集群的副本数目分别为 3,5,7; - 在分发到集群 cluster-01 之前,调整应用在该集群中的一些配置,比如注入一个 Sidecar 容器等;
- 遇到某些特殊场景时,例如大促,动态扩容,应用灰度升级时,希望可以针对某个集群进行操作,变更范围小,不影响到其他集群,同时出现问题的时候,可以及时回滚,恢复到变更前的状态;
- 如果定义了多个差异化配置,相互之间出现冲突时,该如何解决;
开源 Clusternet 项目简介
Clusternet ( Cluster Internet ) 是腾讯云开源的兼具多集群管理和跨集群应用编排的云原生管控项目,让使用多集群就像上网一样简单。无论你的 Kubernetes 集群是运行在公有云、私有云、混合云还是边缘云上,都拥有一致的管理/访问体验,利用 K8s API 集中部署和协调多集群的应用程序和服务。
Clusternet 采用 Addon 插件的方式,方便用户一键安装、运维及集成,轻松地管理数以百万计的 Kubernetes 集群,让云计算像 Internet 一样无所不在,自由便捷。
Clusternet 支持向不同集群分发和管理各种应用资源,包括原生 Kubernetes 各类资源(Deployment/StatefulSet/ConfigMap/Secret 等)、各类 CRD 资源,以及 HelmChart 应用等等。
Clusternet 如何解决这些差异化配置难题
Clusternet 在设计应用分发模型的时候,就充分考虑到了上述的那些场景,不希望引入过多的复杂设计,尽量减少用户的重复定义,做到精简化、方便配置、可扩展性强、便于变更回滚等等。
如果我们将上述的差异化问题进行归纳,大致可以归纳为以下两类:
通用化配置或者全局化配置,比如对于某些资源进行无差异化的打标签,预配置等等;
专属于某个集群的配置,比如更改
Deployment
在某集群对应的副本数,升级镜像,增加 Sidecar 容器等等;
下图是 Clusternet 的多集群应用分发模型,其中绿色的模块是需要用户去创建的,紫色的模块是 Clusternet 内部做流转的资源对象。Clusternet 提供了 kubectl 插件,可以通过 “kubectl clusternet apply” 命令来