{"id":1963,"date":"2024-08-11T07:24:16","date_gmt":"2024-08-11T07:24:16","guid":{"rendered":"https:\/\/www.nicktailor.com\/?p=1963"},"modified":"2025-06-11T07:27:43","modified_gmt":"2025-06-11T07:27:43","slug":"what-the-hell-is-helm-and-why-you-should-care","status":"publish","type":"post","link":"https:\/\/nicktailor.com\/tech-blog\/what-the-hell-is-helm-and-why-you-should-care\/","title":{"rendered":"What the Hell is Helm? (And Why You Should Care)"},"content":{"rendered":"\n<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\"\/>\n  <title>What the Hell is Helm?<\/title>\n  <style>\n    body {\n      font-family: Arial, sans-serif;\n      line-height: 1.6;\n      color: #333;\n      padding: 20px;\n      background-color: #f9f9f9;\n    }\n    h1, h2, h3 {\n      color: #222;\n    }\n    pre {\n      background: #f4f4f4;\n      padding: 12px;\n      border-left: 4px solid #ccc;\n      overflow-x: auto;\n      white-space: pre-wrap;\n    }\n    code {\n      background: #eee;\n      padding: 2px 4px;\n      border-radius: 3px;\n      font-family: Consolas, monospace;\n    }\n    hr {\n      border: none;\n      border-top: 2px solid #ccc;\n      margin: 40px 0;\n    }\n  <\/style>\n<\/head>\n<body>\n\n\n<p>If you\u2019re tired of managing 10+ YAML files for every app, Helm is your new best friend. It\u2019s basically the package manager for Kubernetes \u2014 like apt or brew \u2014 but for deploying apps in your cluster.<\/p>\n\n<p>Instead of editing raw YAML over and over for each environment (dev, staging, prod), Helm lets you <strong>template it<\/strong>, inject dynamic values, and install with a single command.<\/p>\n\n<hr \/>\n\n<h2>Why Use Helm?<\/h2>\n<p>Here\u2019s the reality:<\/p>\n<ul>\n  <li>You don&#8217;t want to maintain 3 sets of YAMLs for each environment.<\/li>\n  <li>You want to roll back fast if something breaks.<\/li>\n  <li>You want to reuse deployments across projects without rewriting.<\/li>\n<\/ul>\n\n<p>Helm fixes all that. It gives you:<\/p>\n<ul>\n  <li><strong>Templated YAML<\/strong> (no more copy-paste hell)<\/li>\n  <li><strong>One chart, many environments<\/strong><\/li>\n  <li><strong>Version control + rollback support<\/strong><\/li>\n  <li><strong>Easy upgrades with <code>helm upgrade<\/code><\/strong><\/li>\n  <li><strong>Access to thousands of ready-made charts from the community<\/strong><\/li>\n<\/ul>\n\n<hr \/>\n\n<h2>Real Talk: What\u2019s a Chart?<\/h2>\n<p>Think of a <strong>chart<\/strong> like a folder of YAML files with variables in it. You install it, pass in your config (<code>values.yaml<\/code>), and Helm renders the final manifests and applies them to your cluster.<\/p>\n\n<p>When you install a chart, Helm creates a <strong>release<\/strong> \u2014 basically, a named instance of the chart running in your cluster.<\/p>\n\n<hr \/>\n\n<h2>How to Get Started (No BS)<\/h2>\n\n<h3>1. Install Helm<\/h3>\n<pre><code>brew install helm       # mac  \nchoco install kubernetes-helm  # windows  \nsudo snap install helm  # linux  \n<\/code><\/pre>\n\n<h3>2. Create Your First Chart<\/h3>\n<pre><code>helm create myapp\n<\/code><\/pre>\n<p>Boom \u2014 you now have a scaffolded chart in a folder with templates, a values file, and everything else you need.<\/p>\n\n<hr \/>\n\n<h2>Folder Breakdown<\/h2>\n<pre><code>myapp\/\n\u251c\u2500\u2500 Chart.yaml         # Metadata\n\u251c\u2500\u2500 values.yaml        # Config you can override\n\u2514\u2500\u2500 templates\/         # All your actual Kubernetes YAMLs (as templates)\n<\/code><\/pre>\n\n<hr \/>\n\n<h2>Example Template (deployment.yaml)<\/h2>\n<pre><code>apiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: {{ .Release.Name }}-app\nspec:\n  replicas: {{ .Values.replicaCount }}\n  selector:\n    matchLabels:\n      app: {{ .Chart.Name }}\n  template:\n    metadata:\n      labels:\n        app: {{ .Chart.Name }}\n    spec:\n      containers:\n      - name: {{ .Chart.Name }}\n        image: \"{{ .Values.image.repository }}:{{ .Values.image.tag }}\"\n        ports:\n        - containerPort: 80\n<\/code><\/pre>\n\n<hr \/>\n\n<h2>Example values.yaml<\/h2>\n<pre><code>replicaCount: 3\nimage:\n  repository: nginx\n  tag: latest\n<\/code><\/pre>\n\n<p>Change the values, re-deploy, and you\u2019re done.<\/p>\n\n<hr \/>\n\n<h2>Deploying to Your Cluster<\/h2>\n<pre><code>helm install my-release .\/myapp\n<\/code><\/pre>\n\n<h3>Upgrading later?<\/h3>\n<pre><code>helm upgrade my-release .\/myapp -f prod-values.yaml\n<\/code><\/pre>\n\n<h3>Roll it back?<\/h3>\n<pre><code>helm rollback my-release 1\n<\/code><\/pre>\n\n<h3>Uninstall it?<\/h3>\n<pre><code>helm uninstall my-release\n<\/code><\/pre>\n\n<p>Simple. Clean. Versioned.<\/p>\n\n<hr \/>\n\n<h2>Want a Database?<\/h2>\n<p>Don\u2019t write your own MySQL config. Just pull it from Bitnami\u2019s chart repo:<\/p>\n<pre><code>helm repo add bitnami https:\/\/charts.bitnami.com\/bitnami\nhelm install my-db bitnami\/mysql\n<\/code><\/pre>\n\n<p>Done.<\/p>\n\n<hr \/>\n\n<p>Helm lets you:<\/p>\n<ul>\n  <li>Turn your Kubernetes YAML into reusable templates<\/li>\n  <li>Manage config per environment without duplicating files<\/li>\n  <li>Version your deployments and roll back instantly<\/li>\n  <li>Install apps like MySQL, Redis, etc., with one command<\/li>\n<\/ul>\n\n<p>It\u2019s the smart way to scale your Kubernetes setup without losing your mind.<\/p>\n\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>What the Hell is Helm? If you\u2019re tired of managing 10+ YAML files for every app, Helm is your new best friend. It\u2019s basically the package manager for Kubernetes \u2014 like apt or brew \u2014 but for deploying apps in your cluster. Instead of editing raw YAML over and over for each environment (dev, staging, prod), Helm lets you template<a href=\"https:\/\/nicktailor.com\/tech-blog\/what-the-hell-is-helm-and-why-you-should-care\/\" class=\"read-more\">Read More &#8230;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[145],"tags":[],"class_list":["post-1963","post","type-post","status-publish","format-standard","hentry","category-devops"],"_links":{"self":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts\/1963","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/comments?post=1963"}],"version-history":[{"count":2,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts\/1963\/revisions"}],"predecessor-version":[{"id":1966,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts\/1963\/revisions\/1966"}],"wp:attachment":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/media?parent=1963"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/categories?post=1963"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/tags?post=1963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}