Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

276
Views
Kubernetes: How to update a live busybox container's 'command'

I have the following manifest that created the running pod named 'test'

apiVersion: v1
kind: Pod
metadata:
  name: hello-world
  labels:
    app: blue
spec:
  containers:
  - name: funskies
    image: busybox
    command: ["/bin/sh", "-c", "echo 'Hello World'"]

I want to update the pod to include the additional command

apiVersion: v1
kind: Pod
metadata:
  name: hello-world
  labels:
    app: blue
spec:
  containers:
  restartPolicy: Never
  - name: funskies
    image: busybox
    command: ["/bin/sh", "-c", "echo 'Hello World' > /home/my_user/logging.txt"]

What I tried

kubectl edit pod test

What resulted

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
# pods "test" was not valid:
# * spec: Forbidden: pod updates may not change fields other than `spec.containers[*].image`...

Other things I tried:

Updated the manifest and then ran apply - same issue

kubectl apply -f test.yaml 

Question: What is the proper way to update a running pod?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

You can't modify most properties of a Pod. Typically you don't want to directly create Pods; use a higher-level controller like a Deployment.

The Kubernetes documentation for a PodSpec notes (emphasis mine):

containers: List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.

In all cases, no matter what, a container runs a single command, and if you want to change what that command is, you need to delete and recreate the container. In Kubernetes this always means deleting and recreating the containing Pod. Usually you shouldn't use bare Pods, but if you do, you can create a new Pod with the new command and delete the old one. Deleting Pods is extremely routine and all kinds of ordinary things cause it to happen (updating Deployments, a HorizontalPodAutoscaler scaling down, ...).

If you have a Deployment instead of a bare Pod, you can freely change the template: for the Pods it creates. This includes changing their command:. This will result in the Deployment creating a new Pod with the new command, and once it's running, deleting the old Pod.

The sorts of very-short-lived single-command containers you show in the question aren't necessarily well-suited to running in Kubernetes. If the Pod isn't going to stay running and serve requests, a Job could be a better match; but a Job believes it will only be run once, and if you change the pod spec for a completed Job I don't think it will launch a new Pod. You'd need to create a new Job for this case.

over 4 years ago · Santiago Trujillo Report

0

I am not sure what the whole requirement is.

but you can exec to the pod and update the details

$ kubectl exec <pod-name> -it -n <namespace> -- <command to execute>

like,
$ kubectl exec pod/hello-world-xxxx-xx -it -- /bin/bash

if tty support shell, use "/bin/sh" to update the content or command.

Editing the running pod, will not retain the changes in manifest file. so in that case you have to run a new pod with the changes.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!