How to Validate Kubernetes Configurations with Datree

Digital engineer working on virtual blueprint building
Reading Time: 3 minutes

Hello Readers! In this blog we will see how How to Validate Kubernetes Configurations with Datree. I’ll show how to use Datree step by step, starting with installing the tool and then verifying the Kube-rnetes yaml.

What is Datree ?

Datree allows developers to verify the Kubernetes configuration before applying into the Production, Stage, Test, or even the Development environment.

Datree is a command line tool that is installed locally onto the develpoer’s machine. So that he or she can run the CLI commands that verify the Kubernetes manifests (YAML files).

Here is a short command snippet of Datree 

datree test my-kubernetes-manifest.yaml

1. How to Install Datree

Lets start with the first step: Installation. Datree installation is really easy. Generally, I prefer Linux distros as my development machine.

On Linux, you can simply install it by running the following command –

Linux

curl https://get.datree.io | /bin/bash
Datree version

If you are using another Operating System, it’s just as easy to install –

MacOS

curl https://get.datree.io | /bin/bash

Windows

iwr -useb https://get.datree.io/windows_install.ps1 | iex 

2. How to test Kubernetes Manifest using Datree

After installing the Datree, the next step is to test the Kubernetes manifest (YAML).

In order to do this, you must have a copy of your Kubernetes manifest (YAML) available locally. Where you have already installed Datree.

You can run the following command to start testing your Kubernetes manifest (YAML)

datree test <your_kubernetes_manifest_YAML_NAME>

Here is my (YAML) for my, Spring Boot Application, trying to test by deploying it on Kubernetes Cluster.

(Click here to clone my Github Repo for Spring Boot Application)

k8s-spring-boot-deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot
spec:
  replicas: 3
  selector:
    matchLabels:
      app: springboot
  template:
    metadata:
      labels:
        app: springboot
    spec:
      containers:
        - name: springboot
          image: gayatrisingh/hello-world:1.1
          ports:
            - containerPort: 8080
          env:
            - name: PORT
              value: "8080"
---
apiVersion: v1
kind: Service
metadata:
  name: springboot
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: springboot 

Here is a command to test my Kubernetes manifest 

datree test k8s-spring-boot-deployment.yml

When you run the above command, you should see the following validation error messages –

Datree

3. How to understand the validation errors thrown by Datree

What I have discovered is that my Kubernetes manifest (YAML) has a lot of problems.

 It will work fine inside my Kubernetes cluster, it is still far from ready for the production environment.

Lets start with the errors 

3.1 Ensure each container has a configured memory request

This error tells me that I have neglected to add request.memory size inside the Kubernetes deployment manifest.

This error can easily be fixed by adding the following request.memory attribute 

resources:
  requests:
    memory: "128Mi"
    cpu: "512m"

3.2 Ensure each container has a configured CPU request

Similar to the previous error 3.1, we need to add the limit.cpu attribute.

Here is the missing limit.cpu attribute along with request.memory 

resources:
  requests:
    memory: "128Mi"
    cpu: "512m"

3.3 Ensure each container has a configured memory limit

After fixing the memory and cpu requests, lets try to fix the memory limit.

Add the following memory snippet inside your deployment manifest of Kubernetes under the resource limits 

limits:
  memory: "128Mi"

3.4 Ensure each container has a configured CPU limit

You also need to update the memory for the cpu,

Which can be done by adding the following attributes along with the previous one-

limits:
  memory: "128Mi"
  cpu: "512m"

3.5 Ensure each container has a configured liveness probe

Next on the list are the liveness and readiness probes. To keep the things simple and easy to understand, we will look at each error individually.

To fix the liveness probe, you must add the following attribute inside your Kubernetes manifest (YAML) 

livenessProbe:
  httpGet:
     path: /hello
     port: 8080
  initialDelaySeconds: 15
  periodSeconds: 10


3.6 Ensure each container has a configured readiness probe

After fixing the liveness probe, lets fix the readiness probe by adding the following attribute to the Kubernetes manifest (YAML) 

readinessProbe:
  httpGet:
    path: /hello
    port: 8080
  initialDelaySeconds: 15
  periodSeconds: 10


3.7 Ensure Deployment has more than one replica configured

Lastly, we need to fix the replica count.This can be done easily by updating the replicas attribute.

It is not recommended to have a replica count of 1. Update the replica count to a number greater than 1 

spec:
  replicas: 2

Here is the final k8s-spring-boot-deployment.yml after all 7 fixes have been made:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot
spec:
  replicas: 2
  selector:
    matchLabels:
      app: springboot
  template:
    metadata:
      labels:
        app: springboot
    spec:
      containers:
        - name: springboot
          image: gayatrisingh/hello-world:1.1

          resources:
            requests:
              memory: "128Mi"
              cpu: "512m"
            limits:
              memory: "128Mi"
              cpu: "512m"

          ports:
            - containerPort: 8080

          readinessProbe:
            httpGet:
              path: /hello
              port: 8080
            initialDelaySeconds: 15
            periodSeconds: 10

          livenessProbe:
            httpGet:
              path: /hello
              port: 8080
            initialDelaySeconds: 15
            periodSeconds: 10

          env:
            - name: PORT
              value: "8080"
---
apiVersion: v1
kind: Service
metadata:
  name: springboot
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: springboot 

I recommend updating your Kubernetes manifest and rerunning the Datree test command.

datree test k8s-spring-boot-deployment.yml

Here is the screenshot of the results, where you can see that all the validation errors are now gone.

4. View and edit Datree Policy via browser

In addition to providing CLI to troubleshoot the errors associated with your manifest. 

Datree also allows you to view the policies on a browser. 

This is one of the coolest features offered by Datree for developers and other team members.

How to access the datree policies in a browser?

This too is pretty simple. 

Run the test command datree test k8s-spring-boot-deployment.yml and then look for the following message box into your terminal –

Copy the URL from the terminal and paste it in your browser. Authenticate yourself using your GitHub acc-ount and then you will see the following dashboard –

4.1 Edit Datree Policies

 You will be working with Datree on CLI. But having a web portal where policies are accessible via browser makes the policy handling really easy.

4.1.1. Toggle ON/OFF policy

You can very easily toggle the policy which you want to enforce and revoke for your Kubernetes cluster.

4.1.2. Edit Policy Message

You can also edit policy messages, so you add text which can help the developer troubleshoot the policy validation errors.

Finally, save your custom message –

4.2 Datree policies invocation history

Along with edit features, you can also see the previous invocation history and the results. Simply click on the History option on the left navigation –

This is How to Validate Kubernetes Configurations with Datree

We are all done now!!!!

Conclusion:

Thank you for sticking to the end. In this blog we will see How to Validate Kubernetes Configurations with Datree. If you like this blog, please do show your appreciation by giving thumbs ups and share this blog.

Written by 

I am an enthusiastic , hard-working and determine girl with strong attention to detail and eager to learn about new technologies.

Leave a Reply