Bird
Raised Fist0
Kubernetesdevops~10 mins

kubectl exec for container access in Kubernetes - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - kubectl exec for container access
User runs kubectl exec command
↓
kubectl sends exec request to API Server
↓
API Server forwards request to kubelet on node
↓
kubelet executes command inside container
↓
Command output sent back to user terminal
This flow shows how the kubectl exec command lets you run commands inside a container by sending a request through the Kubernetes API to the node running the container.
Execution Sample
Kubernetes
kubectl exec -it my-pod -- /bin/bash
This command opens an interactive bash shell inside the container of the pod named 'my-pod'.
Process Table
StepActionCommand/RequestResult/Output
1User runs kubectl execkubectl exec -it my-pod -- /bin/bashExec request sent to API Server
2API Server receives requestForward exec request to kubeletRequest forwarded to node's kubelet
3kubelet executes command/bin/bash inside containerBash shell started inside container
4User interacts with shellCommands typed in shellShell executes commands and returns output
5User exits shellexit commandShell session ends, connection closed
💡 User exits shell or connection is closed, ending the exec session
Status Tracker
VariableStartAfter Step 1After Step 3After Step 5
kubectl exec sessionnonerequest sentshell runningsession closed
Key Moments - 3 Insights
Why do we need the -- before the command in kubectl exec?
The -- tells kubectl that what follows is the command to run inside the container, not an option to kubectl itself. See execution_table step 1.
What does the -it option do in kubectl exec?
-i keeps the input open so you can type commands, and -t allocates a terminal so the shell works interactively. This is why you get a usable bash shell in step 3.
Can kubectl exec run commands in containers of pods with multiple containers?
Yes, but you must specify the container name with -c option. Otherwise, kubectl exec defaults to the first container.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what happens at step 3?
AThe API Server forwards the exec request to kubelet
BThe kubelet executes the command inside the container
CUser types commands in the shell
DThe exec session ends
💡 Hint
Check the 'Action' and 'Result/Output' columns at step 3 in execution_table
At which step does the user start interacting with the shell inside the container?
AStep 4
BStep 1
CStep 2
DStep 5
💡 Hint
Look for when 'User interacts with shell' in the execution_table
If you omit the -it option, what would change in the execution?
Akubectl exec would fail to send the request
BYou would still get an interactive shell
CThe command would run but you cannot interact with it
DThe API Server would reject the request
💡 Hint
Recall the explanation in key_moments about the purpose of -it option
Concept Snapshot
kubectl exec lets you run commands inside a container.
Use: kubectl exec -it <pod> -- <command>
- -i keeps input open
- -t allocates a terminal
-- separates kubectl options from the command
Useful for debugging or accessing container shells.
Full Transcript
The kubectl exec command allows you to run commands inside a container of a Kubernetes pod. When you run kubectl exec -it my-pod -- /bin/bash, kubectl sends an exec request to the Kubernetes API Server. The API Server forwards this request to the kubelet on the node where the pod runs. The kubelet then executes the command inside the container, starting a bash shell. The user can interact with this shell until they exit, which closes the session. The -i and -t options keep the input open and allocate a terminal for interactive use. The -- separates kubectl options from the command to run inside the container. This command is useful for debugging or accessing container environments directly.

Practice

(1/5)
1. What does the kubectl exec command do in Kubernetes?
easy
A. Lists all running pods in the cluster
B. Deletes a pod from the cluster
C. Creates a new pod in the cluster
D. Runs a command inside a running container in a pod

Solution

  1. Step 1: Understand the purpose of kubectl exec

    The kubectl exec command is used to run commands inside a container that is already running inside a pod.
  2. Step 2: Compare with other kubectl commands

    Deleting pods uses kubectl delete pod, creating pods uses kubectl create, and listing pods uses kubectl get pods. These are different commands.
  3. Final Answer:

    Runs a command inside a running container in a pod -> Option D
  4. Quick Check:

    kubectl exec = run command inside container [OK]
Hint: kubectl exec runs commands inside containers [OK]
Common Mistakes:
  • Confusing exec with pod creation or deletion
  • Thinking exec lists pods
  • Using exec without specifying pod
2. Which of the following is the correct syntax to start an interactive shell inside a container named web in pod frontend-pod?
easy
A. kubectl exec -it frontend-pod -c web -- /bin/bash
B. kubectl exec frontend-pod -c web -it /bin/bash
C. kubectl exec -c web frontend-pod /bin/bash -it
D. kubectl exec frontend-pod /bin/bash -c web -it

Solution

  1. Step 1: Recall correct kubectl exec syntax

    The correct syntax for interactive shell is: kubectl exec -it POD_NAME -c CONTAINER_NAME -- /bin/bash. The -it flags come before the pod name, and -- separates command from options.
  2. Step 2: Analyze each option

    kubectl exec -it frontend-pod -c web -- /bin/bash matches the correct syntax exactly. The other options have misplaced flags or arguments causing syntax errors.
  3. Final Answer:

    kubectl exec -it frontend-pod -c web -- /bin/bash -> Option A
  4. Quick Check:

    Correct flag order and -- separator = kubectl exec -it frontend-pod -c web -- /bin/bash [OK]
Hint: Use -it before pod name and -- before command [OK]
Common Mistakes:
  • Placing -it after pod name
  • Omitting -- before command
  • Misordering container flag -c
3. What will be the output of this command if the pod db-pod has a container named mysql running and you execute:
kubectl exec db-pod -c mysql -- ls /var/lib/mysql?
medium
A. Lists files and directories inside /var/lib/mysql in the mysql container
B. Shows an error: container mysql not found
C. Lists files in the host machine's /var/lib/mysql directory
D. Starts an interactive shell inside the mysql container

Solution

  1. Step 1: Understand the command

    The command runs ls /var/lib/mysql inside the mysql container of the db-pod pod. It lists files in that directory inside the container.
  2. Step 2: Eliminate wrong options

    Shows an error: container mysql not found is wrong because the container exists. Lists files in the host machine's /var/lib/mysql directory is wrong because kubectl exec runs inside container, not host. Starts an interactive shell inside the mysql container is wrong because no shell is started; only ls runs.
  3. Final Answer:

    Lists files and directories inside /var/lib/mysql in the mysql container -> Option A
  4. Quick Check:

    kubectl exec runs command inside container = Lists files and directories inside /var/lib/mysql in the mysql container [OK]
Hint: kubectl exec runs command inside container, not host [OK]
Common Mistakes:
  • Thinking command runs on host machine
  • Confusing exec with shell start
  • Assuming container does not exist
4. You run kubectl exec -it mypod -- /bin/sh but get the error: error: a container name must be specified for pod mypod, choose one of: [app backend]. What is the fix?
medium
A. Restart the pod before running exec
B. Add -c app or -c backend to specify the container
C. Remove -it flags to fix the error
D. Use kubectl exec mypod /bin/sh without flags

Solution

  1. Step 1: Understand the error message

    The error says multiple containers exist in pod mypod, so you must specify which container to exec into using -c.
  2. Step 2: Apply the fix

    Add -c app or -c backend to the command to specify the container name explicitly.
  3. Final Answer:

    Add -c app or -c backend to specify the container -> Option B
  4. Quick Check:

    Multiple containers need -c flag = Add -c app or -c backend to specify the container [OK]
Hint: Specify container with -c when pod has multiple containers [OK]
Common Mistakes:
  • Ignoring container name when multiple containers exist
  • Removing -it flags unnecessarily
  • Restarting pod without reason
5. You want to run an interactive bash shell inside the container named worker in pod job-pod. The pod has two containers: worker and logger. Which command correctly achieves this?
hard
A. kubectl exec job-pod -c worker -it /bin/bash
B. kubectl exec -it job-pod /bin/bash -c worker
C. kubectl exec -it job-pod -c worker -- /bin/bash
D. kubectl exec job-pod -it -c worker /bin/bash

Solution

  1. Step 1: Recall correct syntax for interactive exec with container

    The correct syntax is kubectl exec -it POD_NAME -c CONTAINER_NAME -- /bin/bash. The -it flags come before pod name, -c specifies container, and -- separates command.
  2. Step 2: Check options for correct order and flags

    kubectl exec -it job-pod -c worker -- /bin/bash matches the correct syntax exactly. The other options have misplaced flags or missing --, causing errors.
  3. Final Answer:

    kubectl exec -it job-pod -c worker -- /bin/bash -> Option C
  4. Quick Check:

    Correct flag order and -- separator = kubectl exec -it job-pod -c worker -- /bin/bash [OK]
Hint: Use -it before pod, -c container, and -- before command [OK]
Common Mistakes:
  • Misordering flags -it and -c
  • Omitting -- before command
  • Not specifying container when multiple exist
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