# Basic Application Helm Chart ## Overview This Helm chart deploys a basic application on a Kubernetes cluster with the following components: - A deployment with configurable replicas - A persistent volume claim for data storage - A service for internal communication - An ingress for external access with TLS support ## Prerequisites - Kubernetes 1.19+ - Helm 3.0+ - PV provisioner support in the underlying infrastructure - Ingress controller (e.g., nginx-ingress) ## Installation ### Add the repository ```bash # If hosted in a Helm repository helm repo add my-repo https://charts.example.com helm repo update ``` ### Install the chart ```bash # Using default values helm install my-release . # Using custom values file helm install my-release . -f values.yaml # Using --set helm install my-release . --set ingress.hosts[0].host=example.com ``` ## Uninstallation ```bash helm uninstall my-release ``` ## Configuration The following table lists the configurable parameters of the chart and their default values. | Parameter | Description | Default | |-----------|-------------|---------| | `replicaCount` | Number of replicas | `1` | | `image.repository` | Image repository | `nginx` | | `image.tag` | Image tag | `latest` | | `image.pullPolicy` | Image pull policy | `IfNotPresent` | | `service.type` | Kubernetes service type | `ClusterIP` | | `service.port` | Kubernetes service port | `80` | | `ingress.enabled` | Enable ingress | `true` | | `ingress.className` | Ingress class name | `nginx` | | `ingress.annotations` | Ingress annotations | `{}` | | `ingress.hosts[0].host` | Hostname | `chart-example.local` | | `ingress.hosts[0].paths[0].path` | Path | `/` | | `ingress.hosts[0].paths[0].pathType` | Path type | `Prefix` | | `ingress.tls.enabled` | Enable TLS | `true` | | `ingress.tls.secretName` | TLS secret name | `chart-example-tls` | | `persistence.enabled` | Enable persistence | `true` | | `persistence.accessMode` | PVC access mode | `ReadWriteOnce` | | `persistence.size` | PVC size | `1Gi` | | `persistence.storageClass` | PVC storage class | `""` | ### Ingress Annotations Examples For NGINX ingress controller: ```yaml ingress: annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/ssl-redirect: "true" ``` For cert-manager SSL certificates: ```yaml ingress: annotations: cert-manager.io/cluster-issuer: "letsencrypt-prod" ``` ## TLS Configuration To use TLS, create a TLS secret in the namespace: ```bash kubectl create secret tls chart-example-tls \ --cert=path/to/tls.cert \ --key=path/to/tls.key ``` Then enable it in values.yaml: ```yaml ingress: tls: enabled: true secretName: chart-example-tls hosts: - chart-example.local ``` ## Persistence The chart mounts a Persistent Volume at `/data`. The volume is created using dynamic volume provisioning. ## Upgrading ```bash # Upgrade using values file helm upgrade my-release . -f values.yaml # Upgrade with --set flag helm upgrade my-release . --set replicaCount=3 ``` ## Limitations - The chart has been tested on Kubernetes 1.19+ - Persistent volume provisioning support in underlying infrastructure - Ingress controller must be present in the cluster ## Contributing If you find any issues with this chart or want to contribute improvements: 1. Fork the repository 2. Create a new branch for your changes 3. Submit a pull request ## License This Helm chart is licensed under the MIT License.