Pinning Your kURL Installer for Greater Consistency

Fernando Cremer
 | 
Dec 6, 2022

If you are leveraging Replicated to deliver your Kubernetes (K8s) application to customers that don’t have Kubernetes, then you are probably familiar with our kURL.sh open source project. In a nutshell, this project allows you to define a Kubernetes installer in manifest format. What this manifest allows you to do is specify the version of Kubernetes and add-ons that you want to get deployed with your application. 

kURL is able to use that manifest and leverage `kubeadm` to run an installer script that does the actual deployment of the cluster. This script is available for online installs and is also included in the airgap bundle for disconnected locations.

Your kURL installer specification allows you to specify what components (add-ons) you want in your embedded K8s cluster. Further, those component versions can be pinned, which helps get everyone running the same version of those components. This in turn makes it easier on your team to support your application running in a "known good" environment.

But did you know that you can achieve even greater reproducibility with your deployments? The script that performs the installation gets updated regularly, so simply pinning the K8s version and add-ons does not ensure that you can recreate a customer’s installation with 100% accuracy, unless an airgap bundle was the installation source.

What you can do is include the version of the script to use in your kURL spec. This will ensure that the installer will have the same behavior regardless of when it is run. Per the documentation, a release can be pinned within the installer YAML, as well:

[.pre]apiVersion: "cluster.kurl.sh/v1beta1"kind: "Installer"metadata:name: ""spec:kurl:installerVersion: "v2021.06.15-0"[.pre]

If you have a mature process for keeping your Replicated release dependencies up to date, you should consider pinning the installer script to help your releases be more consistent. If you pin the version and do not have a process to keep it up to date you can miss out on important bug fixes and feature improvements. If you are not sure if you need this functionality, just leave the installer script unpinned until you see the need for it in your process.