On Premise

Setup Jenkins X on vanilla Kubernetes

NOTE

Ensure you are logged into GitHub else you will get a 404 error when clicking the links below


On Premise Kubernetes

If you are using kubernetes we highly recommend you use one of the managed cloud providers as this comes with lots of additional features like:

  • container registries and bucket storage
  • IAM and workload identity (e.g. so kubernetes Service Accounts can be assigned roles to be able to read/write to certain buckets or container registries)

However sometimes you need to run kubernetes on your premise. Longer term we hope the cloud providers can run their managed kubernetes and associated infrastructure on your premise too so you get to reuse the same storage + IAM anywhere. But until then, this guide is intended to get you started installing Jenkins X on a vanilla kubernetes cluster on premise.

Here are some detailed instructions on getting JX running in a Lab Environment.

Prerequisites

The following are the prerequisites of your on-premise kubernetes cluster:

Kubernetes cluster

We obviously need a working kubernetes cluster. There are many approaches to setting up on premise clusters obviously the easiest approach is to use the cloud.

If you are going the bare metal route you could try these instructions

kubectl access

You need to be able to connect to your kubernetes cluster via kubectl so that you can run commands like:

kubectl get ns
kubectl get node

To view the namespaces and nodes respectively.

Ingress

To use Jenkins X we need ingress to work. This means being able to create a kubernetes Ingress resource with a domain name which can be resolved outside of kubernetes to network into kubernetes services.

Jenkins X installs nginx which has a LoadBalancer kubernetes Service to implement ingress. But the underlying kubernetes platform needs to implement the load balancing network and infrastructure. This comes out of the box on all public clouds.

With an on-premise kubernetes cluster you need to install something like MetalLB

If you are on bare metal you could try these instructions

Storage

We need your kubernetes cluster to have a default storage class so that PersistentVolumeClaim resources in helm charts get resolved to PersistentVolume resources so that persistent disks can be used.

You may find these instructions useful

Getting Started

This is our current recommended quickstart for on premise kubernetes:

cluster:
...
ingress:
  domain: mydomain.com
...
  • verify your cluster does not already have an nginx installation. If it does then please remove the nginx line from your helmfile.yaml file and remove the helmfiles/nginx files. If you are using a custom nginx installation then you will need to figure out your domain by hand and won’t be able to let Jenkins X detect the load balancer IP from its included nginx installation.

  • git add, commit and push your changes:

git add *
git commit -a -m "fix: added domain"
git push origin main
  • ensure you are connected to your cluster so you can run the following kubectl commands
kubectl get ns
kubectl get node      
jx ns jx

Enable WebHooks

How to enable webhooks if you are on premise

Vault

How to use an on premise kubernetes cluster with vault