https://drive.google.com/file/d/1lnSO1RKmS6n6JtSRh9jsYmmg2EbxfWrH/view?usp=sharing

πŸ” Part 1: PriorityClass Definition

# mission-critical-priority-class.yaml
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
meta
  name: mission-critical-apps
value: 1000000                 # ← Higher = more important
preemptionPolicy: Never        # ← Key setting!
globalDefault: false
description: "For mission-critical apps"

πŸ”‘ Key Fields:

πŸ’‘ Default Critical Classes (built into Kubernetes):


πŸ” Part 2: Pod Using PriorityClass

# mission-critical-pod.yaml
apiVersion: v1
kind: Pod
meta
  name: topgun
  labels:
    app: topgun
    env: prod
spec:
  containers:
  - name: boxone
    image: nginx
    imagePullPolicy: IfNotPresent
  priorityClassName: mission-critical-apps  # ← Links to PriorityClass

βœ… This Pod will:


πŸ“Œ How Priority & Preemption Work

Scenario Behavior
Resources available High-priority Pod schedules immediately
No resources, preemptionPolicy: PreemptLowerPriority Scheduler evicts lowest-priority Pods to free space
No resources, preemptionPolicy: Never Pod waits in queue β€” no eviction
All Pods have same priority First-come, first-served

⚠️ Preemption is a last resort β€” scheduler tries to find space without eviction first.


πŸ§ͺ k3s Lab: Priority & Preemption in Action

βœ… Assumption: Your k3s cluster has limited CPU/memory (or we’ll simulate scarcity).

πŸ”§ Step 1: Create PriorityClass

# Save as mission-critical-priority-class.yaml
cat <<EOF | kubectl apply -f -
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
meta
  name: mission-critical-apps
value: 1000000
preemptionPolicy: PreemptLowerPriority  # ← Changed to test preemption!
globalDefault: false
description: "For mission-critical apps"
EOF

πŸ’‘ We set preemptionPolicy: PreemptLowerPriority to see eviction in action.

πŸ”§ Step 2: Deploy Low-Priority "Filler" Pods