Install kpack

Paul Kelly

These are some of the different ways you might create a container image for your application:

  • Use a Dockerfile and docker build
  • Use the spring-boot:build-image plug-in to create a container image
  • Use kpack to build the image

Defining your own image using Dockerfiles is a long-established way of creating container images, but it has several drawbacks. For example, you are responsible for choosing a secure base image, deciding how your application should be installed on it, and updating the base image whenever security patches are issued.

The other two methods both use Cloud Native Buildpacks. Buildpacks do all the heavy lifting of building a secure container with a secure base image, and deploying your application. They follow best practices for building containers; for example the application does not run as root. For Spring Boot applications, the fat jar is unbundled during image creation, which provides better startup and run-time performance.

Once you have set up kpack in your cluster, it monitors your source repository for changes, rebuilds the container image, and pushes it to your repository as needed. Buildpacks are updated regularly so that base images have the latest patches. In this section, you install kpack on your Kubernetes cluster by getting a configuration file from GitHub and applying it with the kubectl command. Go to https://github.com/pivotal/kpack/releases to see the latest kpack release and apply it. For kpack v0.5.2 (the version used writing this tutorial), the command line is:

kubectl apply -f https://github.com/pivotal/kpack/releases/download/v0.5.2/release-0.5.2.yaml

This creates a kpack namespace on your cluster and starts pods for the kpack controller and webhook. It might take a couple of minutes to start up, but you can check the progress by running:

kubectl get pods --namespace kpack --watch

Once the status of both pods changes to “running,” kpack is ready. To interact with kpack, you also need to install the kpack CLI on your local machine. You can either download the binary from https://github.com/vmware-tanzu/kpack-cli/releases, or, if you are running on MacOS and have brew installed:

brew tap vmware-tanzu/kpack-cli
brew install kp

Once kp is installed, it uses the same credentials and context as your kubectl command to communicate with kpack on your cluster.