We don't want to hard-code a namespace for the `ssh-known-hosts` ConfigMap because that makes it less useful for other projects besides Jenkins. Instead, we omit the namespace specification and allow consumers to specify their own. The _jenkins_ project doesn't have a default namespace, since it specifies resources in the `jenkins` and `jenkins-jobs` namespaces, we need to create a sub-project to set the namespace for the `ssh-known-hosts` ConfigMap.
Jenkins in Kubernetes
Kubernetes Setup
Configure Jenkins resources:
ln imagepull-gitea jenkins/.dockerconfigjson
kubectl apply -k jenkins
Jenkins Setup
Install Kubernetes plugin.
Set TCP port for inbound agents setting (Manage Jenkins → Configure Global
Security) to Fixed and enter 40414.
Configure Kubernetes (Manage Jenkins → Manage Nodes and Clouds → Configure Clouds:
- Add a new cloud → Kubernetes
- Enter a name
- Kubernetes Cloud details...
- Kubernetes URL: (leave blank; will use Kubernetes service discovery)
- Kubernetes Namespace:
jenkins-jobs - Credentials:
- none -(will use Service Account token) - Jenkins tunnel:
jenkins.jenkins.svc.cluster.local:(trailing colon!)
iSCSI Persistent Volume
Because of the large size of the Jenkins volume, it does not work well managed by Longhorn. Instead, we use a pre-provisioned iSCSI volume on the Synology NAS. This improves performance and avoids keeping multiple replicas of the Jenkins data, while still benefiting from snapshots, etc.