Application Helm Chart
A universal Helm chart for streamlined Kubernetes deployments with simplified configuration.
Creates standard resources like Deployments, Ingress, PodMonitors (Prometheus), and more.
Introduction
Writing a Helm chart for even a small application can get really tedious, as it involves a lot of repetitive tasks and templating is not very user-friendly. However, with the Helm application, you can make the task much easier and fun to use!
We developed this unified chart because our applications share common deployment patterns. Managing multiple similar charts became time-consuming and maintenance-heavy.
This chart manages extended standard Kubernetes objects to simplify application deployment using only YAML configuration. While staying close to native Kubernetes syntax, it allows all settings to be overridden in sub-values YAML files using dictionaries with meaningful keys.
Features
- Support for multiple workloads (Deployment, CronJob, Job, or StatefulSet)
- Internal resource linking (Secret, ConfigMap, and ExternalSecret to env and volume, ...)
- Environment variable management from various sources (values, ConfigMap, Secret, ExternalSecret)
Kubernetes Adaptations
While staying close to standard Kubernetes manifests, this chart implements these enhancements:
- Converts lists to dictionaries for easier value overrides
- Provides flexible environment variable definitions
- Implements image configuration with hash pinning and metadata storage
- Adds standard Kubernetes labels to all components:
app.kubernetes.io/name
app.kubernetes.io/instance
app.kubernetes.io/component
helm.sh/chart
app.kubernetes.io/version
app.kubernetes.io/managed-by
- Links components using standard labels:
app.kubernetes.io/name
app.kubernetes.io/instance
app.kubernetes.io/component
- Supports special selectors (
self
,self-metadata
,self-external
) for internal resources - Handles Docker registry secret configuration automatically
- Supports metadata ConfigMap generation
Supported Resources
Kubernetes standard objects:
- Deployments
- CronJob
- Job
- StatefulSet
- PodDisruptionBudget
- ConfigMap
- Secret
- HorizontalPodAutoscaler
- Service
- Ingress
- ServiceAccount
Common third-party objects:
Planned additions:
Examples
An example showing how to deploy a Deployment with an ExternalSecret and Docker registry configuration.
The example below demonstrates how to set up a simple deployment that:
- Uses an external Docker registry (GitHub Container Registry)
- Configures an ExternalSecret to manage sensitive data
- Creates a basic deployment with service and ingress
application:
dockerregistry:
external: true
content:
ghcr_io:
externalEmail: ghcr-email
externalUsername: ghcr-username
externalPassword: ghcr-password
externalUrl: ghcr-url
externalSecrets:
app:
enabled: true
refreshInterval: 1h
secretStoreRef:
name: my-secret-store
kind: SecretStore
data:
my-secret:
remoteRef:
key: my-secret
services:
my-deployment:
enabled: true
pdb:
enabled: false
ingress:
enabled: true
path: /
service:
type: ClusterIP
servicePort: 8080
ports:
- name: http
port: 8080
protocol: TCP
targetPort: http
containers:
my-container:
image:
repository: camptocamp/my-image
tag: latest
command:
- sleep
- '3600'
env:
SECRET:
type: secret
name: self-external-secret-app
key: my-secret
Additional Resources
- Main Project Repository - Source code, issues, and releases
- Documentation Wiki - Detailed guides and configuration examples
Conclusion
This chart is not perfect, but it can be used for major simple cases and some big applications.
Top comments (0)