Skip to content

Architecture FAQ

This FAQ addresses common questions about KubeElasti's architecture decisions and design choices.

Q: Why does KubeElasti use separate images for the Resolver and Operator?

A: KubeElasti uses separate images for architectural and operational reasons:

Resolver Requirements: - Designed to be horizontally scalable with multiple instances - Handles incoming traffic and needs high availability - Supports HPA (Horizontal Pod Autoscaler) for dynamic scaling - Focused on one responsibility: receive, hold, and process requests

Operator Requirements: - Runs as a singleton service with only one active instance - Acts as an orchestrator handling state updates and triggers - Built using kubebuilder with standard controller patterns - Handles signals and triggers, not data processing

Q: Why can't the Operator run with multiple replicas?

A: The Operator must run as a singleton because: - This follows standard Kubernetes controller patterns - Only one controller can be active at a time for the ElastiService resource

Q: How does the Resolver achieve high availability?

A: The Resolver is designed for horizontal scaling: - Multiple instances can run simultaneously - HPA automatically scales based on load - Each instance can independently handle incoming requests - Load balancing distributes traffic across instances

Q: Why does KubeElasti use multiple go.mod files with go.work?

A: This wasn't originally planned but evolved organically: - Initially had separate Resolver and Operator modules - The pkg module was introduced later for shared components - Alternative approaches (single go.mod with ./cmd/ structure) were considered - The current structure provides clear separation of concerns