2017-06-14 14 views
2

私は、アプリケーションから使用するGoogle auth JSONファイルを含む/etc/google-cloud-accountにシークレットをマウントするK8sデプロイメントを用意しています。私は展開を実行しようとすると、私は私のポッドから次のエラーを取得する:/etc内のボリュームにシークレットをマウントできません。

1m 1m 1 kubelet, gke-development-cluster-default-pool-17f531d7-sj4x spec.containers{api} Normal Created  Created container with docker id 36b85ec8415a; Security:[seccomp=unconfined] 
1m 1m 1 kubelet, gke-development-cluster-default-pool-17f531d7-sj4x spec.containers{api} Warning Failed  Failed to start container with docker id 36b85ec8415a with error: Error response from daemon: rpc error: code = 2 desc = "oci runtime error: could not synchronise with container process: mkdir /var/lib/docker/overlay/b4aa81194f72ccb54d88680e766a921ea26f7a4df0f4b32d603b2b203/merged/etc/google-cloud-account: read-only file system" 
1m 1m 1 kubelet, gke-development-cluster-default-pool-17f531d7-sj4x    Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "api" with RunContainerError: "runContainer: Error response from daemon: rpc error: code = 2 desc = \"oci runtime error: could not synchronise with container process: mkdir /var/lib/docker/overlay/b4aa81194f72ccb54d88680e766a921ea26f7a4df0f4b32d603b2b203/merged/etc/google-cloud-account: read-only file system\"" 

2m 13s 11 kubelet, gke-development-cluster-default-pool-17f531d7-sj4x spec.containers{api} Warning BackOff  Back-off restarting failed docker container 

問題の展開は次のようになります。

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    # ... 
spec: 
    replicas: {{ .Values.api.replicaCount }} 
    template: 
    # ... 
    spec: 
     containers: 
     - name: {{ .Values.api.name }} 
      # ... 
      volumeMounts: 
      - name: google-cloud-account 
       mountPath: /etc/google-cloud-account 
     volumes: 
     - name: google-cloud-account 
      secret: 
      secretName: {{ template "fullname" . }} 
      items: 
       - key: google-cloud-credentials 
       path: credentials.json 

私は、コンテナ内の/etcのだろうかわかりません読み取り専用のファイルシステムであり、その変更方法はわかりません。

+0

ちょうどどこかにそれをマウントしてみてください。 GKEはCoreOSをフードの下で使用しています。それは読み取り専用FSなので、/ usr/local/R/Wのようなものの下にマウントするべきです – MrE

+0

@MrE私の答えは以下を参照してください。それは別のボリュームマウントに関連していました。 –

答えて

0

エラーが別のボリュームマウントによって発生したことが判明しました。私は、終了コードの外にそれを残したが、私の展開は、より以下のように見えた:

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    # ... 
spec: 
    replicas: {{ .Values.api.replicaCount }} 
    template: 
    # ... 
    spec: 
     containers: 
     - name: {{ .Values.api.name }} 
      # ... 
      volumeMounts: 
      - name: google-cloud-account 
       mountPath: /etc/google-cloud-account 
      - name: odbc 
       mountPath: /etc 
     volumes: 
     - name: google-cloud-account 
      secret: 
      secretName: {{ template "fullname" . }} 
      items: 
       - key: google-cloud-credentials 
       path: credentials.json 
     - name: odbc 
      configMap: 
      name: {{ template "fullname" . }} 
      items: 
       - key: odbc.ini 
       path: odbc.ini 

odbcをマウント全体/etcディレクトリを引き継ぎました。それを修正するために、私はodbcvolumeMountを変更:/etcそのままで他のすべてを残し

- name: odbc 
    mountPath: /etc/odbc.ini 
    subPath: odbc.ini 

0

Dave Long's answerに代わるものではありprojected volumes

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    # ... 
spec: 
    replicas: {{ .Values.api.replicaCount }} 
    template: 
    # ... 
    spec: 
     containers: 
     - name: {{ .Values.api.name }} 
      # ... 
      volumeMounts: 
      - name etc 
       mountPath: /etc 
      - name: google-cloud-account 
       mountPath: /etc/google-cloud-account 
      - name: odbc 
       mountPath: /etc 
     volumes: 
     - name: config 
      projected: 
      sources: 
      - secret: 
       name: {{ template "fullname" . }} 
       items: 
        - key: google-cloud-credentials 
        path: google-cloud-account/credentials.json 
      - configMap: 
       name: {{ template "fullname" . }} 
       items: 
        - key: odbc.ini 
        path: odbc.ini 
関連する問題