Skip to content

Kustomize Lab💣

Lab Overview💣

In this lab we use kustomize CLI tool for templating kubernetes .yaml files, but first we will build out the directory structure and populate the necessary files.
Finally we will compare the files that the kustomize tool generated to understand how kustomize is implemented

Kustomize💣

Lab💣

  1. Verify kustomize is installed
kustomize version
which kustomize

NOTE for Ubuntu users (if kustomize was installed via snap you’ll see errors, so let’s verify
The which command tells you the path where the kustomize cli tool is installed, if you see snap in the path, uninstall it and reinstall using the directions on this page

  1. Create the file structure
cd ~/Desktop/configlabs
mkdir -p sample-app/base
mkdir -p sample-app/overlays/development
mkdir -p sample-app/overlays/production
  1. Create the base deployment yaml and open to edit
vi sample-app/base/deployment.yaml
  1. Add base pod to the file and save
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-world
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-world
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
        - name: hello-world
          image: nginx
          resources:
            limits:
              memory: "128Mi"
              cpu: "500m"
          ports:
            - containerPort: 80
  1. Create the base kustomization.yaml and open to edit
vi sample-app/base/kustomization.yaml
  1. Add the following contents and save
# Specifies the files to include when kustomize builds the application
resources:
  - deployment.yaml

Create an overlay file and open to edit

vi sample-app/overlays/development/replica_count.yaml
  1. Add the following contents and save
# Overlay to increase the replicaCount
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-world
spec:
  replicas: 3
  1. Create an overlay kustomization file and open to edit
vi sample-app/overlays/development/kustomization.yaml
  1. Add the following contents
# Specifies the base files
bases:
  - ../../base

# Specifies overrides to the base files
patches:
  - replica_count.yaml
  1. Generate Kustomize output

    kustomize build sample-app/overlays/development
    cat sample-app/base/deployment.yaml
    

    Compare the 2 outputs and notice the replicaCount of 3 was overlaid onto the base file

Bonus round!💣

  1. Generate a production deployment with kustomize

    Create the kustomization.yaml and replica_count.yaml for production environment

    vi sample-app/overlays/production/kustomization.yaml
    

    Add the following contents

    bases:
      - ../../base
    
    patches:
      - replica_count.yaml
    
    vi sample-app/overlays/production/replica_count.yaml
    

    Add the following contents

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello-world
    spec:
      replicas: 200
    

Now create the deployment file for our production environment💣

  1. ```bash kustomize build sample-app/overlays/production
    This should spit the following out to the terminal:
    
    ```yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello-world
    spec:
      replicas: 200
      selector:
        matchLabels:
          app: hello-world
      template:
        metadata:
          labels:
            app: hello-world
        spec:
          containers:
            - image: nginx
              name: hello-world
              ports:
                - containerPort: 80
              resources:
                limits:
                  cpu: 500m
                  memory: 128Mi