Jobs Cronjobs and DaemonSet

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

ScheduleMeaning
* * * * *Every minute
*/5 * * * *Every 5 minutes
0 * * * *Every hour
0 0 * * *Every day at midnight
0 9 * * *Every day at 9 AM
0 9 * * 1Every 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.