Deploy Helm Charts
Helm is a package manager for Kubernetes that simplifies the process of deploying and managing applications. This guide will walk you through the best practices for deploying Helm charts in MetaKube Core.
Prerequisites
- Access to a MetaKube Core cluster
- Helm CLI installed on your local machine
kubectlconfigured to interact with your cluster
Best Practices for Deploying Helm Charts
1. Choose the Right Chart Repository
- Use official or well-maintained chart repositories
- Examples:
- Artifact Hub (https://artifacthub.io/)
- Bitnami (https://charts.bitnami.com/bitnami)
- Helm Stable (https://charts.helm.sh/stable)
2. Verify Chart Integrity
- Always verify the chart's signature if available
- Check the chart's documentation and source code
3. Use Version Pinning
- Specify exact versions for charts to ensure reproducibility
- Avoid using the
latesttag in production environments
4. Customize Values Carefully
- Create a separate values file for your customizations
- Document any changes from default values
# custom-values.yaml
wordpressUsername: user
wordpressPassword: password
mariadb:
auth:
rootPassword: rootpassword
5. Use Namespaces for Isolation
- Deploy charts in dedicated namespaces for better resource management
- Create the namespace before installing the chart
6. Implement RBAC
- Use Role-Based Access Control (RBAC) to limit permissions
- Create specific service accounts for Helm releases
# service-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-release-sa
namespace: my-app
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: my-release-role
namespace: my-app
rules:
- apiGroups: [""]
resources: ["pods", "services", "configmaps"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my-release-rolebinding
namespace: my-app
subjects:
- kind: ServiceAccount
name: my-release-sa
namespace: my-app
roleRef:
kind: Role
name: my-release-role
apiGroup: rbac.authorization.k8s.io
kubectl apply -f service-account.yaml
helm install my-release bitnami/wordpress --namespace my-app --service-account my-release-sa
7. Use Helm Hooks for Complex Deployments
- Leverage Helm hooks for pre/post-installation tasks
- Example: database initialization, backup before upgrade
annotations:
"helm.sh/hook": pre-install
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": hook-succeeded
8. Implement Health Checks
- Define readiness and liveness probes in your chart values
- Ensure your application exposes health check endpoints
livenessProbe:
httpGet:
path: /healthz
port: http
initialDelaySeconds: 120
readinessProbe:
httpGet:
path: /readyz
port: http
initialDelaySeconds: 30
9. Set Resource Limits
- Always define CPU and memory limits for your deployments
- Prevents resource contention and improves cluster stability
10. Use Helm Tests
- Implement Helm tests to verify your release's functionality
- Run tests after installation to ensure everything is working correctly
# templates/tests/test-connection.yaml
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "mychart.fullname" . }}-test-connection"
annotations:
"helm.sh/hook": test
spec:
containers:
- name: wget
image: busybox
command: ['wget']
args: ['{{ include "mychart.fullname" . }}:{{ .Values.service.port }}']
restartPolicy: Never
11. Implement Proper Upgrade Strategies
- Use
helm upgradewith the--atomicflag for automatic rollback on failure - Test upgrades in a staging environment before applying to production
12. Monitor and Log
- Integrate with MetaKube Core's monitoring and logging solutions
- Set up alerts for critical metrics
13. Regular Maintenance
- Keep charts and dependencies up to date
- Regularly review and apply security patches
Conclusion
By following these best practices, you can ensure reliable, secure, and maintainable Helm chart deployments in your MetaKube Core clusters. Remember to always test in a non-production environment first and to keep your charts and dependencies up to date.
For more information on Helm and its features, visit the official Helm documentation.
If you encounter any issues or need further assistance, please contact our support team.