Kubernetes Pod Agents
Learn how to deeply configure, launch, and manage dynamic, distributed pipeline worker environments using Kubernetes Pods as temporary Jenkins execution agents.
What are Kubernetes Pod Agents?
In legacy CI/CD topologies, build nodes are static, long-lived Virtual Machines. These persistent agents present ongoing maintenance challenges—such as configuration drift, disk capacity exhaustion, and security compliance vulnerabilities. Kubernetes Pod Agents modernize this layer by implementing a highly elastic, containerized execution engine.
Whenever a pipeline execution is triggered, the Jenkins controller communicates directly with the target Kubernetes API server to spawn a specialized, isolated worker pod in real time. This pod contains your specified tool runtimes, executes the build jobs inside isolated boundaries, and is completely terminated by the orchestrator the moment the stage processing wraps up.
Key Concepts
JNLP Inbound Wrapper
The mandatory core container within the agent pod that establishes a two-way network socket stream back to the master Jenkins controller node.
Dynamic Pod Templates
Declaring fine-grained container runtime variables directly within your pipeline file, avoiding the need for static UI-based cloud configurations.
Shared Workspace Volumes
An automatic internal volume mapping pattern that transparently passes compiled source elements between separate containers running inside the same agent pod.
Resource Requests & Limits
Setting precise CPU and Memory boundaries for execution slots to prevent intensive application builds from destabilizing adjacent computing clusters.
Practical Jenkins Example
The following declarative pipeline script provisions a custom Kubernetes pod dynamically, injecting a Docker-in-Docker container layer to run secure build operations without contaminating the host node environment:
pipeline {
agent {
kubernetes {
// Evaluates a native Kubernetes YAML pod layout configuration dynamically
yaml '''
apiVersion: v1
kind: Pod
metadata:
labels:
component: jenkins-agent
spec:
containers:
- name: golang
image: golang:1.21-alpine
command: ['sleep']
args: ['99d']
- name: docker-cli
image: docker:24.0-cli
command: ['sleep']
args: ['99d']
'''
}
}
stages {
stage('Compile Application Source') {
steps {
// Routes commands explicitly into the isolated Go container layer
container('golang') {
echo 'Compiling package source modules...'
sh 'go version'
sh 'echo "Building high-performance binaries..."'
}
}
}
stage('Verify Docker Layer') {
steps {
// Swaps execution paths over to the adjacent CLI tool container context
container('docker-cli') {
echo 'Checking docker client engine status...'
sh 'docker --version'
}
}
}
}
}
Practice Exercise
- Verify that the target Jenkins controller has a valid Kubernetes Cloud Provider target configured via Manage Jenkins → Clouds.
- Create a new Pipeline job definition workspace in your directory labeled
k8s-pod-agent-pipeline. - Paste the complete multi-container configuration template shared in the script block example above.
- Trigger a new manual build sequence run and monitor the Console Output logs to trace the step-by-step process of container scheduling, volume mapping, and automatic pod removal.
Summary
You have completed the Kubernetes Pod Agents lesson. Automating isolated execution runtimes inside transient container sets provides a secure environment to run progressive continuous delivery targets, such as a Kubernetes Deployment.