2016-12-05 9 views
0

apache drupal imageでクーベルネット上にDrupalコンテナを作成しようとしています。コンテナ内部でファイルが消える原因となるKubernetesの永続ストレージ

永続ボリュームが/var/www/htmlにマウントされ、docker exec -it <drupal-container-name> bashでDrupalコンテナを検査すると、ファイルが表示されません。したがって、ファイルを提供することはできません。

ワークフロー

1 -

gcloud compute disks create --size=20GB --zone=us-central1-c drupal-1 

2ディスクを計算グーグルの作成 -

kubectl create -f gce-volumes.yaml 

3 kubernetesクラスタインスタンスに新しく作成されたGoogleの計算ディスクを登録 - Drupalのポッド

を作成します。
kubectl create -f drupal-deployment.yaml 
apiVersion: v1 
kind: Service 
metadata: 
    name: drupal 
    labels: 
    app: drupal 
spec: 
    ports: 
    - port: 80 
    selector: 
    app: drupal 
    tier: frontend 
    type: LoadBalancer 
--- 
apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
    name: dp-pv-claim 
    labels: 
    app: drupal 
spec: 
    accessModes: 
    - ReadWriteOnce 
    resources: 
     requests: 
      storage: 20Gi 
--- 
apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: drupal 
    labels: 
    app: drupal 
spec: 
    strategy: 
    type: Recreate 
    template: 
    metadata: 
     labels: 
     app: drupal 
     tier: frontend 
    spec: 
     containers: 
     - name: drupal 
     image: drupal:8.2.3-apache 
     ports: 
     - name: drupal 
      containerPort: 80 
     volumeMounts: 
     - name: drupal-persistent-storage 
      mountPath: /var/www/html 
     volumes: 
     - name: drupal-persistent-storage 
     persistentVolumeClaim: 
      claimName: dp-pv-claim 

そしてgce-volumes.yaml:ファイルが消えて引き起こしている何

apiVersion: v1 
kind: PersistentVolume 
metadata: 
    name: drupal-pv-1 
spec: 
    capacity: 
    storage: 20Gi 
    accessModes: 
    - ReadWriteOnce 
    gcePersistentDisk: 
    pdName: drupal-1 
    fsType: ext4 

定義ファイルは、ワードプレスexample、私のdrupal-deployment.yamlからインスピレーションを得ていますか?コンテナ内の/var/www/htmlにDrupalインストールファイルを正常に保存するにはどうしたらいいですか?

答えて

1

persistentStorage/var/www/htmlにマウントしているため、ベースイメージのその場所にファイルがある場合、そのフォルダはマウントに置き換えられ、ベースイメージのファイルは使用できなくなります。

コンテンツが動的で、そのファイルをpersistentStorageに保存する場合は、これを行う方法ですが、最初にpersistentStorageを埋め込む必要があります。

解決策の1つは、ベースイメージ内の別のフォルダにファイルを保存し、ポッドを実行するときにコピーすることですが、これはポッドを起動するたびに実行されます。コピースクリプトは、まずフォルダが空であるかどうかをチェックします。

GKEPersistentStorageだけのみに搭載することができるReadWriteOnceを(ことができます:

別のオプションは、Job(。あなたのDrupalポッドを実行し、このストレージをマウントする前に)一度だけこの操作を行う

注意を持っていることですシングルポッド)またはReadOnlyMany(読み取り専用ですが、多くのポッドにマウントすることができます)、異なるモードで同時にマウントすることはできません。したがって、最終的にこれらのポッドの1つを実行することができます。 (つまり、スケールされません)

関連する問題