内容提要
Dragonfly支持轻量级部署模式,移除Manager、MySQL和Redis,仅用Scheduler协调,通过ConfigMap管理动态配置,利用Headless Service实现Scheduler发现。该模式适合单集群或CI/CD场景,可用Helm一键安装,支持P2P分发、预加热及应用工件注入。相比完整架构,轻量模式简化运维,但缺少Web控制台和OpenAPI集成。
延伸解读
轻量模式的核心取舍
轻量部署移除了Manager、MySQL和Redis,仅保留Scheduler作为协调组件。这意味着动态配置通过ConfigMap管理,Scheduler发现依赖Headless Service的DNS解析。这种设计简化了运维,无需数据库备份和迁移,但代价是失去了Web控制台、OpenAPI集成和持久化任务能力。对于单集群或CI/CD场景,若主要需求是P2P分发和预加热,轻量模式足够;若需要多集群管理或API触发预加热,则需完整架构。
动态配置与自动发现机制
轻量模式下,Scheduler和Client从本地/etc/dragonfly/dynconfig.yaml加载配置,该文件由Helm挂载的ConfigMap生成。配置更新后,Pod会在默认一分钟的refreshInterval内自动重载,无需重启。Client通过DNS解析Scheduler的Headless Service地址,自动发现所有Scheduler Pod,并健康检查过滤异常实例。若Scheduler在集群外运行,可通过scheduler.addrs静态指定地址,覆盖DNS解析。
适用场景与升级路径
轻量部署适合单集群、边缘位置或CI/CD流水线,主要解决镜像拉取时的注册表过载问题。它支持P2P分发、dfctl预加热和应用工件注入。若需要持久化任务或缓存元数据,可添加Redis;若需要Web控制台、OpenAPI集成或多集群管理,则需启用Manager。文章建议团队可从轻量模式起步,随需求演进逐步升级到完整架构。
Q&A
Dragonfly轻量级部署模式相比完整架构移除了哪些组件?
轻量级部署模式移除了Manager、MySQL和Redis,仅保留Scheduler、Seed Client和Client三个核心组件。
在Dragonfly轻量级部署中,动态配置是如何管理的?
动态配置通过Kubernetes的ConfigMap管理,挂载到Scheduler和Client的本地/etc/dragonfly/dynconfig.yaml文件。当manager.addr未设置时,Scheduler和Client从该文件加载配置,并定期刷新(默认一分钟),无需重启Pod。
Dragonfly轻量级部署中,Client如何发现Scheduler?
Client通过Scheduler的Headless Service进行DNS解析,自动发现所有Scheduler Pod的IP,并健康检查过滤不健康的实例。如果Scheduler使用静态IP,也可以通过scheduler.addrs显式指定地址列表。
Dragonfly轻量级部署适合哪些场景?
轻量级部署适合单集群、边缘位置或CI/CD管道,主要关注P2P分发、任务执行和通过dfctl进行CLI预加热。
如何在kind集群上使用Helm安装Dragonfly轻量级部署?
首先创建多节点kind集群,然后预加载Dragonfly镜像,配置Helm values(省略manager、mysql、redis),最后使用helm install命令安装。具体步骤包括:创建kind-config.yaml并运行kind create cluster,拉取镜像并加载到节点,创建charts-config.yaml,然后执行helm repo add和helm install。
Dragonfly轻量级部署支持哪些预加热方式?
轻量级部署支持通过dfctl CLI进行预加热,可以预热OCI镜像和HTTP/HTTPS文件。预加热任务通过Scheduler的gRPC端点触发,作用于Seed Client或所有Client。
Dragonfly轻量级部署中,应用工件注入是如何实现的?
通过dragonfly-injector,一个Kubernetes mutating admission webhook,在应用Pod创建时注入Dragonfly CLI工具和dfdaemon Unix socket挂载。需要启用injector并配置cert-manager,然后在Pod上添加注解dragonfly.io/inject: 'true'。
Dragonfly轻量级部署与完整Manager架构相比有哪些限制?
轻量级部署缺少Web控制台、OpenAPI集成、个人访问令牌等功能,也不支持持久化任务和持久化缓存任务。预加热只能通过dfctl CLI进行,不能通过OpenAPI或Web控制台触发。