Bird
Raised Fist0
Kubernetesdevops~5 mins

Creating Pods with kubectl in Kubernetes - Step-by-Step CLI Walkthrough

Choose your learning style10 modes available
Introduction
Sometimes you want to run a small app or service in Kubernetes. Pods are the smallest units that hold your app containers. Creating a Pod lets you start your app inside the cluster.
When you want to run a simple app or script inside Kubernetes without extra setup.
When testing a container image quickly before making a full deployment.
When you need to run a single container with specific settings for debugging.
When learning Kubernetes basics by creating and managing Pods directly.
When running a temporary task or job that doesn't need scaling or updates.
Config File - pod.yaml
pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: nginx:1.23
    ports:
    - containerPort: 80

This file defines a Pod named example-pod running one container.

The container uses the nginx:1.23 image and listens on port 80.

The apiVersion and kind tell Kubernetes this is a Pod resource.

Commands
This command creates the Pod in Kubernetes using the configuration file. It tells Kubernetes to start the Pod with the settings defined.
Terminal
kubectl apply -f pod.yaml
Expected OutputExpected
pod/example-pod created
This command lists all Pods in the current namespace so you can check if your Pod is running.
Terminal
kubectl get pods
Expected OutputExpected
NAME READY STATUS RESTARTS AGE example-pod 1/1 Running 0 10s
This command shows detailed information about the Pod, including events and container status, useful for troubleshooting.
Terminal
kubectl describe pod example-pod
Expected OutputExpected
Name: example-pod Namespace: default Priority: 0 Node: <node-name>/192.168.1.10 Start Time: Thu, 01 Jun 2023 12:00:00 +0000 Labels: <none> Annotations: <none> Status: Running IP: 10.244.1.5 Containers: example-container: Container ID: docker://abcdef123456 Image: nginx:1.23 Image ID: docker-pullable://nginx@sha256:... Port: 80/TCP State: Running Started: Thu, 01 Jun 2023 12:00:05 +0000 Ready: True Restart Count: 0 Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 20s default-scheduler Successfully assigned default/example-pod to <node-name> Normal Pulled 19s kubelet Container image "nginx:1.23" already present on machine Normal Created 19s kubelet Created container example-container Normal Started 19s kubelet Started container example-container
This command deletes the Pod when you no longer need it, cleaning up resources.
Terminal
kubectl delete pod example-pod
Expected OutputExpected
pod "example-pod" deleted
Key Concept

If you remember nothing else from this pattern, remember: a Pod is the smallest unit you create in Kubernetes to run your containerized app.

Common Mistakes
Trying to create a Pod without a valid YAML file or with syntax errors.
Kubernetes will reject the file and not create the Pod, showing an error.
Always validate your YAML syntax and ensure required fields like apiVersion, kind, metadata, and spec are present.
Not checking Pod status after creation.
The Pod might fail to start or crash, and you won't know unless you check.
Use 'kubectl get pods' and 'kubectl describe pod' to verify the Pod is running and healthy.
Deleting the Pod without confirming the Pod name.
You might delete the wrong Pod or get an error if the name is wrong.
List Pods first with 'kubectl get pods' and copy the exact Pod name before deleting.
Summary
Create a Pod by writing a YAML file that defines the container and its settings.
Use 'kubectl apply -f pod.yaml' to create the Pod in Kubernetes.
Check the Pod status with 'kubectl get pods' and 'kubectl describe pod example-pod'.
Delete the Pod with 'kubectl delete pod example-pod' when done.

Practice

(1/5)
1. What does the command kubectl run mypod --image=nginx --restart=Never do?
easy
A. Creates a single Pod named 'mypod' running the nginx image
B. Creates a Deployment named 'mypod' running the nginx image
C. Deletes the Pod named 'mypod' if it exists
D. Updates the nginx image in all Pods

Solution

  1. Step 1: Understand the kubectl run command

    The command kubectl run creates a resource to run containers. By default, it creates a Deployment unless specified otherwise.
  2. Step 2: Effect of --restart=Never

    Adding --restart=Never tells Kubernetes to create a Pod directly, not a Deployment.
  3. Final Answer:

    Creates a single Pod named 'mypod' running the nginx image -> Option A
  4. Quick Check:

    kubectl run + --restart=Never = Pod creation [OK]
Hint: Use --restart=Never to create a Pod, not a Deployment [OK]
Common Mistakes:
  • Assuming kubectl run always creates a Deployment
  • Forgetting --restart=Never creates a Pod
  • Confusing Pod creation with deletion
2. Which of the following is the correct syntax to create a Pod named 'testpod' using the busybox image with kubectl?
easy
A. kubectl run testpod --image=busybox --restart=Never
B. kubectl create pod testpod --image=busybox
C. kubectl deploy testpod --image=busybox
D. kubectl pod create testpod --image=busybox

Solution

  1. Step 1: Identify the correct kubectl command for Pod creation

    The kubectl run command with --restart=Never creates a Pod directly.
  2. Step 2: Check each option's syntax

    kubectl create pod testpod --image=busybox uses kubectl create pod which is invalid. kubectl deploy testpod --image=busybox uses kubectl deploy which is not a kubectl command. kubectl pod create testpod --image=busybox uses kubectl pod create which is invalid. Only kubectl run testpod --image=busybox --restart=Never is correct syntax.
  3. Final Answer:

    kubectl run testpod --image=busybox --restart=Never -> Option A
  4. Quick Check:

    kubectl run + --restart=Never = Pod creation [OK]
Hint: Use 'kubectl run name --image=img --restart=Never' for Pod creation [OK]
Common Mistakes:
  • Using 'kubectl create pod' which is invalid
  • Confusing 'deploy' with 'run'
  • Omitting --restart=Never to create a Pod
3. What will be the output of the command kubectl get pods immediately after running kubectl run demo --image=nginx --restart=Never?
medium
A. A Deployment named 'demo' will be listed instead of a Pod
B. No Pods will be listed because the command creates a Deployment
C. A Pod named 'demo' will be listed with STATUS 'Running' or 'ContainerCreating'
D. An error message saying 'unknown command run'

Solution

  1. Step 1: Understand the effect of the run command with --restart=Never

    This command creates a Pod named 'demo' running the nginx image.
  2. Step 2: Check what kubectl get pods shows

    It lists all Pods. Since the Pod was just created, it will appear with status 'Running' or 'ContainerCreating'.
  3. Final Answer:

    A Pod named 'demo' will be listed with STATUS 'Running' or 'ContainerCreating' -> Option C
  4. Quick Check:

    kubectl run + --restart=Never creates Pod listed by get pods [OK]
Hint: Pods created with --restart=Never appear in 'kubectl get pods' [OK]
Common Mistakes:
  • Expecting a Deployment to appear in pod list
  • Thinking no pods appear immediately
  • Confusing command output with error
4. You run kubectl run app --image=nginx but no Pod named 'app' appears when you run kubectl get pods. What is the likely cause?
medium
A. The image name 'nginx' is invalid, so Pod creation failed
B. The command created a Deployment, not a Pod named 'app', so no Pod named 'app' appears
C. You need to add --restart=Always to create a Pod
D. The Pod was created but immediately deleted by Kubernetes

Solution

  1. Step 1: Understand default behavior of kubectl run without --restart=Never

    By default, kubectl run creates a Deployment, not a Pod.
  2. Step 2: Check why 'kubectl get pods' shows no Pod named 'app'

    Since a Deployment manages Pods, the Pod(s) are named like 'app-[hash]', not 'app'. The command kubectl get deployments would show the Deployment.
  3. Final Answer:

    The command created a Deployment, not a Pod named 'app', so no Pod named 'app' appears -> Option B
  4. Quick Check:

    kubectl run without --restart=Never creates Deployment [OK]
Hint: Add --restart=Never to create a Pod, else Deployment is created [OK]
Common Mistakes:
  • Assuming kubectl run always creates a Pod
  • Thinking image name caused failure without error
  • Confusing --restart=Always with Pod creation
5. You want to create a Pod named 'webserver' running the nginx image that does NOT restart automatically if it crashes. Which command should you use?
hard
A. kubectl run webserver --image=nginx
B. kubectl run webserver --image=nginx --restart=Always
C. kubectl create pod webserver --image=nginx --restart=Never
D. kubectl run webserver --image=nginx --restart=Never

Solution

  1. Step 1: Understand restart policies in kubectl run

    Using --restart=Never creates a Pod with restart policy 'Never', so it won't restart automatically.
  2. Step 2: Evaluate each option

    kubectl run webserver --image=nginx --restart=Never correctly uses --restart=Never. kubectl run webserver --image=nginx --restart=Always uses --restart=Always which creates a Deployment that restarts Pods. kubectl create pod webserver --image=nginx --restart=Never uses invalid syntax. kubectl run webserver --image=nginx creates a Deployment by default.
  3. Final Answer:

    kubectl run webserver --image=nginx --restart=Never -> Option D
  4. Quick Check:

    --restart=Never means Pod won't auto-restart [OK]
Hint: Use --restart=Never to prevent Pod auto-restart on failure [OK]
Common Mistakes:
  • Using default restart which creates Deployment
  • Confusing --restart=Always with no restart
  • Trying invalid commands like kubectl create pod
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