Helmを使用してKubernetesでMySQLを使用してWordPressを設定する方法

提供:Dev Guides
移動先:案内検索

序章

分散環境内で作業する開発者が増えるにつれ、 Kubernetes などのツールが、動的なビルド環境と本番環境でアプリケーションコンポーネントを標準化するための中心的な役割を果たしています。 アプリケーションエコシステムの複雑さが増し、Kuberbetesの人気が高まるにつれ、Kubernetesクラスター内のリソースの管理を支援するツールが不可欠になっています。

Helm は、Kubernetesのオープンソースパッケージマネージャーであり、Kubernetesクラスターでのアプリケーションのデプロイとアップグレードのプロセスを簡素化すると同時に、[ X252X]Kubernetesチャート。

このチュートリアルでは、Helmを使用してKubernetesクラスター上に WordPress をセットアップし、高可用性Webサイトを作成します。 このセットアップは、Kubernetesの本質的なスケーラビリティと高可用性の側面を活用することに加えて、Helmを介して簡素化されたアップグレードとロールバックのワークフローを提供することにより、WordPressを安全に保つのに役立ちます。

データベースコンポーネントを抽象化するために外部MySQLサーバーを使用します。これは、データベースコンポーネントが、可用性を拡張するための個別のクラスターまたはマネージドサービスの一部である可能性があるためです。 このチュートリアルで説明されている手順を完了すると、Kubernetesによって管理されるコンテナ化されたクラスタ環境内に完全に機能するWordPressがインストールされます。

前提条件

このガイドを完了するには、次のものが利用可能である必要があります。

先に進む前に、MySQLサーバーにログインできること、およびKubernetesクラスターに接続できることを確認してください。 kubectl構成ファイルに複数のクラスターが設定されている場合は、ローカルマシンまたは開発サーバーから次のコマンドを実行して、正しいクラスターに接続していることを確認する必要があります。

kubectl config get-contexts

これは出力例です。

Output
CURRENT   NAME                        CLUSTER                     AUTHINFO                          NAMESPACE
*         do-sfo2-wordpress-cluster   do-sfo2-wordpress-cluster   do-sfo2-wordpress-cluster-admin   
          minikube                    minikube                    minikube                                              

アスタリスク記号(*)は、現在デフォルトコンテキストであるクラスターを示します。 現在のコンテキストを変更する必要がある場合は、次を実行します。

kubectl config use-context context-name

これで、ガイドの残りの部分に従う準備ができました。

ステップ1—MySQLの設定

まず、WordPress専用のMySQLユーザーとデータベースを作成し、外部ホストからの接続を許可します。 これが必要なのは、WordPressのインストールがKubernetesクラスター内の別のサーバーに存在するためです。 WordPress専用のMySQLユーザーとデータベースを既に設定している場合は、次の手順にスキップできます。

MySQLサーバーから、次のコマンドを使用してMySQLにログインします。

mysql -u root -p

ソフトウェアを最初にインストールしたときに、 rootMySQLアカウントに設定したパスワードを入力するように求められます。 ログイン後、MySQLは、WordPressに必要なデータベースとユーザーを作成するために使用できるコマンドプロンプトを表示します。

注:このチュートリアルでは、wordpressという名前のデータベースと、パスワードpasswordで識別されるwordpress_userという名前のユーザーを作成します。 これらは安全でないサンプル値であり、このガイド全体でそれに応じて変更する必要があることに注意してください。


データベースを作成するには、次のステートメントを使用できます。

CREATE DATABASE wordpress;

それでは、このデータベース専用のMySQLユーザーを作成しましょう。

CREATE USER wordpress_user IDENTIFIED BY 'password';

ユーザーwordpress_userが作成されましたが、まだアクセス許可がありません。 次のコマンドは、このユーザーにローカルネットワークと外部ネットワークの両方から wordpress データベースへの管理者アクセス(すべての特権)を与えます。

GRANT ALL PRIVILEGES ON wordpress.* TO wordpress_user@'%';

アクセス許可を管理する内部MySQLテーブルを更新するには、次のステートメントを使用します。

FLUSH PRIVILEGES;

これで、次のコマンドでMySQLクライアントを終了できます。

exit;

変更が成功したことをテストするために、MySQLコマンドラインクライアントに再度ログインできます。今回は、新しいアカウントwordpress_userを使用して認証します。

mysql -u wordpress_user -p

CREATE_USERステートメントでこのMySQLユーザーを作成するときに指定したものと同じパスワードを使用する必要があります。 新しいユーザーがwordpressデータベースにアクセスできることを確認するには、次のステートメントを使用できます。

show databases;

次の出力が期待されます。

Output+--------------------+
| Database           |
+--------------------+
| information_schema |
| wordpress          |
+--------------------+
2 rows in set (0.03 sec)

wordpressデータベースが結果に含まれていることを確認したら、次のコマンドでMySQLコマンドラインクライアントを終了できます。

exit;

これで、WordPress専用のMySQLデータベースと、その中で使用する有効なアクセスクレデンシャルができました。 WordPressのインストールは別のサーバー上にあるため、外部ホストからの接続を許可するようにMySQL構成を編集する必要があります。

MySQLサーバー上にいる間に、選択したコマンドラインエディタを使用してファイル/etc/mysql/mysql.conf.d/mysqld.cnfを開きます。

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

このファイル内でbind-address設定を見つけます。 デフォルトでは、MySQLは127.0.0.1(localhost)でのみリッスンします。 外部ホストからの接続を受け入れるには、この値を0.0.0.0に変更する必要があります。 bind-address構成は次のようになります。

/etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0

これらの変更が完了したら、ファイルを保存して閉じます。 次のコマンドを使用してMySQLを再起動する必要があります。

sudo systemctl restart mysql

リモートで接続できるかどうかをテストするには、ローカルマシンまたは開発サーバーから次のコマンドを実行します。

mysql -h mysql_server_ip -u wordpress_user -p

mysql_server_ipをMySQLサーバーのIPアドレスまたはホスト名に変更することを忘れないでください。 エラーなしで接続できる場合は、次の手順に進む準備ができています。

ステップ2—WordPressをインストールする

MySQLデータベースに接続するために必要な情報が得られたので、Helmを使用してWordPressをインストールできます。

デフォルトでは、WordPressチャートは MariaDB をクラスター内の別のポッドにインストールし、WordPressデータベースとして使用します。 この動作を無効にし、外部のMySQLデータベースを使用するようにWordPressを構成します。 この構成オプションおよびその他の構成オプション(デフォルトのWordPress管理者ユーザーやパスワードなど)は、インストール時にコマンドラインパラメーターまたは別のYAML構成ファイルを介して設定できます。

物事を整理して簡単に拡張できるようにするために、構成ファイルを使用します。

ローカルマシンまたは開発サーバーから、プロジェクト設定用の新しいディレクトリを作成し、そこに移動します。

mkdir myblog-settings
cd myblog-settings

次に、選択したテキストエディタを使用して、values.yamlという名前のファイルを作成します。

nano values.yaml

このファイル内で、WordPressがデータベースに接続する方法を定義するいくつかの変数と、インストールの完了時にWordPressにログインするためのサイトと初期管理者ユーザーに関する基本情報を設定する必要があります。

WordPressHelmチャートのデフォルトのvalues.yamlファイルに基づいて構成を行います。 ブログ/サイト情報セクションには、ブログの名前や初期ユーザーの資格情報など、WordPressブログの一般的なオプションが含まれています。 このファイルのデータベース設定セクションには、リモートMySQLサーバーに接続するための設定が含まれています。 最後のセクションでは、MariaDBが無効になっています。

次の内容をvalues.yamlファイルにコピーし、強調表示された値をカスタム値に置き換えます。

values.yaml

## Blog/Site Info
wordpressUsername: sammy
wordpressPassword: password
wordpressEmail: [email protected]
wordpressFirstName: Sammy
wordpressLastName: the Shark
wordpressBlogName: Sammy's Blog!

## Database Settings
externalDatabase:
  host: mysql_server_ip
  user: wordpress_user
  password: password
  database: wordpress

## Disabling MariaDB
mariadb:
  enabled: false

次のオプションを構成しました。

  • wordpressUsername :WordPressユーザーのログイン。
  • wordpressPassword :WordPressユーザーのパスワード。
  • wordpressEmail :WordPressユーザーのメール。
  • wordpressFirstName :Wordpressユーザーの名。
  • wordpressLastName :Wordpressユーザーの姓。
  • wordpressBlogName :サイトまたはブログの名前。
  • host :MySQLサーバーのIPアドレスまたはホスト名。
  • user :MySQLユーザー。
  • password :MySQLパスワード。
  • database :MySQLデータベース名。

編集が完了したら、ファイルを保存してエディターを終了します。

すべての設定が完了したので、helmを実行してWordPressをインストールします。 次のコマンドは、helmに、values.yamlを構成ファイルとして使用して、WordPressチャートの最新の安定したリリースをmyblogという名前でインストールするように指示します。

helm install --name myblog -f values.yaml stable/wordpress

次のような出力が得られるはずです。

Output
NAME:   myblog
LAST DEPLOYED: Fri Jan 25 20:24:10 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Deployment
NAME              READY  UP-TO-DATE  AVAILABLE  AGE
myblog-wordpress  0/1    1           0          1s

==> v1/PersistentVolumeClaim
NAME              STATUS   VOLUME            CAPACITY  ACCESS MODES  STORAGECLASS  AGE
myblog-wordpress  Pending  do-block-storage  1s

==> v1/Pod(related)
NAME                               READY  STATUS   RESTARTS  AGE
myblog-wordpress-5965f49485-8zfl7  0/1    Pending  0         1s

==> v1/Secret
NAME               TYPE    DATA  AGE
myblog-externaldb  Opaque  1     1s
myblog-wordpress   Opaque  1     1s

==> v1/Service
NAME              TYPE          CLUSTER-IP     EXTERNAL-IP  PORT(S)                     AGE
myblog-wordpress  LoadBalancer  10.245.144.79  <pending>    80:31403/TCP,443:30879/TCP  1s

(...)

インストールが完了すると、 myblog-wordpress という名前のサービスがKubernetesクラスター内に作成されますが、コンテナーの準備が整い、External-IP情報が利用可能になるまでに数分かかる場合があります。 このサービスのステータスを確認し、その外部IPアドレスを取得するには、次のコマンドを実行します。

kubectl get services

次のような出力が得られるはずです。

Output
NAME               TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
kubernetes         ClusterIP      10.245.0.1      <none>          443/TCP                      20h
myblog-wordpress   LoadBalancer   10.245.144.79   203.0.113.110   80:31403/TCP,443:30879/TCP   3m40s

このコマンドは、サービスの名前や種類、これらのサービスで使用されるIPアドレスなど、クラスターで実行されているサービスに関する詳細情報を提供します。 出力からわかるように、WordPressのインストールは外部IPアドレス203.0.113.110myblog-wordpressとして提供されています。

] 注:この設定をテストするためにminikubeを使用している場合、アクセスできるようにコンテナWebサーバーを公開するためにminikube service myblog-wordpressを実行する必要がありますあなたのブラウザからそれ。


これで、WordPressのインストールが機能します。 管理インターフェースにアクセスするには、Webブラウザでkubectl get services、続いて/wp-admin の出力から取得したパブリックIPアドレスを使用します。

http://203.0.113.110/wp-admin

values.yamlファイルで定義されているクレデンシャルを使用してログインし、WordPressサイトの構成を開始する必要があります。

ステップ3—WordPressのアップグレード

WordPressは人気があるため、悪意のある悪用の標的になることが多いため、WordPressを最新の状態に保つことが重要です。 コマンドhelm upgradeを使用してHelmリリースをアップグレードできます。

現在のすべてのリリースを一覧表示するには、ローカルマシンまたは開発サーバーから次のコマンドを実行します。

helm list

次のような出力が得られるはずです。

OutputNAME        REVISION    UPDATED                     STATUS      CHART           APP VERSION NAMESPACE
myblog      1           Fri Jan 25 20:24:10 2019    DEPLOYED    wordpress-5.1.2    5.0.3      default  

出力からわかるように、現在のWordPressバージョンは5.0.3(アプリバージョン)ですが、チャートバージョンは5.1.2です。 リリースを新しいバージョンのチャートにアップグレードする場合は、最初にHelmリポジトリを次のように更新します。

helm repo update

次の出力が期待できます。

OutputHang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈ 

これで、WordPressチャートの新しいバージョンが利用可能かどうかを確認できます。

helm inspect chart stable/wordpress

次のような出力が表示されます。

OutputapiVersion: v1
appVersion: 5.1.1
description: Web publishing platform for building blogs and websites.
engine: gotpl
home: http://www.wordpress.com/
icon: https://bitnami.com/assets/stacks/wordpress/img/wordpress-stack-220x234.png
keywords:
- wordpress
- cms
- blog
- http
- web
- application
- php
maintainers:
- email: [email protected]
  name: Bitnami
name: wordpress
sources:
- https://github.com/bitnami/bitnami-docker-wordpress
version: 5.9.0

出力からわかるように、WordPress 5.1.1 (アプリバージョン)で利用可能な新しいチャート(バージョン5.9.0)があります。 WordPressリリースを最新のWordPressチャートにアップグレードする場合は、次のコマンドを実行する必要があります。

helm upgrade -f values.yaml myblog stable/wordpress

このコマンドは、helm installによって生成される出力と非常によく似た出力を生成します。 セットアップ用に定義したカスタムデータベース設定が含まれているため、WordPressチャートを初めてインストールするときに使用したものと同じ構成ファイルを提供することが重要です。

ここで、helm listを再度実行すると、リリースに関する更新情報が表示されます。

Output
NAME    REVISION    UPDATED                     STATUS      CHART           APP VERSION     NAMESPACE
myblog  2           Fri May  3 14:51:20 2019    DEPLOYED    wordpress-5.9.0    5.1.1          default  

これで、WordPressが最新バージョンのWordPressチャートに正常にアップグレードされました。

リリースのロールバック

リリースをアップグレードするたびに、そのリリースの新しいリビジョンがHelmによって作成されます。 リビジョンは、固定のチェックポイントを、期待どおりに機能しない場合に戻ることができる場所に設定します。 比較して元に戻すことができる変更の履歴を作成するため、Gitのcommitに似ています。 アップグレードプロセス中に問題が発生した場合は、helm rollbackコマンドを使用して、特定のHelmリリースの以前のリビジョンにいつでもロールバックできます。

helm rollback release-name revision-number

たとえば、アップグレードを元に戻し、WordPressリリースを最初のバージョンにロールバックする場合は、次を使用します。

helm rollback myblog 1

これにより、WordPressのインストールが最初のリリースにロールバックされます。 ロールバックが成功したことを示す次の出力が表示されます。

Output
Rollback was a success! Happy Helming!

helm listを再度実行すると、WordPressが5.0.3、チャートバージョン5.1.2にダウングレードされたことを示すはずです。

Output
NAME        REVISION    UPDATED                     STATUS      CHART           APP VERSION NAMESPACE
myblog      3       Mon Jan 28 22:02:42 2019    DEPLOYED    wordpress-5.1.2    5.0.3          default  

リリースをロールバックすると、ロールバックのターゲットリビジョンに基づいて、実際に新しいリビジョンが作成されることに注意してください。 myblogという名前のWordPressリリースは、リビジョン番号oneに基づいたリビジョン番号threeになりました。

結論

このガイドでは、コマンドラインツールHelmを使用して、外部MySQLサーバーとともにWordPressをKubernetesクラスターにインストールしました。 また、WordPressリリースを新しいチャートバージョンにアップグレードする方法と、アップグレードプロセス全体で問題が発生した場合にリリースをロールバックする方法についても学びました。

追加の手順として、 Cert-Managerを使用したNginxIngressのセットアップを検討して、名前ベースの仮想ホスティングを有効にし、WordPressサイトのSSL証明書を構成することを検討してください。 このガイドで使用したWordPressチャートの推奨生産設定も確認する必要があります。

KubernetesとHelmの詳細については、コミュニティページのKubernetesセクションをご覧ください。