1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#12.KubernetesでWordpressを構築していたらハマったところ

Last updated at Posted at 2025-01-11

はじめに

こんにちは〜nayaaaaです。
最近、Kubernetesの学習しており、学習の際にKubernetes環境でWordppressの構築を行なっていたのですが、以下のようにデータベースの接続エラーが発生してしまいました。

スクリーンショット 2024-12-31 7.17.14.png

解決までに意外に時間がかかってしまったので、エラー解決までに行なったことと原因について記事にしてみました。

環境情報

Pod構成

WordPress Pod

コンテナ:

nginx
php

MySQL Pod

コンテナ:

mysql

使用しているDockerイメージ

nginx: 1.27.3-alpine
php: 8.3-fpm-alpine
mysql: 8.0.28

対処

まずはデータベースの接続エラーということで、MySQL Podのerror.logを確認してみたのですが、何もログは吐かれていませんでした。

その際に私が原因としてぱっと浮かんだのが以下の点でした。

  • wp-config.phpの設定に誤りがある。
  • データベースの設定が正しく行われていない(権限が足りない、スキーマ情報が作成されていないなど)。
  • secrets.ymlファイルから変数の値を取得できていない(変数の呼び出しにsecretを使用)。
    ファイルへのアクセス権限が設定されていない、またはそもそもPodが動作していないなど。
    ということで一つずつ確認してみました。

まず、wp-config.phpの設定についてなのですが、secrets.ymlファイルから変数を呼び出す形で値を設定しており、本当に値を取得できているのか以下の通り確認しました。

kubectl describe secret {secret名} -n {名前空間名}

mysql-secret -n dev-techbull-k8s
Name:         mysql-secret
Namespace:    dev-techbull-k8s
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
MYSQL_PASSWORD:       8 bytes
MYSQL_ROOT_PASSWORD:  8 bytes
MYSQL_USER:           7 bytes
MYSQL_DATABASE:       7 bytes
root@DESKTOP-SR0ND96:/mnt/c/Users/PC_User/Desktop/menta/Kubernetes# 

ちゃんと出力されており、変数が登録されていそうでした。

データベースの設定についても、今回作成したユーザでログインが可能なのを確認し、データベースの作成、アクセス権限が付与されているのを確認して特に問題はございませんでした。

ファイルのアクセス権限については644でファイルが設定されていたため、基本的には読み取り動作に影響はないはず。podについてもステータスを確認するとrunning表示となっており異常なし。

どうしても解決ができなかったので、同コミュニティに所属しているエンジニア
仲間の方に助けを求めました。

確認できたこと

・mysqlのスキーマ情報については正しく設定されている。
・変数の取得については正しく取得できており、設定ファイルにも誤りはなさそう。
・Pod間の通信も正常に行われている。

実際にWordpress Pod内部からnslookupとpingで確認した結果↓

wordpress-7d5cdcc5d9-78gf6:/# nslookup mysql
Server:         10.96.0.10
Address:        10.96.0.10:53

** server can't find mysql.cluster.local: NXDOMAIN

** server can't find mysql.svc.cluster.local: NXDOMAIN

Name:   mysql.dev-techbull-k8s.svc.cluster.local
Address: 10.1.0.79

** server can't find mysql.cluster.local: NXDOMAIN


** server can't find mysql.svc.cluster.local: NXDOMAIN

wordpress-7d5cdcc5d9-78gf6:/# ping mysql
PING mysql (10.1.0.79): 56 data bytes
64 bytes from 10.1.0.79: seq=0 ttl=64 time=0.518 ms
64 bytes from 10.1.0.79: seq=1 ttl=64 time=0.296 ms
64 bytes from 10.1.0.79: seq=2 ttl=64 time=0.279 ms
64 bytes from 10.1.0.79: seq=3 ttl=64 time=0.104 ms
64 bytes from 10.1.0.79: seq=4 ttl=64 time=0.307 ms

名前解決、ping疎通ともに問題なし。
結局その日は結局解決することはできずに諦めて就寝。

翌朝、wp-config.phpのファイルを見直していたらDB_HOSTの値がlocalhostとなっており、これか!ということでlocalhostからmysqlへの通信に変更いたしました。

修正前 define( 'DB_HOST', 'localhost' );
修正後 define( 'DB_HOST', 'mysql' );

すると、ちゃんと接続ができました。

スクリーンショット 2025-01-02 9.24.49.png

今まで、1つのサーバにnginx、php、mysqlを導入し、Wordpressを構築していたのでlocalhostで設定しており、
その際の設定ファイルを使い回していたので確認していなかったのですが、
今回は、WordPress Pod (nginx、php)、MySQL Pod(mysql)という2つのサービス実行環境(Pod)で動作しており、Pod内はlocalhostでの通信が可能ですが、異なるPod同士だと異なるIPアドレスなのでwp-config.phpでlocalhostを指定してもmysqlに接続できないということが原因でした。

原因とは直接関係ないのですが、確認の際に以下のようにportも開いているかどうかを確認するべきでしたね。

wordpress-7d5cdcc5d9-78gf6:/# nc -zv mysql 3306 mysql 
(10.1.0.79:3306) open

まとめ

個人的にKubernetesは勉強してて楽しいなと思いますね。
Kubernetesは機能が多く、勉強すればするだけ自分の力になっている感覚とやりがいがあるのでモチベーションに繋がりますね。

次はKubernetesを学習した際によく使用したコマンドなどを自分なりにまとめて記事にしたいと思います。
あと、ファイルを使いまわす際はちゃんと確認するようにします....
では、ありがとうございました〜

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?