In this blogpost I want to share a few pointers in regards to installing Tanzu Application Platform on OSS Kubernetes. Tanzu Application Platform provides an Internal Developers Platform based on Backstage and includes Supply Chain Choreography capabilities based on the Cartographer open source project.
In this blogpost I’m talking about deploying TAP 1.7.1 to Kubernetes 1.28.
So, if you want to deploy TAP on OSS Kubernetes, you need:
- Kubernetes (of course) – version 1.26/27/28 are supported with TAP 1.7
- A CNI installed and configured and capable of providing L4 load balancing addresses, in this example I’m using Cilium.
- A default storageclass configured (at least for the “full” profile), in this example I’m using NFS Subdir External Provisioner.
- I’m running three worker nodes with 4 vCPUs and 16 GB RAM per node, you would also need 100GB+ free disk storage per node.
There are some other (general) requirements, they are published here.
Follow your regular installation method to get Kubernetes up and running. I am using kubeadm for this and I’m running a 4 node cluster in my test environment (1 control node + 3 workers nodes).
Install and configure Cilium CNI
For the installation and configuration of Cilium check my previous post on this topic, or check out this great write up by Andreas Marqvardsen. TAP must be able to create a L4 load balancing address, so you should have this capability available.
Configure a default storage class using NFS Subdir External Provisioner
TAP requires a default storage class to be available, on top of that you would also need some persistent storage for an Postgres database that is used for TAP Developer Portal aka TAP GUI (the Backstage part of TAP). I’m using a Linux based NFS server for this, that is configured to provide an NFS share.
I’m using the NFS subdir external provisioner for dynamic provisioning of PVs and PVCs and providing a default storage class.
NFS subdir external provisioner is an automatic provisioner that use your existing and already configured NFS server to support dynamic provisioning of Kubernetes Persistent Volumes via Persistent Volume Claims
Installation is done through a Helm chart:
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server=x.x.x.x \ --set nfs.path=/exported/path
After the installation of this provisioner, a new storage class is added.
k get storageclasses.storage.k8s.io
Now make this new storageclass the default storage class:
kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
And check if it’s default:
k get storageclasses.storage.k8s.io
Install Tanzu Application Platform
There are various ways to install TAP: manual/scripted installation, GitOps installation or installing TAP through Tanzu Mission Control. For OSS Kubernetes all three options will work, so choose whatever you prefer.
I’ve updated my scripted installation of TAP, that is now configured the use the namespace provisioner that comes with TAP. The scripts are tested on TAP 1.7.x.
Good luck and I hope this was helpful.