运行 pod.yaml 时规范无效

mor*_*rla 4 kubernetes google-kubernetes-engine

当我运行我的 Pod 时,我得到 Pod (cas-de) is invalid spec :禁止的 Pod 更新可能不会更改spec.containers[*].image, spec.initContainers[*].image, spec.activeDeadlineSecondsor以外的字段 spec.tolerations(仅添加到现有的容忍度)

不过我在kubernetes网站上搜了下也没发现有什么不对的地方:(真不明白我的错在哪里)

volumeMounts在 Pod 中设置还是在 Deployment 中设置更好?

apiVersion: v1
kind: Pod 
metadata:
  name: cas-de
  namespace: ds-svc
spec:
  containers:
  - name: ds-mg-cas
    image: "docker-all.xxx.net/library/ds-mg-cas:latest"
    imagePullPolicy: Always
    ports:
    - containerPort: 8443
    - containerPort: 6402
    env:
    - name: JAVA_APP_CONFIGS
      value: "/apps/ds-cas/configs"
    - name: JAVA_EXTRA_PARAMS
      value: "-Djava.security.auth.login.config=./config/jaas.config -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6402"
    volumeMounts:
    - name: ds-cas-config
      mountPath: "/apps/ds-cas/context"
  volumes:
    - name: ds-cas-config
      hostPath:
        path: "/apps/ds-cas/context"
Run Code Online (Sandbox Code Playgroud)

Pra*_*ati 6

YAML 模板有效。某些字段可能已被更改,这些字段被禁止然后kubectl apply ....被执行。

看起来更像是一个发展。解决方案是使用kubectl delete pod cas-decommand删除现有的 pod ,然后执行kubectl apply -f file.yamlkubectl create -f file.yaml


Dav*_*aze 6

对象上有几个字段在对象最初创建后就不允许更改。作为一个具体的例子,容器的参考文档指出volumeMounts“无法更新”。如果遇到其中一种情况,则需要删除并重新创建该对象(可能首先使用不同的名称创建新对象)。

volumeMounts在 Pod 中设置好还是在 Deployment 中设置更好?

切勿使用裸露的 Pod;总是更喜欢使用管理 Pod 的控制器之一,通常是部署。

更改为 Deployment 实际上可以解决这个问题,因为更新 Deployment 的 Pod 规范将经历创建新 Pod、等待其可用、然后删除旧 Pod 的顺序。它从不尝试就地更新 Pod。