フィールドは不変です k8s 質問する

フィールドは不変です 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 でコマンドが引用符で囲まれていることがわかり、上記のエラーが返されます。

ベストアンサー1

the job spec is invalid ... the field is immutable私は別の理由でこのメッセージを受け取りましたので、ここで簡単に共有したいと思いました。

この yaml ファイルを適用しようとしていました:

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

この yaml は、同じデプロイメントの以前のバージョンを置き換えるものであることがわかりました。実行すると、kubectl get deployment application-name -o yaml次のようになりました。

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

どうやら はspec.selector.matchLabels現在配列になっているようで、これを単一の文字列に置き換えようとしていました。私の修正方法は、デプロイメントを削除して再デプロイすることでした。

おすすめ記事