Application Model Concepts¶
Understanding how helm-me models applications will help you get the most out of it.
What is an Application?¶
In helm-me, an Application is a collection of Components that are deployed together and share a single lifecycle.
Instead of thinking in terms of "I need a Deployment, a Service, an Ingress, a Secret, and a PVC", you think: "I have an Application named my-app, which has a web backend and a Postgres database."
Behind the scenes, helm-me takes your high-level application definition and generates the standard Kubernetes resources for you.
Components¶
A Component is a logical piece of your application. helm-me provides several built-in component types:
web: For HTTP services (APIs, frontends). Generates Deployments, Services, and Ingresses.worker: For background processors (queue consumers). Generates a Deployment without network exposure.cron: For scheduled, recurring tasks. Generates a CronJob (planned feature).postgresql: A built-in PostgreSQL database for prototyping. Generates a StatefulSet and Service.redis: A built-in Redis cache. Generates a Deployment and Service.
You can mix and match these components in a single application spec.
The Pipeline¶
Here is the standard workflow when using helm-me:
graph LR
A[Spec (YAML/Python)] --> B(Validate)
B --> C(Render)
C --> D[Deploy]
D --> E(Ops)
C -.-> F[Export Chart]
style A fill:#f9f,stroke:#333,stroke-width:2px
style D fill:#bbf,stroke:#333,stroke-width:2px
- Spec: You write a declarative definition of your app.
- Validate:
helm-me lintchecks for errors. - Render:
helm-me renderconverts the spec into K8s manifests. - Deploy:
helm-me deployapplies the manifests to the cluster. - Ops: You use
helm-me opscommands to observe and interact with the deployed app. - Export: At any point, you can
helm-me chart exportto generate a standard Helm chart.
Custom vs Built-in Images¶
For web and worker components, you provide your own container image (e.g., image: my-registry.com/my-backend:latest).
For postgresql and redis, helm-me brings its own default images (standard official Alpine images), though you can override them if needed. This makes it trivial to spin up a stateful dependency without writing extra YAML.
Naming Convention¶
helm-me uses a deterministic naming convention. When it generates a Kubernetes resource for a component, the name follows the format:
{app_name}-{component_name}
For example, if your app is hello-app and your component is backend, the generated Deployment will be named hello-app-backend. This makes it easy to find your resources directly with kubectl if you want to.