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
現在配列になっているようで、これを単一の文字列に置き換えようとしていました。私の修正方法は、デプロイメントを削除して再デプロイすることでした。