Skip to content

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
  1. Spec: You write a declarative definition of your app.
  2. Validate: helm-me lint checks for errors.
  3. Render: helm-me render converts the spec into K8s manifests.
  4. Deploy: helm-me deploy applies the manifests to the cluster.
  5. Ops: You use helm-me ops commands to observe and interact with the deployed app.
  6. Export: At any point, you can helm-me chart export to 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.