おうちk8sでhelmをカスタマイズしてwordpressまで入れた話②(案の定k8sが上手くいかない #4)

スポンサーリンク
個人開発
スポンサーリンク

前回の振り返り

前回は、wordpressのpvとwordpressに付随するmariadbのpvの状態(STATUS)をBoundにしました。

しかし、まだwordpressとmariadbのpodは正常に立ち上がっていませんでした。

$ kubectl get pod
NAME                                                     READY   STATUS                       RESTARTS      AGE
my-wordpress-7d7f6d45fc-d97ml                            0/1     CreateContainerConfigError   0             24m
my-wordpress-mariadb-0                                   0/1     CrashLoopBackOff             5 (21s ago)   24m

今回はこのpodたちを正常に立ち上げるまで行きます。

mariadbの方のpod

まずはmariadbの方のpodから見ていきます。

ログを見てみます。

$ kubectl logs my-wordpress-mariadb-0
・・・【略】・・・
mkdir: cannot create directory '/bitnami/mariadb/data': Permission denied

「Permission denied」が発生していました。

権限周りで問題があるみたいです。

ただここで、わかんなかったのは、podの中のコンテナ内で発生しているのか、podの外のローカルにマウントしようとしてこの権限エラーが発生しているのかです。

コンテナ側での権限ではないっぽい

おそらく、コンテナ内で発生しているのかと思って、values.yamlに以下のような権限設定を追記してみます。(values.yamlは前回作成したファイルです。)

initContainers: |
  - name: change-nfs-permissions
    image: busybox
    command: ['sh', '-c', 'chown -R 1001:1001 /bitnami/mariadb/data']
    volumeMounts:
      - name: pv-data-my-wordpress-mariadb-0
        mountPath: /bitnami/mariadb/data

しかし、helm updateしようとしたらエラー。

$ helm upgrade my-wordpress bitnami/wordpress -f values.yaml
Error: UPGRADE FAILED: cannot patch "my-wordpress" with kind Deployment: Deployment.apps "my-wordpress" is invalid: spec.template.spec.initContainers[1].volumeMounts[0].name: Not found: "pv-data-my-wordpress-mariadb-0"

見にくいので全文は以下。

Error: UPGRADE FAILED: cannot patch "my-wordpress" with kind Deployment: Deployment.apps "my-wordpress" is invalid: spec.template.spec.initContainers[1].volumeMounts[0].name: Not found: "pv-data-my-wordpress-mariadb-0"

ラズパイ側で試すがプチハマり

ラズパイ側で発生しているのだろうと以下をmasterノードのラズパイで試しました。

$ sudo mkdir -p /bitnami/mariadb/data
$ sudo useradd -u 1001 mariadb-bitnami
$ sudo chown -R mariadb-bitnami:mariadb-bitnami /bitnami/mariadb/data

しかし、これだけでは「mkdir: cannot create directory ‘/bitnami/mariadb/data’: Permission denied」は解消しません。

workerノードも同様に設定する必要があります。

これを知らずにプチハマりしました。

wordpressの方のpod

wordpressのpodもディレクトリ関連のエラーが出てました。

$ kubectl describe pod  my-wordpress-7d7f6d45fc-b4khc
・・・【略】・・・

Events:
・・・【略】・・・
  Warning  Failed            4m8s (x11 over 6m22s)  kubelet            Error: stat /mnt/data-my-wordpress: no such file or directory

これもmasterとworkerどちらもディレクトリを作成する必要があります。

ディレクトリを作成したら以下のようなエラー

$ kubectl logs my-wordpress-7d7f6d45fc-v5g7h
・・・【略】・・・
wordpress 09:57:58.49 ERROR ==> Could not connect to the database

データベースに接続できないみたい。

/bitnami/mariadb/dataがマウントされていなかったです。

$ kubectl describe deployment my-wordpress
・・・【略】・・・
    Mounts:
      /bitnami/wordpress from wordpress-data (rw,path="wordpress")
      /opt/bitnami/apache/conf from empty-dir (rw,path="apache-conf-dir")
      /opt/bitnami/apache/logs from empty-dir (rw,path="apache-logs-dir")
      /opt/bitnami/apache/var/run from empty-dir (rw,path="apache-tmp-dir")
      /opt/bitnami/php/etc from empty-dir (rw,path="php-conf-dir")
      /opt/bitnami/php/tmp from empty-dir (rw,path="php-tmp-dir")
      /opt/bitnami/php/var from empty-dir (rw,path="php-var-dir")
      /opt/bitnami/wordpress from empty-dir (rw,path="app-base-dir")
      /tmp from empty-dir (rw,path="tmp-dir")

values.yamlは以下のように設定します。(ハイライトのところが今回の追加部分です)

USER-SUPPLIED VALUES:
persistence:
  accessMode: ReadWriteOnce
  enabled: true
  size: 10Gi
  storageClass: strage-my-wordpress

mariadb:
  persistence:
    enabled: true
    existingClaim: data-my-wordpress-mariadb-0

extraVolumes: |
  - name: mariadb-data
    persistentVolumeClaim:
      claimName: data-my-wordpress-mariadb-0

extraVolumeMounts: |
  - name: mariadb-data
    mountPath: /bitnami/mariadb/data

initContainers:
- name: mariadb-create-directory-structure
  image: busybox
  command:
    [
      "sh",
      "-c",
      "mkdir -p /bitnami/mariadb/data && chown -R 1001:1001 /bitnami",
    ]
  volumeMounts:
  - name: mariadb-data
    mountPath: /bitnami
- name: wordpress-create-directory-structure
  image: busybox
  command:
    [
      "sh",
      "-c",
      "mkdir -p /bitnami/wordpress && chown -R 1001:1001 /bitnami",
    ]
  volumeMounts:
  - name: wordpress-data
    mountPath: /bitnami

wordpress:
  persistence:
    enabled: true
    existingClaim: my-wordpress

この設定で「cp: cannot create regular file ‘/bitnami/wordpress/wp-config.php’: Permission denied」みたいなエラーが出ていても解消されるはず。

これで一応動いた。

k8s-master:~ $ kubectl get pods
NAME                                                     READY   STATUS    RESTARTS   AGE
my-wordpress-7d7f6d45fc-5splt                            1/1     Running   0          37h
my-wordpress-mariadb-0                                   1/1     Running   0          37h

最後に

まだ自信のない事も多いですが、一応、wordpressのpodが動くところまで行きました。

しかし、まだ不安定であることは否めません。

エラーと格闘しながらも続けていこうと思います。

次はingressを使ってブラウザからwordpressを確認したいところです。

タイトルとURLをコピーしました