1. Kubernetes Job YAML Example
A Kubernetes Job runs a task until it completes successfully.
job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: demo-job
spec:
completions: 3
parallelism: 2
backoffLimit: 4
template:
spec:
restartPolicy: Never
containers:
- name: demo
image: busybox
command: ["sh", "-c", "echo Hello Kubernetes Job; sleep 10"]
Explanation:
completions: 3— Run 3 successful Pods in total.parallelism: 2— Run up to 2 Pods simultaneously.backoffLimit: 4— Limit retries after failures.restartPolicy: Never— Do not restart failed containers inside the Pod.
2. Kubernetes Job Commands
# Create Job
kubectl apply -f job.yaml
# List Jobs
kubectl get jobs
# List Pods
kubectl get pods
# Job details
kubectl describe job demo-job
# View logs
kubectl logs job/demo-job
# Watch Job execution
kubectl get jobs -w
# Delete Job
kubectl delete job demo-job
3. Create Job Without YAML
kubectl create job hello-job --image=busybox -- echo "Hello Kubernetes"
kubectl get jobs
kubectl logs job/hello-job
kubectl delete job hello-job
4. Kubernetes CronJob Example
A CronJob runs Jobs automatically on a schedule.
cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: demo-cronjob
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: demo
image: busybox
command: ["sh", "-c", "date; echo Hello CronJob"]
Commands:
kubectl apply -f cronjob.yaml
kubectl get cronjobs
kubectl get jobs
kubectl get pods
kubectl delete cronjob demo-cronjob
Difference: Job runs a finite task to completion. CronJob creates Jobs repeatedly according to a schedule (every minute in this example).
Kubernetes CronJob – Quick YAML & Commands
A CronJob automatically creates Kubernetes Jobs on a defined schedule.
1. Create CronJob YAML
cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: demo-cronjob
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: demo
image: busybox
command:
- /bin/sh
- -c
- "date; echo Hello Kubernetes CronJob"
This runs every 1 minute.
2. CronJob Commands
# Create CronJob
kubectl apply -f cronjob.yaml
# List CronJobs
kubectl get cronjobs
# List Jobs created by CronJob
kubectl get jobs
# List Pods
kubectl get pods
# Describe CronJob
kubectl describe cronjob demo-cronjob
# View logs
kubectl logs job/<job-name>
# Manually trigger CronJob
kubectl create job manual-job --from=cronjob/demo-cronjob
# Suspend CronJob
kubectl patch cronjob demo-cronjob -p '{"spec":{"suspend":true}}'
# Resume CronJob
kubectl patch cronjob demo-cronjob -p '{"spec":{"suspend":false}}'
# Delete CronJob
kubectl delete cronjob demo-cronjob
3. Create CronJob Without YAML
kubectl create cronjob hello-cron \
--image=busybox \
--schedule="*/1 * * * *" \
-- /bin/sh -c 'date; echo Hello CronJob'
4. Cron Schedule Examples
| Schedule | Meaning |
|---|---|
* * * * * | Every minute |
*/5 * * * * | Every 5 minutes |
0 * * * * | Every hour |
0 0 * * * | Every day at midnight |
0 9 * * * | Every day at 9 AM |
0 9 * * 1 | Every Monday at 9 AM |
0 0 1 * * | First day of every month |
5. CronJob Execution Flow
CronJob
Schedule: */1 * * * *
Job
Created every minute
Pod
Executes command and completes
Remember: CronJob → Job → Pod → Container → Execution → Completed.
Kubernetes DaemonSet – Quick YAML & Commands
A DaemonSet ensures one Pod runs on every eligible Kubernetes node. Commonly used for monitoring, logging, and networking agents.
1. DaemonSet YAML
daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-daemonset
spec:
selector:
matchLabels:
app: nginx-daemon
template:
metadata:
labels:
app: nginx-daemon
spec:
containers:
- name: nginx
image: scmgalaxy/nginx-devopsschoolv1
ports:
- containerPort: 80
2. DaemonSet Commands
# Create DaemonSet
kubectl apply -f daemonset.yaml
# List DaemonSets
kubectl get daemonsets
kubectl get ds
# Check Pods across nodes
kubectl get pods -o wide -l app=nginx-daemon
# Describe DaemonSet
kubectl describe ds nginx-daemonset
# Update image
kubectl set image ds/nginx-daemonset nginx=scmgalaxy/nginx-devopsschoolv2
# Check rollout
kubectl rollout status ds/nginx-daemonset
# Rollback
kubectl rollout undo ds/nginx-daemonset
# Delete DaemonSet
kubectl delete ds nginx-daemonset
3. DaemonSet Architecture
DaemonSet Controller
Worker Node 1
Nginx Pod
Worker Node 2
Nginx Pod
Worker Node 3
Nginx Pod
Key difference:
- Deployment: Runs the specified number of replicas across nodes.
- DaemonSet: Runs one Pod per eligible node automatically.
Note: Control-plane nodes with NoSchedule taints won’t receive this DaemonSet Pod unless appropriate tolerations are configured.