Kubernetes部署:编辑pod的YAML文件的“规范”失败

mqkwyuun  于 2022-12-29  发布在  Kubernetes
关注(0)|答案(3)|浏览(329)

使用K8控制面板的 Edit 添加到pod的spec.containers中的env元素没有被保存。有人知道问题是什么吗?
是否有其他方法可以向pod/container添加环境变量?
我得到这个错误时,做同样的编辑文件使用nano:

# pods "EXAMPLE" was not valid:
# * spec: Forbidden: pod updates may not change fields other than `containers[*].image` or `spec.activeDeadlineSeconds`

谢谢。

bzzcjhmw

bzzcjhmw1#

不是所有的字段都可以被更新。这个事实有时候会在kubectl explain对象的输出中被提及(并且你得到的错误列出了可以被修改的字段,所以其他的可能不能)。

$ kubectl explain pod.spec.containers.env
RESOURCE: env <[]Object>

DESCRIPTION:
     List of environment variables to set in the container. Cannot be updated.

    EnvVar represents an environment variable present in a Container.

如果您使用Deployment object部署Pod,则可以使用kubectl edit更改 that 对象中的环境变量,因为部署将推出包含变量更改的更新版本的Pod,并删除未更改的旧Pod。显然,该方法不会在适当位置更改Pod,但它是获得所需内容的一种方法。
另一个选择是使用ConfigMaps。如果您使用卷插件方法挂载ConfigMap *,并且 * 您的应用程序编写为能够感知卷的更改并在更改时使用新设置重新加载自身,则这可能是一个选择(或至少为您提供了其他可能适用的想法)。

vsdwdz23

vsdwdz232#

我们无法编辑正在实时运行的pod的env变量、资源限制、服务帐户。但是,我们可以编辑/更新映像名称、容差和活动截止时间秒数等。但是,可以轻松编辑**“部署”**,因为“pod”是部署规范的子模板。为了使用所需的更改“编辑”正在运行的pod,可以使用下面的方法。

将pod定义提取到文件,进行必要的更改,删除现有pod,并从编辑的文件创建新pod:

kubectl get pod my-pod -o yaml > my-new-pod.yaml
vi my-new-pod.yaml
kubectl delete pod my-pod
kubectl create -f my-new-pod.yaml
jgovgodb

jgovgodb3#

不知道其他人,但当我编辑pod YAML从谷歌Kubernetes引擎工作负载页面,同样的错误来找我。但如果我重试一段时间后,它的工作。
感觉像一些更新正在进行中,在同一时间早些时候,所以我试图编辑YAML快速和应用的变化,它的工作。

相关问题