【问题标题】:Kubernetes can not mount a volume to a folderKubernetes 无法将卷挂载到文件夹
【发布时间】:2018-12-17 12:24:02
【问题描述】:

我正在关注these docs,了解如何为我的 cloud-sql 数据库设置 sidecar 代理。它指的是manifest on github——我在 github repos 等上到处都能找到它——似乎对“每个人”都有效,但我遇到了麻烦。代理容器无法挂载到 /secrets/cloudsql 似乎无法成功启动。当我运行kubectl logs [mypod] cloudsql-proxy:

invalid json file "/secrets/cloudsql/mysecret.json": open /secrets/cloudsql/mysecret.json: no such file or directory

所以秘密似乎是问题所在。

清单的相关部分:

- name: cloudsql-proxy
  image: gcr.io/cloudsql-docker/gce-proxy:1.11
  command: ["/cloud_sql_proxy",
            "-instances=pqbq-224713:europe-west4:osm=tcp:5432",
            "-credential_file=/secrets/cloudsql/mysecret.json"]
  securityContext:
    runAsUser: 2
    allowPrivilegeEscalation: false
  volumeMounts:
    - name: cloudsql-instance-credentials
      mountPath: /secrets/cloudsql
      readOnly: true
volumes:
  - name: cloudsql-instance-credential
      secret:
        secretName: mysecret

为了测试/调试秘密,我将卷安装到另一个启动的容器,但路径和文件 /secrets/cloudsql/mysecret.json 也不存在。但是,当我将秘密挂载到已经存在的文件夹时,我可以在该文件夹中找到的不是 mysecret.json 文件(如我所料......),而是(在我的情况下)它包含两个秘密,所以我找到:/existingfolder/password/existingfolder/username(显然这就是它的工作原理!?当我发现这些秘密时,它们会给出正确的字符串,所以它们看起来很好)。

所以看起来系统无法创建路径,这是权限问题吗?我尝试简单地将代理容器安装到根目录('/'),所以没有文件夹,但这会给出一个错误,说明不允许这样做。由于图像gcr.io/cloudsql-docker/gce-proxy:1.11 来自谷歌,我无法让它运行,我看不到它有什么文件夹。

我的问题:

  1. mountPath 是从清单创建的还是应该已经创建 在容器里?
  2. 我怎样才能让它工作?

【问题讨论】:

    标签: kubernetes google-cloud-platform google-cloud-sql


    【解决方案1】:

    我解决了。我在 cloudsql-proxy 上使用的密钥与应用程序 (env) 上使用的密钥相同,但它需要是您从服务帐户生成的密钥,然后从中制作一个秘密。然后它工作。 This tutorial 帮助我完成了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 2020-03-22
      • 2020-08-07
      相关资源
      最近更新 更多