我正在尝试将应用程序部署到 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
Run Code Online (Sandbox Code Playgroud)
但是当文件被执行时,在 GCP 上的 yaml 中,我看到该命令已用引号括起来,然后它返回上述错误。
小智 16
我因为the job spec is invalid ... the field is immutable不同的原因收到这条消息,想在这里简单分享一下。
我试图应用这个 yaml 文件:
apiVersion: extensions/v1beta1
kind: Deployment
spec:
selector:
matchLabels:
app: application-name
...
Run Code Online (Sandbox Code Playgroud)
事实证明,这个 yaml 将替换同一部署的先前版本。当我跑步时,kubectl get deployment application-name -o yaml我看到了这个:
apiVersion: extensions/v1beta1
kind: Deployment
spec:
selector:
matchLabels:
app: application-name
track: stable
...
Run Code Online (Sandbox Code Playgroud)
显然,spec.selector.matchLabels当前是一个数组,我试图用一个字符串替换它。我的修复是删除部署并重新部署它。
Dom*_*iak 10
field is immutable error当我尝试使用以下命令在集群中运行作业时,出现了以下情况:
$ kubectl apply -f config.yml
Run Code Online (Sandbox Code Playgroud)
其中config.yml定义如下:
$ kubectl apply -f config.yml
Run Code Online (Sandbox Code Playgroud)
第一次可以用,但其他修改参数后就不行了。结果发现已完成的作业没有自动删除,它仍然出现在作业列表中:
apiVersion: batch/v1
kind: Job
metadata:
name: my-job-name
spec:
# (...)
Run Code Online (Sandbox Code Playgroud)
因此,您必须按如下方式删除旧的:
$ kubectl delete job my-job-name
Run Code Online (Sandbox Code Playgroud)
现在您可以使用 发送同名的新作业kubectl apply -f config.yml。
编辑正如@CloudWatcher 在他的评论中所说,这显然会影响不同的资源类型。对他来说,这是一个需要删除的秘密。
于是这个问题就解决了。我必须将 yaml 文件中的环境变量值用引号引起来。这解决了问题。
- name: DATABASE_URL:
value: "${DATABASE_URL}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17677 次 |
| 最近记录: |