If you look in the newly created eksdemo directory, you’ll see several files and directories.
The table below outlines the purpose of each component in the Helm chart structure.
File or Directory | Description |
---|---|
charts/ | Sub-charts that the chart depends on |
Chart.yaml | Information about your chart |
values.yaml | The default values for your templates |
template/ | The template files |
template/deployment.yaml | Basic manifest for creating Kubernetes Deployment objects |
template/_helpers.tpl | Used to define Go template helpers |
template/hpa.yaml | Basic manifest for creating Kubernetes Horizontal Pod Autoscaler objects |
template/ingress.yaml | Basic manifest for creating Kubernetes Ingress objects |
template/NOTES.txt | A plain text file to give users detailed information about how to use the newly installed chart |
template/serviceaccount.yaml | Basic manifest for creating Kubernetes ServiceAccount objects |
template/service.yaml | Basic manifest for creating Kubernetes Service objects |
tests/ | Directory of Test files |
tests/test-connections.yaml | Tests that validate that your chart works as expected when it is installed |
We’re actually going to create our own files, so we’ll delete these boilerplate files
rm -rf ~/environment/eksdemo/templates/
rm ~/environment/eksdemo/Chart.yaml
rm ~/environment/eksdemo/values.yaml
Run the following code block to create a new Chart.yaml file which will describe the chart
cat <<EoF > ~/environment/eksdemo/Chart.yaml
apiVersion: v2
name: eksdemo
description: A Helm chart for EKS Workshop Microservices application
version: 0.1.0
appVersion: 1.0
EoF
Next we’ll copy the manifest files for each of our microservices into the templates directory as servicename.yaml
#create subfolders for each template type
mkdir -p ~/environment/eksdemo/templates/deployment
mkdir -p ~/environment/eksdemo/templates/service
# Copy and rename frontend manifests
cp ~/environment/ecsdemo-frontend/kubernetes/deployment.yaml ~/environment/eksdemo/templates/deployment/frontend.yaml
cp ~/environment/ecsdemo-frontend/kubernetes/service.yaml ~/environment/eksdemo/templates/service/frontend.yaml
# Copy and rename crystal manifests
cp ~/environment/ecsdemo-crystal/kubernetes/deployment.yaml ~/environment/eksdemo/templates/deployment/crystal.yaml
cp ~/environment/ecsdemo-crystal/kubernetes/service.yaml ~/environment/eksdemo/templates/service/crystal.yaml
# Copy and rename nodejs manifests
cp ~/environment/ecsdemo-nodejs/kubernetes/deployment.yaml ~/environment/eksdemo/templates/deployment/nodejs.yaml
cp ~/environment/ecsdemo-nodejs/kubernetes/service.yaml ~/environment/eksdemo/templates/service/nodejs.yaml
All files in the templates directory are sent through the template engine. These are currently plain YAML files that would be sent to Kubernetes as-is.
Let’s replace some of the values with template directives
to enable more customization by removing hard-coded values.
Open ~/environment/eksdemo/templates/deployment/frontend.yaml in your Cloud9 editor.
The following steps should be completed seperately for frontend.yaml, crystal.yaml, and nodejs.yaml.
Under spec
, find replicas: 1 and replace with the following:
replicas: {{ .Values.replicas }}
Under spec.template.spec.containers.image
, replace the image with the correct template value from the table below:
Filename | Value |
---|---|
frontend.yaml | - image: {{ .Values.frontend.image }}:{{ .Values.version }} |
crystal.yaml | - image: {{ .Values.crystal.image }}:{{ .Values.version }} |
nodejs.yaml | - image: {{ .Values.nodejs.image }}:{{ .Values.version }} |
Run the following code block to populate our template directives
with default values.
cat <<EoF > ~/environment/eksdemo/values.yaml
# Default values for eksdemo.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
# Release-wide Values
replicas: 3
version: 'latest'
# Service Specific Values
nodejs:
image: brentley/ecsdemo-nodejs
crystal:
image: brentley/ecsdemo-crystal
frontend:
image: brentley/ecsdemo-frontend
EoF