How To Setup Jenkins On Kubernetes Cluster

How To Setup Jenkins On Kubernetes Cluster – Beginners Guide


How To Setup Jenkins On Kubernetes Cluster


Setup Jenkins On Kubernetes Cluster


1)Create a Namespace

2)Create a service account with Kubernetes admin permissions.

3)Create local persistent volume for persistent Jenkins data on Pod restarts.

4)Create a deployment YAML and deploy it.

5)Create a service YAML and deploy it.

Jenkins Kubernetes Manifest Files

All Jenkins Kubernetes manifest files used in this blog are hosted on Github. If you have trouble copying the manifest from the blog, please clone the repository.

git clone

Use the Github files for reference and follow the steps in the next sections

Kubernetes Jenkins Deployment

Here’s a high-level view of what we’re going to do.

How To Setup Jenkins On Kubernetes Cluster

Read Also- Build-Test-Deploy with Kubernetes (CI/CD)

Let’s get started with deploying Jenkins on Kubernetes.

Step 1: Create a Namespace for Jenkins. It is good to categorize all the devops tools as a separate namespace from other applications.

kubectl create namespace devops-tools

Step 2: Create a serviceAccount.yaml file and copy the following administrator service account manifest.

--- apiVersion: kind:

ClusterRole metadata: name:

jenkins-admin rules: -

apiGroups: [""] resources: [""]

verbs: [""] ---

apiVersion: v1 kind: ServiceAccount

metadata: name: jenkins-admin

namespace: devops-tools ---

apiVersion: kind:


metadata: name: jenkins-admin

roleRef: apiGroup: kind:

ClusterRole name:

jenkins-admin subjects: -

kind: ServiceAccount name:

jenkins-admin namespace:


The serviceAccount.yaml creates a jenkins-admin clusterRole, jenkins-admin ServiceAccount and binds the clusterRole to the service account.

The jenkins-admin cluster role has all permissions to manage cluster components. You can also restrict access by specifying individual resource actions.

Now create the service account using kubectl.

kubectl apply -f serviceAccount.yaml

Step 3: Create volume.yaml and copy the following persistent volume manifest.

kind: StorageClass



name: local-storage


volumeBindingMode: WaitForFirstConsumer


apiVersion: v1

kind: PersistentVolume

metadata: name: jenkins-pv-volume


type: local spec:


: local-storage claimRef:

name: jenkins-pv-claim namespace:

devops-tools capacity: storage:

10Gi accessModes: - ReadWriteOnce local:

path: /mnt nodeAffinity: required:


: - matchExpressions:

- key: operator:

In values: - worker-node01

--- apiVersion: v1 kind: PersistentVolumeClaim

metadata: name:

jenkins-pv-claim namespace:

devops-tools spec: storageClassName:

local-storage accessModes: -

ReadWriteOnce resources:

requests: storage: 3


Accessing Jenkins Using Kubernetes Service


apiVersion: v1
kind: Service
  name: jenkins-service
  namespace: devops-tools
  annotations: 'true'   /   '8080'
    app: jenkins-server
  type: NodePort 
    - port: 8080
      targetPort: 8080
      nodePort: 32000

Create the Jenkins service using kubectl.

kubectl apply -f service.yaml

Now if you browse to one of the node IPs on port 32000, you will be able to access the Jenkins dashboard.


When you first access the dashboard, Jenkins will ask for an initial admin password.

You can get this from the pod log, from the Kubernetes dashboard or from the CLI. You can get pod details using the following CLI commands.

kubectl get pods --namespace=devops-tools

And with the pod name, you can get the logs as shown below. replace the pod name with your pod name.

kubectl logs jenkins-deployment-2539456353-j00w5 --namespace=jenkins

The password can be found at the end of the log as shown below.

 Alternatively, you can run the exec command to get the password directly from the location as shown below.

kubectl exec -it jenkins-559d8cd85c-cfcgk cat  /var/jenkins_home/secrets/initialAdminPassword -n devops-tools

Once you enter the password you can proceed to install the sugested plugin and create an admin user. All these steps are self-explanatory from the jenkins dashboard.

Hope you like this blog….
Mahesh Wabale
Latest posts by Mahesh Wabale (see all)

Leave a Comment