应用的多集群分发面临很多挑战,例如维护多个集群的KubeConfig入口不唯一,同应用在不同集群的差异化配置,缺少统一的视图查看应用在多集群的部署情况,同应用同时部署多个集群风险高等,您可以通过ACK One舰队管理的应用分发来解决以上问题。本文介绍ACK One舰队管理应用分发的原理和功能。
背景信息
ACK One舰队的应用分发功能通过托管开源社区项目KubeVela实现,KubeVela是一个现代化应用交付与管理平台,简化了面向多集群的应用交付过程。ACK One舰队的应用分发提供了统一标准的Kubernetes API接口,实现了Kubernetes原生资源在多集群间的分发,支持不同集群部署的差异化配置,支持基于工作流的集群间灰度发布。通过ACK One Fleet实例,您可以体验到开源社区项目KubeVela的丰富应用交付能力,同时免除您自建以及后期运维工作量。
应用分发原理
基于角色扮演的应用分发
用户(User A)在创建或修改应用后,Fleet实例会将应用所引用的资源下发到关联集群中,此时应用分发会扮演应用创建者或修改者的身份(User A),向关联集群发起资源创建或修改请求,在关联集群上看到的应用相关资源的创建者或修改者为用户User A。满足关联集群独立审计要求,并提升多集群安全水位。基于角色扮演的应用分发原理如下图所示。
实现阶段
ACK One Fleet实例的应用分发功能实现包含以下两个阶段:
在Fleet实例中创建应用相关的Kubernetes原生资源,由第二阶段定义分发规则,分发到关联集群。目前应用分发支持的资源如下:
说明Fleet实例不会监视资源的创建,所以不会触发相应的资源创建,例如Deployment不会触发Pod的创建,Service不会触发Endpoint的创建。
Kind
apiVersion
Deployment
apps/v1
Service
v1
Ingress
networking.k8s.io/v1
ConfigMap
v1
Secret
v1
StatefulSet
apps/v1
PersistentVolumeClaim
v1
ServiceExport
multicluster.x-k8s.io/v1alpha1
ServiceImport
multicluster.x-k8s.io/v1alpha1
HorizontalPodAutoscaler
autoscaling/v1
在Fleet实例上创建分发规则,包括引用第一阶段创建的Kubernetes资源、选择分发目标集群、差异化配置、工作流和实现应用的多集群分发。
功能介绍
功能 | 描述 | 参考文档 |
应用复制分发 | 您可以通过访问ACK One Fleet实例,向多个集群下发Deployment、Service和Ingress等Kubernetes原生资源,包括创建应用相关的Kubernetes原生资源、创建应用部署目标、创建应用等,实现多集群复制部署和查看应用状态。 | |
应用分发差异化配置 | 您可以在ACK One舰队管理的Fleet实例上进行多集群应用分发差异化配置,实现同一个应用在不同目标关联集群上的配置不同,例如副本数量、镜像、环境变量等。 | |
应用集群间灰度分发 | 在应用的多集群分发部署中,您可以使用ACK One应用发布的工作流功能,实现应用在集群之间分批发布。例如,您可以将应用先发布到测试集群,经验证后再发布到生产集群,用来控制发布风险。 | |
选择分发目标集群 | 您通过访问ACK One Fleet实例使用应用分发功能时,需要定义应用分发的目标集群。ACK One支持通过关联集群名称和给关联集群打标的方式选择目标集群。 | |
差异化规则 | 您可以在ACK One Fleet实例上进行多集群应用分发差异化配置,实现同一个应用在不同目标集群上的配置不同。 | |
应用容器水平伸缩(HPA) | 您可以在ACK One应用分发中使用容器水平伸缩(HPA)控制关联集群的应用副本数。 |
ACK One用户交流群
ACK One开放了Kubevela的下列能力,如果您需要更多能力,欢迎使用钉钉搜索群号35688562加入钉钉交流群获得支持。