Kubernetes config on code repo vs on helm charts repo
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Introduction
Kubernetes is a powerful platform for managing containerized applications across a cluster of machines. Configuration management is a central piece of Kubernetes administration, where two common strategies are used: storing configurations in a code repository (GitOps), or using Helm Charts in a separate repository. Each method has its unique benefits and limitations, which we will explore in this article.
Kubernetes Configurations in Code Repositories
Overview
Storing Kubernetes configurations directly in a code repository is a straightforward approach that falls under the GitOps model. GitOps is a paradigm wherein Git repositories store and manage the desired state of a system, making it the single source of truth.
Pros
- Version Control: Using Git for Kubernetes configurations lets you leverage all Git features like commits, branches, and tags, providing a clear history of changes.
- Integrated Workflow: This method integrates seamlessly with CI/CD pipelines, with tools like Jenkins, GitLab CI, or GitHub Actions triggering actions based on repository changes.
- Human-Friendly: Human-readable and modifiable configurations make it easier for developers to understand and edit configurations as needed.
Cons
- Scalability Issues: As the number of configurations grows, managing and maintaining them becomes increasingly burdensome.
- Standardization: Without a templating system, it is challenging to enforce standardization across multiple applications or environments.
Example
In a typical setup, you might store YAML files representing different Kubernetes resources within your repository:
- Reusability: Helm Charts enable you to create reusable and shareable application templates.
- Parametrization: With values files, you can easily parameterize configurations, making it suited for different environments (e.g., staging, production).
- Complex Applications: Ideal for deploying complex, multi-component applications with varied configurations.
- Learning Curve: Helm has its syntax and conventions, requiring a learning curve for team members.
- Debugging: Debugging Helm Charts can be challenging due to the layered abstraction over raw Kubernetes YAML.
- Encrypt sensitive data, like secrets, using tools like SealedSecrets or HashiCorp Vault.
- Regularly audit access permissions to prevent unauthorized changes.
- For Helm Users: Consider using Helm plugins like `helmfile` for easier organization and deployment of multiple Helm releases.
- For GitOps: Use dedicated GitOps tools like Flux or ArgoCD to enhance your operations with automated syncing and monitoring of configurations.
Related reading
- kubernetes configmap set from-file in yaml configuration
- kubernetes configmaps for binary file
- Kubernetes ConfigMaps Volume Mount issue
- Kubernetes CoreDNS resolving names intermittently
- Kubernetes CoreOS Ceph RBD
- Kubernetes create deployment unexpected SchemaError
- Kubernetes Gitlab How to store password for private registry?
- Kubernetes resource versioning

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.