How to automate Kubernetes workflows

How to automate Kubernetes workflows

Kubernetes is a container-based platform for deploying, scaling and running applications. Buddy lets you automate your Kubernetes delivery workflows with a series of dedicated K8s actions.

Pipeline examplePipeline example

Each time you make changes to your application code or Kubernetes configuration, you have two options to update your cluster: kubectl apply or kubectl set image.

In such case your workflow most often looks like this:

  1. Edit code or configuration .YML

  2. Push it to your Git repository

  3. Build a new Docker image

  4. Push the Docker image

  5. Log in to your K8s cluster

  6. Run kubectl apply or kubectl set image

With Buddy, you can avoid most of these steps by doing a simple push to Git! :)

How to automate Kubernetes releases on every push

Buddy is a Continuous Delivery tool that you can use to automate your whole K8s release workflow, including:

  • managing configuration changes of a K8s Deployment

  • deployments of code changes

  • managing Dockerfile updates

  • building Docker images and pushing them to the Docker registry

  • applying new images on your K8s cluster

    If you often use kubectl apply or kubectl set image, this is for you!

Configuring delivery pipeline

  • Add a new pipeline, set the trigger mode to On every push, and select the branch that will trigger the pipeline

Adding a new pipelineAdding a new pipeline

  • Add the Build Docker image action. Switch the Tab to Options and select Docker Hub from the dropdown under Docker registry. Choose the Dockerfile path, Docker repository, and the name of the image that you want to push.

Action detailsAction details

  • Depending on your scenario, add Set K8s Image or Apply K8s Deployment action

    You can use the number of the revision for the tag with environment variables.

Scenario 1: If you use kubectl set image go with Set K8s Image action:

Select which container should be replaced and which image you want to use. Make sure to enter the name and tag of the image from step #2 above.

Buddy will turn off the running nodes and switch them back on with the new image version.

If you use a tag which is constant for every execution (eg. branchName) but different from 'latest', make sure to set the Pull Policy to 'Always'. Find out more about updating images.

Action detailsAction details

Scenario 2: If you use kubectl apply go with Apply K8s Deployment action:

With every change in the YAML config or in your app code, Buddy will apply the deployment and Kubernetes will start transforming the containers to the desired state.

The action will wait for the status of deployment, checking its rollout status. If any errors occur, the pipeline will stop as ‘failed’.

Setting up K8s actionSetting up K8s action

How to automate running Kubernetes pods or jobs

If you often run tasks in a container, such as:

  • DB migration during the deployment of new version

  • backups

  • batch jobs, eg. creating a directory structure for a new version of your app

you can either use pods or jobs. The first type launches a single pod with the task; the second one launches a series of pods until a specified number of them ends with a successful status.

Pipeline configuration for running Kubernetes pods or jobs

Let’s say you have an application on a K8s cluster and the repository contains as follows:

  • source code of your application

  • a Dockerfile with instructions on creating an image of your app

  • DB migration scripts

  • a Dockerfile with instructions on creating an image that will run the migration during the deployment (db migration runner)

In this case, you can configure a pipeline that will:

A. Build application and migrate images (first action)

B. Push them to the Docker Hub (second action)

Delivery pipelineDelivery pipeline

C. Trigger the DB migration using the previously built image (third action). You can define the image, commands and deployment using a YAML file:

Deploy using YAMLDeploy using YAML

Once you make a push, the pipeline will automatically build and push the images to the repository and run your migration scripts. How cool is that?

The job action will wait until the command has finished executing. If the exit status is different than 0, the action will be labeled as ‘failed’

D. The last action is using either Apply K8s Deployment or Set K8s Image to update the image in your K8s application. Once you add the action, the whole pipeline will look like this:

Finished pipelineFinished pipeline

When everything is in place, make a push once again and watch Buddy automatically perform the whole workflow.

If you’re not sure if you can apply our solution to your workflow, please reach out on the live-chat or drop a line to support@buddy.works and we’ll do it for you.