Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Create a Helm Chart with Templates and values.yaml
📖 Scenario: You are working as a DevOps engineer. Your team wants to deploy a simple web application using Helm charts on Kubernetes. You need to create the basic Helm chart files: a values.yaml file to hold configuration values and a template file to use those values.
🎯 Goal: Build a Helm chart with a values.yaml file containing application settings and a template file that uses these values to generate a Kubernetes Deployment manifest.
📋 What You'll Learn
Create a values.yaml file with specific keys and values
Create a template file deployment.yaml that uses values from values.yaml
Use Helm template syntax to insert values
Output the final rendered Deployment manifest
💡 Why This Matters
🌍 Real World
Helm charts are widely used to package, configure, and deploy applications on Kubernetes clusters in a repeatable way.
💼 Career
Understanding Helm charts and how to use <code>values.yaml</code> and templates is essential for DevOps engineers working with Kubernetes deployments.
Progress0 / 4 steps
1
Create the values.yaml file
Create a values.yaml file with these exact entries: appName: myapp replicaCount: 3 image: repository: nginx tag: stable
Kubernetes
Hint
The values.yaml file holds configuration values in YAML format. Use indentation for nested keys like image.repository.
2
Create the deployment.yaml template
Create a Helm template file named deployment.yaml that starts with apiVersion: apps/v1 and kind: Deployment. Use the value .Values.appName for metadata.name and spec.replicas. Use .Values.image.repository and .Values.image.tag for the container image.
Kubernetes
Hint
Use double curly braces {{ }} to insert values from values.yaml in the template.
3
Render the Helm template
Write a command to render the Helm template using helm template with the current directory as the chart location.
Kubernetes
Hint
The helm template . command renders the templates in the current directory without installing them.
4
Display the rendered Deployment manifest
Run the helm template . command and print the output to show the rendered Kubernetes Deployment manifest.
Kubernetes
Hint
Use Python's subprocess module to run the helm template . command and print the output.
Practice
(1/5)
1. What is the main purpose of the values.yaml file in a Helm chart?
easy
A. To store default configuration values for templates
B. To define Kubernetes resource limits
C. To write deployment scripts
D. To list all Kubernetes nodes
Solution
Step 1: Understand Helm chart structure
Helm charts use templates with placeholders to create Kubernetes manifests dynamically.
Step 2: Role of values.yaml
The values.yaml file provides default values for these placeholders, allowing customization without changing templates.
Final Answer:
To store default configuration values for templates -> Option A
Quick Check:
values.yaml = default settings [OK]
Hint: Remember: values.yaml holds default settings for templates [OK]
Common Mistakes:
Confusing values.yaml with deployment scripts
Thinking it defines resource limits directly
Assuming it lists Kubernetes nodes
2. Which of the following is the correct syntax to reference a value named replicaCount from values.yaml inside a Helm template?
easy
A. {{ .Values.replicaCount }}
B. {{ .replicaCount }}
C. {{ values.replicaCount }}
D. {{ .Config.replicaCount }}
Solution
Step 1: Understand Helm template syntax
Helm templates access values using the .Values object followed by the key name.
Step 2: Match syntax for replicaCount
The correct way is {{ .Values.replicaCount }} to get the value from values.yaml.
Final Answer:
{{ .Values.replicaCount }} -> Option A
Quick Check:
Use .Values.key to access values [OK]
Hint: Use .Values.key to get values in templates [OK]
What will be the output of this Helm template snippet?
{{ .Values.replicaCount }} replicas of {{ .Values.image.repository }}:{{ .Values.image.tag }}
medium
A. replicaCount replicas of image.repository:image.tag
B. Error: undefined values
C. 3 replicas of nginx:latest
D. 3 replicas of nginx:stable
Solution
Step 1: Read values.yaml keys and values
replicaCount is 3, image.repository is 'nginx', and image.tag is 'stable'.
Step 2: Substitute values in template
The template outputs: '3 replicas of nginx:stable' by replacing placeholders with values.
Final Answer:
3 replicas of nginx:stable -> Option D
Quick Check:
Values replaced correctly = 3 replicas of nginx:stable [OK]
Hint: Match keys exactly to get correct output [OK]
Common Mistakes:
Using wrong tags like 'latest' instead of 'stable'
Not accessing nested keys properly
Expecting literal placeholders in output
4. You have this template snippet:
{{ if .Values.enableFeature }}Feature is enabled{{ else }}Feature is disabled{{ end }}
But the output always shows "Feature is disabled" even when you set enableFeature: true in values.yaml. What is the likely cause?
medium
A. The template syntax is incorrect and missing a closing tag
B. enableFeature is set as a string "true" instead of boolean true
C. The values.yaml file is not saved properly
D. Helm does not support boolean values in values.yaml
Solution
Step 1: Check boolean handling in values.yaml
YAML treats unquoted true as boolean, but quoted "true" is a string, which evaluates as true in some contexts but false in Helm conditionals.
Step 2: Understand Helm conditional evaluation
Helm expects boolean true, so if enableFeature is a string, the condition fails and goes to else.
Final Answer:
enableFeature is set as a string "true" instead of boolean true -> Option B
Quick Check:
Boolean true must be unquoted in values.yaml [OK]
Hint: Use unquoted true/false for booleans in values.yaml [OK]
Common Mistakes:
Quoting booleans as strings
Assuming template syntax error without checking values
Not saving values.yaml after changes
5. You want to create a Helm chart template that sets the container port only if service.port is defined in values.yaml. Which template snippet correctly implements this conditional logic?
hard
A. {{- if .Values.service.port }}
containerPort: "{{ .Values.service.port }}"
{{- else }}
containerPort: 80
{{- end }}
B. {{- if .service.port }}
containerPort: {{ .service.port }}
{{- end }}
C. {{- if .Values.service.port }}
containerPort: {{ .Values.service.port }}
{{- end }}
D. {{- if .Values.service.port != null }}
containerPort: {{ .Values.service.port }}
{{- end }}
Solution
Step 1: Identify correct value reference
Use .Values.service.port to access the port value from values.yaml.
Step 2: Use proper conditional syntax
Helm templates use {{- if .Values.service.port }} to check if the value exists and is non-empty.
Step 3: Evaluate options
{{- if .Values.service.port }}
containerPort: {{ .Values.service.port }}
{{- end }} correctly uses the conditional and outputs the port only if defined. {{- if .service.port }}
containerPort: {{ .service.port }}
{{- end }} misses .Values. {{- if .Values.service.port }}
containerPort: "{{ .Values.service.port }}"
{{- else }}
containerPort: 80
{{- end }} adds an else block which is not requested. {{- if .Values.service.port != null }}
containerPort: {{ .Values.service.port }}
{{- end }} uses invalid syntax (!= null is not valid in Helm templates).
Final Answer:
{{- if .Values.service.port }}
containerPort: {{ .Values.service.port }}
{{- end }} -> Option C
Quick Check:
Use if .Values.key for conditionals [OK]
Hint: Check existence with if .Values.key, no need for != null [OK]