Bash 字段是不可变的k8s

Bash 字段是不可变的k8s,bash,kubernetes,Bash,Kubernetes,我正在尝试将应用程序部署到kubernetes上的GCP,但是,部署失败,错误是作业规范无效。。。该字段是不可变的 在迁移作业中,我有以下格式的bash部分: args: - | /cloud_sql_proxy -instances=xxxxxxxxxxx:europe-west1:xxxxxxxxxxx=tcp:5432 -credential_file=/secrets/cloudsql/credentials.json -log_debug_stdou

我正在尝试将应用程序部署到kubernetes上的GCP,但是,部署失败,错误是作业规范无效。。。该字段是不可变的

在迁移作业中,我有以下格式的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中,我看到命令被括在引号中,然后返回上面提到的错误。

如果在Pod定义中使用它,则意味着它是一个包含单字符串项的数组。(它不在shell中运行命令)例如:

args:
        - /cloud_sql_proxy
        - -instances
        - ...

解决这一问题的方法是:

数组中的引号(“)是为了可读性,它们也可以是无引号或单引号(')(如图所示)


希望有帮助。

所以这个问题得到了解决。我不得不将yaml文件中环境变量的值用引号括起来。这就解决了问题

- name: DATABASE_URL:
  value: "${DATABASE_URL}"

我收到消息
作业规范无效…由于不同的原因,该字段是不可更改的
,希望在此简要分享

我正在尝试应用此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
当前是一个数组,我试图用一个字符串替换它。我的修复方法是删除部署并重新部署它。

这正是我所使用的,我只是在问题中省略了这一部分。但是你明白为什么yaml obj中的参数用双引号括起来了吗ect?引号只是为了可读性,它们可以是双引号(“)、单引号(“)或无引号。更新了答案。当我在作业失败后检查GCP上的yaml文件时,我意识到整个命令块都用引号括起来了:请记住,这只是一种方法。使用“${DATABASE_URL}”或#DATBASE_URL”(在我的案例中也是如此,删除部署修复了它。这不是因为它是一个数组,而是因为你,你必须删除并重新创建它。我的猜测是,即使你修补了一个扩展/v1beta1部署,它实际上是下面的一个app/v1部署(存储版本迁移),这里引入了不变性。@TBBIe在这里的评论为我解决了核心问题。执行
kubectl delete-n
,然后使用升级的清单执行
kubectl apply
,让我越过了这条线。
apiVersion: extensions/v1beta1
kind: Deployment
spec:
  selector:
    matchLabels:
      app: application-name
...
apiVersion: extensions/v1beta1
kind: Deployment
spec:
  selector:
    matchLabels:
      app: application-name
      track: stable
...