{ "id": "emptydir-pod", "title": "Shared emptyDir Volume Between Containers", "category": "Storage", "difficulty": "Easy", "type": "task", "weight": 5, "description": "## Shared emptyDir Volume\n\nAn `emptyDir` volume is created when a Pod is assigned to a node and exists as long as the Pod runs. It is ideal for sharing data between containers in the same pod (e.g., sidecar patterns).\n\n**Your task:**\n\nCreate a Pod named `shared-data` with two containers:\n1. **writer** (`busybox:1.36`) — writes `hello-kube` to `/shared/message.txt` then sleeps\n2. **reader** (`busybox:1.36`) — reads and prints `/shared/message.txt` then sleeps\n\nBoth containers mount an `emptyDir` volume at `/shared`.", "hints": [ { "title": "emptyDir shared volume manifest", "body": "Define a single volume of type `emptyDir: {}` and mount it in both containers under the same path.", "command": "cat < /shared/message.txt && sleep 3600\"]\n volumeMounts:\n - name: shared-vol\n mountPath: /shared\n - name: reader\n image: busybox:1.36\n command: [\"sh\",\"-c\",\"sleep 5 && cat /shared/message.txt && sleep 3600\"]\n volumeMounts:\n - name: shared-vol\n mountPath: /shared\n volumes:\n - name: shared-vol\n emptyDir: {}\nEOF" } ], "setup_commands": [], "validation": { "commands": [ { "description": "Pod 'shared-data' exists", "command": "kubectl get pod shared-data -o jsonpath='{.metadata.name}'", "expected_output": "shared-data", "match": "exact" }, { "description": "Pod has 2 containers", "command": "kubectl get pod shared-data -o jsonpath='{range .spec.containers[*]}{.name}{\"\\n\"}{end}'", "expected_output": "writer", "match": "contains" }, { "description": "Volume type is emptyDir", "command": "kubectl get pod shared-data -o jsonpath='{.spec.volumes[0].emptyDir}'", "expected_output": "{}", "match": "contains" }, { "description": "Writer container mounts the shared volume", "command": "kubectl get pod shared-data -o jsonpath='{.spec.containers[0].volumeMounts[0].mountPath}'", "expected_output": "/shared", "match": "exact" } ] }, "default_namespace": "default", "teardown_commands": [ { "command": "kubectl delete pod shared-data --ignore-not-found --grace-period=0 --force" } ] }