Bird
Raised Fist0
Kubernetesdevops~10 mins

Pod definition in YAML in Kubernetes - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Pod definition in YAML
Start YAML file
↓
Define apiVersion
↓
Define kind: Pod
↓
Define metadata: name, labels
↓
Define spec: containers list
↓
Define each container: name, image, ports
↓
End YAML file
This flow shows how a Pod YAML is structured step-by-step from top-level fields to container details.
Execution Sample
Kubernetes
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    ports:
    - containerPort: 80
This YAML defines a Pod named 'my-pod' with one container running nginx on port 80.
Process Table
StepYAML SectionActionValue SetNotes
1apiVersionSet API versionv1Specifies Kubernetes API version
2kindSet resource typePodDefines this resource as a Pod
3metadataSet metadata blockname: my-podNames the Pod 'my-pod'
4specSet spec blockcontainers: listDefines containers in the Pod
5containers[0]Define containername: my-containerFirst container named 'my-container'
6containers[0]Set imagenginxContainer runs nginx image
7containers[0]Set portscontainerPort: 80Container exposes port 80
8EndYAML completePod definition readyPod YAML is valid and ready for use
💡 All required fields set; YAML defines a valid Pod with one container.
Status Tracker
FieldStartAfter Step 3After Step 7Final
apiVersionundefinedv1v1v1
kindundefinedPodPodPod
metadata.nameundefinedmy-podmy-podmy-pod
spec.containersundefinedundefined[{name: my-container, image: nginx, ports: [{containerPort: 80}]}][{name: my-container, image: nginx, ports: [{containerPort: 80}]}]
Key Moments - 3 Insights
Why do we need to specify 'apiVersion' and 'kind' at the top?
These fields tell Kubernetes what type of resource you are creating and which API version to use, as shown in steps 1 and 2 of the execution table.
What happens if we forget to define 'containers' under 'spec'?
The Pod would be invalid because Kubernetes requires at least one container in the Pod spec, as seen in step 4 where containers list is defined.
Why do we indent 'name', 'image', and 'ports' under the container?
Indentation shows these fields belong to the container object inside the containers list, demonstrated in steps 5 to 7.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of 'kind' after step 2?
APod
Bv1
Cmy-pod
Dcontainers
💡 Hint
Check the 'Value Set' column at step 2 in the execution table.
At which step is the container image set to 'nginx'?
AStep 3
BStep 5
CStep 6
DStep 7
💡 Hint
Look for 'Set image' action in the execution table.
If we remove the 'ports' section, which step would be missing?
AStep 4
BStep 7
CStep 6
DStep 8
💡 Hint
Ports are set in step 7 according to the execution table.
Concept Snapshot
Pod YAML structure:
apiVersion: v1
kind: Pod
metadata:
  name: pod-name
spec:
  containers:
  - name: container-name
    image: image-name
    ports:
    - containerPort: port-number

Indentation shows hierarchy; containers list is required.
Full Transcript
This visual execution traces a Kubernetes Pod definition in YAML. It starts with setting the apiVersion and kind fields to specify the resource type. Then metadata is defined to name the Pod. The spec section contains a list of containers. Each container has a name, image, and optionally ports. The execution table shows each step setting these fields. The variable tracker shows how fields get their values step-by-step. Key moments clarify why apiVersion and kind are needed, why containers are required, and the importance of indentation. The quiz tests understanding of these steps. The snapshot summarizes the YAML structure and key rules for defining a Pod.

Practice

(1/5)
1. What is the purpose of the spec section in a Kubernetes Pod YAML definition?
easy
A. It declares the Kubernetes API version used
B. It defines the containers and their settings inside the Pod
C. It specifies the Pod's name and labels
D. It sets the namespace for the Pod

Solution

  1. Step 1: Understand the YAML structure

    The spec section in a Pod YAML defines the desired state, including containers and their configurations.
  2. Step 2: Identify the role of other sections

    metadata holds name and labels, apiVersion declares the API version, and namespace is set elsewhere.
  3. Final Answer:

    It defines the containers and their settings inside the Pod -> Option B
  4. Quick Check:

    Pod spec = container details [OK]
Hint: Remember: spec section = container setup inside Pod [OK]
Common Mistakes:
  • Confusing metadata with spec
  • Thinking apiVersion defines containers
  • Mixing namespace with spec
2. Which of the following is the correct way to specify a container image in a Pod YAML?
easy
A. containers: - name: myapp image: myimage:latest
B. containers: - imageName: myimage:latest containerName: myapp
C. container: name: myapp image: myimage:latest
D. containers: - myapp: image: myimage:latest

Solution

  1. Step 1: Check correct YAML keys for containers

    The correct keys are containers (list), each with name and image.
  2. Step 2: Validate each option's syntax

    containers: - name: myapp image: myimage:latest uses correct keys and indentation. Others use wrong keys or structure.
  3. Final Answer:

    containers: - name: myapp image: myimage:latest -> Option A
  4. Quick Check:

    Container image key = image [OK]
Hint: Use 'name' and 'image' keys inside 'containers' list [OK]
Common Mistakes:
  • Using wrong keys like imageName or containerName
  • Incorrect indentation or singular 'container'
  • Nesting keys incorrectly under container name
3. Given this Pod YAML snippet, what will be the container's name and image?
spec:
  containers:
  - name: frontend
    image: nginx:1.21
medium
A. Container name is 'nginx' and image is 'frontend:1.21'
B. Container name is 'frontend' and image is 'nginx:latest'
C. Container name is 'frontend' and image is 'nginx:1.21'
D. Container name and image are not defined

Solution

  1. Step 1: Read the container name

    The YAML shows name: frontend, so container name is 'frontend'.
  2. Step 2: Read the container image

    The image is nginx:1.21, exactly as specified.
  3. Final Answer:

    Container name is 'frontend' and image is 'nginx:1.21' -> Option C
  4. Quick Check:

    Name and image match YAML exactly [OK]
Hint: Match keys 'name' and 'image' exactly as YAML shows [OK]
Common Mistakes:
  • Swapping name and image values
  • Assuming default image tag 'latest'
  • Ignoring YAML indentation and keys
4. Identify the error in this Pod YAML snippet:
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: app
    image: nginx
  - name: app
    image: redis
medium
A. Duplicate container names are not allowed in a Pod
B. Missing apiVersion field
C. Incorrect indentation under containers
D. Pod kind should be Deployment

Solution

  1. Step 1: Check container names uniqueness

    Both containers have the name 'app', which is not allowed because container names must be unique within a Pod.
  2. Step 2: Verify other fields

    apiVersion and kind are present and indentation is correct. Pod kind is valid.
  3. Final Answer:

    Duplicate container names are not allowed in a Pod -> Option A
  4. Quick Check:

    Unique container names required [OK]
Hint: Check container names are unique inside Pod spec [OK]
Common Mistakes:
  • Ignoring duplicate container names
  • Confusing Pod with Deployment kind
  • Misreading indentation as error
5. You want to create a Pod with two containers: one running nginx and another running redis. Which YAML snippet correctly defines this Pod?
hard
A. apiVersion: v1 kind: Pod metadata: name: multi-container-pod spec: containers: - nginx - redis
B. apiVersion: v1 kind: Pod metadata: name: multi-container-pod spec: container: - name: nginx image: nginx - name: redis image: redis
C. apiVersion: v1 kind: Pod metadata: name: multi-container-pod spec: containers: name: nginx image: nginx name: redis image: redis
D. apiVersion: v1 kind: Pod metadata: name: multi-container-pod spec: containers: - name: nginx-container image: nginx - name: redis-container image: redis

Solution

  1. Step 1: Verify correct key for multiple containers

    The key must be containers (plural) with a list of container objects.
  2. Step 2: Check each container has unique name and image

    apiVersion: v1 kind: Pod metadata: name: multi-container-pod spec: containers: - name: nginx-container image: nginx - name: redis-container image: redis correctly lists two containers with unique names and images. Other options have syntax errors or wrong keys.
  3. Final Answer:

    apiVersion: v1 kind: Pod metadata: name: multi-container-pod spec: containers: - name: nginx-container image: nginx - name: redis-container image: redis -> Option D
  4. Quick Check:

    Use 'containers' list with unique names [OK]
Hint: Use 'containers' plural with list of named containers [OK]
Common Mistakes:
  • Using singular 'container' instead of 'containers'
  • Not giving unique names to containers
  • Incorrect YAML list syntax
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard