首页 > 解决方案 > 字段是不可变的 k8s

问题描述

我正在尝试将应用程序部署到 kubernetes 上的 GCP,但是,部署失败并出现错误the job spec is invalid ... the field is immutable

在迁移作业中,我有一段 bash 格式如下:

args:
        - |
          /cloud_sql_proxy -instances=xxxxxxxxxxx:europe-west1:xxxxxxxxxxx=tcp:5432 -credential_file=/secrets/cloudsql/credentials.json -log_debug_stdout=true &
          CHILD_PID=$!
          (while true; do echo "waiting for termination file"; if [[ -f "/tmp/pod/main-terminated" ]]; then kill ; echo "Killed  as the main container terminated."; fi; sleep 1; done) &
          wait 
          if [[ -f "/tmp/pod/main-terminated" ]]; then exit 0; echo "Job completed. Exiting..."; fi

但是当文件执行时,在 GCP 上的 yaml 中,我看到该命令已用引号引起来,然后它返回上述错误。

标签: bashkubernetes

解决方案


我收到这条消息the job spec is invalid ... the field is immutable是出于不同的原因,想在这里简要分享一下。

我试图应用这个 yaml 文件:

apiVersion: extensions/v1beta1
kind: Deployment
spec:
  selector:
    matchLabels:
      app: application-name
...

事实证明,这个 yaml 将替换同一 Deployment 的先前版本。当我跑步时,kubectl get deployment application-name -o yaml我看到了这个:

apiVersion: extensions/v1beta1
kind: Deployment
spec:
  selector:
    matchLabels:
      app: application-name
      track: stable
...

显然,spec.selector.matchLabels当前是一个数组,我试图用一个字符串替换它。我的修复是删除部署并重新部署它。


推荐阅读