前回の振り返り
前回は、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を確認したいところです。