https://drive.google.com/file/d/1rt8QiHNs37SyGVv0Jddhjb-QY9P6gH6u/view?usp=sharing
apiVersion: v1
kind: Pod
metadata:
name: nnappone
namespace: learning
labels:
app: nnappone
spec:
nodeName: nodeone.example.com # β HARD assignment to this node
containers:
- name: crackone-app
image: nginx
resources:
requests:
memory: "300Mi"
limits:
memory: "500Mi"
π Key Field: spec.nodeName: nodeone.example.com
β Bypasses the Kubernetes scheduler entirely!
β Pod is forced onto this node β no checks for resources, taints, or capacity.
nodeName Works| Behavior | Explanation |
|---|---|
| Scheduler Bypassed | Normally, scheduler picks best node. Here, you decide. |
| No Validation | Kubernetes wonβt check if node exists, has resources, or is ready. |
| If node is down/unavailable | Pod stays in Pending forever (no retry on other nodes). |
| Use Case | Rare! Only for debugging, single-node clusters, or very special workloads. |
β οΈ Why Avoid in Production?
- Breaks high availability
- Prevents auto-scaling and rescheduling
- Fragile (node name changes = Pod breaks)
β Better Alternatives:
nodeSelector(simple label-based)nodeAffinity(flexible, expressive)podAntiAffinity(for spreading workloads)
π‘ Note: You likely donβt have a node named nodeone.example.com β so this Pod will fail to schedule. Thatβs expected! Weβll fix it.
kubectl get nodes
# Example output:
# NAME STATUS ROLES AGE VERSION
# minikube Ready control-plane 10m v1.28.0
# minikube-m02 Ready <none> 10m v1.28.0
π Pick an actual node name (e.g., minikube).
# pod-for-specific-node.yml (updated)
spec:
nodeName: minikube # β Replace with YOUR node name
containers:
- name: crackone-app
image: nginx
resources:
requests:
memory: "300Mi"
limits:
memory: "500Mi"
# 1. Create namespace
kubectl create namespace learning
# 2. Apply Pod
kubectl apply -f pod-for-specific-node.yml
# 3. Check status
kubectl get pods -n learning -o wide
# β
Expected:
# NAME READY STATUS NODE ...
# nnappone 1/1 Running minikube ...
# 4. Verify itβs on the right node
kubectl describe pod nnappone -n learning | grep "Node:"
# 5. Clean up
kubectl delete pod nnappone -n learning
kubectl delete namespace learning