- Split `scenarios/scenarios.json` into individual JSON files under `scenarios/data/` named `<scenario-id>.json` - Split `scenarios/bundles.json` into individual JSON files under `scenarios/bundles/` named `<bundle-id>.json` - Updated `backend/server.js` to dynamically load scenario and bundle files from their respective directories - Updated documentation in `scenarios/SCHEMA.md` and `README.md` to reflect the new repository layout and contributor workflow Signed-off-by: Abhinav Sinha <[email protected]>
53 lines
2.2 KiB
JSON
53 lines
2.2 KiB
JSON
{
|
|
"id": "node-taint-toleration",
|
|
"title": "Taints and Tolerations",
|
|
"category": "Cluster Administration",
|
|
"difficulty": "Medium",
|
|
"type": "task",
|
|
"weight": 7,
|
|
"description": "## Taints and Tolerations\n\nTaints allow a node to **repel** pods. A toleration on a pod allows it to be scheduled onto a tainted node.\n\nThe node `k8s-lab` has been tainted with `env=gpu:NoSchedule`.\n\n**Your task:**\n\nCreate a Pod named `gpu-pod` using `nginx:alpine` that tolerates the taint `env=gpu:NoSchedule` so it can be scheduled on this node.\n\n```bash\nkubectl describe node k8s-lab | grep -A5 Taints\n```",
|
|
"hints": [
|
|
{
|
|
"title": "Toleration structure",
|
|
"body": "Add a `tolerations` block under `spec`. Match `key`, `operator`, `value`, and `effect` to the node taint.",
|
|
"command": "cat <<EOF | kubectl apply -f -\napiVersion: v1\nkind: Pod\nmetadata:\n name: gpu-pod\nspec:\n tolerations:\n - key: \"env\"\n operator: \"Equal\"\n value: \"gpu\"\n effect: \"NoSchedule\"\n containers:\n - name: app\n image: nginx:alpine\nEOF"
|
|
}
|
|
],
|
|
"setup_commands": [
|
|
{
|
|
"command": "kubectl taint nodes k8s-lab env=gpu:NoSchedule --overwrite=true 2>/dev/null || true"
|
|
}
|
|
],
|
|
"validation": {
|
|
"commands": [
|
|
{
|
|
"description": "Node has taint env=gpu:NoSchedule",
|
|
"command": "kubectl get node k8s-lab -o jsonpath='{.spec.taints[*].key}'",
|
|
"expected_output": "env",
|
|
"match": "contains"
|
|
},
|
|
{
|
|
"description": "Pod 'gpu-pod' has toleration for key 'env'",
|
|
"command": "kubectl get pod gpu-pod -o jsonpath='{.spec.tolerations[*].key}'",
|
|
"expected_output": "env",
|
|
"match": "contains"
|
|
},
|
|
{
|
|
"description": "Pod 'gpu-pod' toleration effect is NoSchedule",
|
|
"command": "kubectl get pod gpu-pod -o jsonpath='{.spec.tolerations[*].effect}'",
|
|
"expected_output": "NoSchedule",
|
|
"match": "contains"
|
|
}
|
|
]
|
|
},
|
|
"default_namespace": "default",
|
|
"teardown_commands": [
|
|
{
|
|
"command": "kubectl taint nodes k8s-lab env=gpu:NoSchedule- 2>/dev/null || true"
|
|
},
|
|
{
|
|
"command": "kubectl delete pod gpu-pod --ignore-not-found --grace-period=0 --force"
|
|
}
|
|
]
|
|
}
|