Helmを使用してKubernetes上のMySQLでWordPressをセットアップする方法

前書き

より多くの開発者が分散環境内で作業するにつれて、https://kubernetes.io/ [Kubernetes]のようなツールが、動的なビルドおよびプロダクション環境全体でアプリケーションコンポーネントを標準化する中心となりました。 アプリケーションエコシステムの複雑化とKuberbetesの人気の高まりに伴い、Kubernetesクラスター内のリソースの管理に役立つツールが不可欠になっています。

HelmはKubernetesのオープンソースパッケージマネージャーで、Kubernetesクラスターでのアプリケーションのデプロイとアップグレードのプロセスを簡素化すると同時に、すぐにインストールできるアプリケーションを見つけて共有する方法も提供します。 _Kubernetes Charts_としてパッケージ化されています。

このチュートリアルでは、可用性の高いWebサイトを作成するために、Hubを使用してKubernetesクラスターの上にhttps://wordpress.com [WordPress]を設定します。 Kubernetesの本質的なスケーラビリティと高可用性の側面を活用することに加えて、このセットアップは、Helmを介して単純化されたアップグレードおよびロールバックワークフローを提供することにより、WordPressの安全性を維持するのに役立ちます。

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

前提条件

このガイドを完了するには、次のものが必要です。

  • https://kubernetes.io/docs/reference/access-authn-authz/rbac/ [ロールベースのアクセス制御](RBAC)が有効になっているKubernetes 1.10+クラスター。

  • ローカルマシンまたは開発サーバーにインストールされた、クラスターに接続するように設定された `+ kubectl +`コマンドラインツール。 この設定方法については、https://kubernetes.io/docs/tasks/tools/install-kubectl/ [Kubernetesの公式ドキュメント]を参照してください。

  • ローカルマシンまたは開発サーバーにインストールされたhttps://helm.sh/[Helm]パッケージマネージャー、およびクラスターにインストールされたTiller(このチュートリアルの説明:https://www.digitalocean.com/community/tutorials/ヘルムパッケージマネージャーを使用してKubernetesクラスターにソフトウェアをインストールする方法[ヘルムパッケージマネージャーを使用してKubernetesクラスターにソフトウェアをインストールする方法]。

  • SSHアクセスを備えた外部MySQLサーバー、および* root * MySQLパスワード。 これを設定するには、https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-18-04 [インストール方法Ubuntu 18.04上のMySQL]。

次に進む前に、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

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

kubectl config use-context

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

ステップ1-MySQLの構成

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

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

mysql -u root -p

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

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

CREATE DATABASE ;

次に、このデータベース専用のMySQLユーザーを作成しましょう。

CREATE USER  IDENTIFIED BY '';

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

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

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

FLUSH PRIVILEGES;

これで、MySQLクライアントを終了できます:

exit;

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

mysql -u  -p

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

show databases;

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

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

`++`データベースが結果に含まれていることを確認したら、次のコマンドで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            =

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

sudo systemctl restart mysql

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

mysql -h  -u  -p

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

ステップ2-WordPressのインストール

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

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

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

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

mkdir myblog-settings
cd myblog-settings

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

nano values.yaml

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

WordPress Helm chartのデフォルトの `+ values.yaml +`ファイルに基づいて設定を行います。 * Blog / Site Info セクションには、ブログの名前や最初のユーザー資格情報など、WordPressブログの一般的なオプションが含まれています。 このファイルの Database Settings *セクションには、リモートMySQLサーバーに接続するための設定が含まれています。 MariaDBは最後のセクションで無効になっています。

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

values.yaml

## Blog/Site Info
wordpressUsername:
wordpressPassword:
wordpressEmail:
wordpressFirstName:
wordpressLastName:
wordpressBlogName:

## Database Settings
externalDatabase:
 host:
 user:
 password:
 database:

## 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をインストールします。 次のコマンドは、設定ファイルとして「 values.yaml 」を使用して、「+」という名前で最新の安定版のWordPressチャートをインストールするように「+ helm +」に指示します。

helm install --name  -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
  LoadBalancer   10.245.144.79      80:31403/TCP,443:30879/TCP   3m40s

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

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

http:///wp-admin

image:http://assets.digitalocean.com/articles/wordpress_kubernetes/admin_login.png [ログイン画面]

ログインしてWordPressサイトの設定を開始するには、 `+ values.yaml +`ファイルで定義された資格情報を使用する必要があります。

ステップ3-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-        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:
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:

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

helm upgrade -f values.yaml  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-            default

WordPressを最新バージョンのWordPressチャートに正常にアップグレードしました。

リリースのロールバック

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

helm rollback

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

helm rollback myblog

これにより、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-            default

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

結論

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

追加の手順として、https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes [Nginxのセットアップ名前ベースの仮想ホスティングを有効にし、WordPressサイトのSSL証明書を設定するために、Cert-Managerを使用したイングレス]。 このガイドで使用したWordPressチャートについては、https://github.com/helm/charts/tree/master/stable/wordpress#production-and-horizo​​ntal-scaling [推奨される制作設定]も確認する必要があります。

KubernetesとHelmの詳細については、コミュニティページのhttps://www.digitalocean.com/community/tags/kubernetes[Kubernetes]セクションをご覧ください。

前の投稿:Ubuntu 18.04にNginxをインストールする方法
次の投稿:Python 3でリクエストとBeautiful Soupを使用してWebデータを操作する方法