When deploying an application using Helm, you might encounter the error:
Error: INSTALLATION FAILED: create: failed to create: Request entity too large: limit is 3145728
This error occurs when the size of the Helm chart or the generated Kubernetes resources exceeds the default size limit set by the Kubernetes API server or ingress controllers. This blog provides a comprehensive guide to resolving the issue, including an approach to split an umbrella Helm chart into multiple smaller charts.
Problem Overview
What does the error mean?
The error indicates that the payload size of your Helm installation request is larger than the allowed size limit (3 MB by default).
Common causes include:
- Large ConfigMaps or Secrets.
- Oversized
values.yaml
files. - Complex umbrella charts generating large manifests.
Solution: Splitting an Umbrella Chart
Splitting an umbrella chart into smaller, more manageable charts is an effective way to address this error. Here’s how to do it:
1. Analyze and Group Components
Identify logical groupings within your current umbrella chart. For example:
- Core Services: Redis, PostgreSQL, RabbitMQ.
- Application Modules: Microservices or feature-specific components.
- Auxiliary Tools: Monitoring (e.g., Prometheus), logging (e.g., Fluentd), and alerting (e.g., Alertmanager).
2. Create Smaller Umbrella Charts
For each logical grouping, create a new Helm chart with its own dependencies:
Folder Structure Example
umbrella-chart-core/
├── Chart.yaml
├── values.yaml
├── charts/
│ ├── redis/
│ ├── postgres/
│ └── rabbitmq/
umbrella-chart-app/
├── Chart.yaml
├── values.yaml
├── charts/
│ ├── service-a/
│ ├── service-b/
│ └── service-c/
3. Update Dependencies
Define the dependencies in each new chart's
Chart.yaml
.Example
Chart.yaml
forumbrella-chart-core
:
apiVersion: v2
name: umbrella-chart-core
dependencies:
- name: redis
version: "6.0.8"
repository: "https://charts.bitnami.com/bitnami"
- name: postgres
version: "12.9.0"
repository: "https://charts.bitnami.com/bitnami"
-
Run the following command to update dependencies:
helm dependency update
4. Externalize Shared Values
Move shared configurations to an external location to avoid duplication:
- Use Kubernetes ConfigMaps or Secrets for shared settings.
-
Example
values.yaml
:
global: database: host: "db.example.com" username: "user" password: "password"`
5. Deploy Charts Independently
Deploy each smaller umbrella chart individually:
helm install core-services umbrella-chart-core/
helm install app-services umbrella-chart-app/
Best Practices
- Keep Charts Modular: Avoid bloated umbrella charts.
- Use External Storage: Store large files (e.g., certificates) outside Kubernetes.
-
Test Chart Output: Use
helm template
to verify the size of generated manifests:helm template my-release my-chart > output.yaml
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.