Helmを使用してKubernetesでMySQLを使用してWordPressを設定する方法
序章
分散環境内で作業する開発者が増えるにつれ、 Kubernetes などのツールが、動的なビルド環境と本番環境でアプリケーションコンポーネントを標準化するための中心的な役割を果たしています。 アプリケーションエコシステムの複雑さが増し、Kuberbetesの人気が高まるにつれ、Kubernetesクラスター内のリソースの管理を支援するツールが不可欠になっています。
Helm は、Kubernetesのオープンソースパッケージマネージャーであり、Kubernetesクラスターでのアプリケーションのデプロイとアップグレードのプロセスを簡素化すると同時に、[ X252X]Kubernetesチャート。
このチュートリアルでは、Helmを使用してKubernetesクラスター上に WordPress をセットアップし、高可用性Webサイトを作成します。 このセットアップは、Kubernetesの本質的なスケーラビリティと高可用性の側面を活用することに加えて、Helmを介して簡素化されたアップグレードとロールバックのワークフローを提供することにより、WordPressを安全に保つのに役立ちます。
データベースコンポーネントを抽象化するために外部MySQLサーバーを使用します。これは、データベースコンポーネントが、可用性を拡張するための個別のクラスターまたはマネージドサービスの一部である可能性があるためです。 このチュートリアルで説明されている手順を完了すると、Kubernetesによって管理されるコンテナ化されたクラスタ環境内に完全に機能するWordPressがインストールされます。
前提条件
このガイドを完了するには、次のものが利用可能である必要があります。
- ロールベースのアクセス制御(RBAC)が有効になっているKubernetes1.10+クラスター。
- The
kubectl
ローカルマシンまたは開発サーバーにインストールされ、クラスターに接続するように構成されたコマンドラインツール。 これを設定する方法については、公式のKubernetesドキュメントをご覧ください。 - このチュートリアルで説明されているように、ローカルマシンまたは開発サーバーにインストールされた Helm パッケージマネージャー、およびクラスターにインストールされたTiller: HelmPackageManagerを使用してKubernetesクラスターにソフトウェアをインストールする方法 。
- SSHアクセスとrootMySQLパスワードを備えた外部MySQLサーバー。 これを設定するには、次のようなMySQLチュートリアルのいずれかに従うことができます: Ubuntu18.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
アスタリスク記号(*)は、現在デフォルトコンテキストであるクラスターを示します。 現在のコンテキストを変更する必要がある場合は、次を実行します。
- kubectl config use-context context-name
これで、ガイドの残りの部分に従う準備ができました。
ステップ1—MySQLの設定
まず、WordPress専用のMySQLユーザーとデータベースを作成し、外部ホストからの接続を許可します。 これが必要なのは、WordPressのインストールがKubernetesクラスター内の別のサーバーに存在するためです。 WordPress専用のMySQLユーザーとデータベースを既に設定している場合は、次の手順にスキップできます。
MySQLサーバーから、次のコマンドを使用してMySQLにログインします。
- mysql -u root -p
ソフトウェアを最初にインストールしたときに、 rootMySQLアカウントに設定したパスワードを入力するように求められます。 ログイン後、MySQLは、WordPressに必要なデータベースとユーザーを作成するために使用できるコマンドプロンプトを表示します。
注:このチュートリアルでは、という名前のデータベースを作成します wordpress
およびという名前のユーザー wordpress_user
、パスワードで識別 password
. これらは安全でないサンプル値であり、このガイド全体でそれに応じて変更する必要があることに注意してください。
データベースを作成するには、次のステートメントを使用できます。
- 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
このMySQLユーザーを作成するときに指定したものと同じパスワードを使用する必要があります CREATE_USER
声明。 新しいユーザーがにアクセスできることを確認するには 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
(ローカルホスト)。 外部ホストからの接続を受け入れるには、この値を次のように変更する必要があります。 0.0.0.0
. これはあなたの方法です bind-address
構成は次のようになります。
# 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にログインするためのサイトと初期管理者ユーザーに関する基本情報を設定する必要があります。
デフォルトに基づいて構成を行います values.yaml
WordPressHelmチャートからのファイル。 ブログ/サイト情報セクションには、ブログの名前や初期ユーザー資格情報など、WordPressブログの一般的なオプションが含まれています。 このファイルのデータベース設定セクションには、リモートMySQLサーバーに接続するための設定が含まれています。 最後のセクションでは、MariaDBが無効になっています。
次の内容をにコピーします 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
WordPressチャートの最新の安定したリリースを名前でインストールします myblog
、を使用して values.yaml
構成ファイルとして:
- 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のインストールは次のように提供されています myblog-wordpress
外部IPアドレス 203.0.113.110
.
] 注:を使用している場合 minikube
この設定をテストするには、実行する必要があります minikube service myblog-wordpress
ブラウザからアクセスできるようにコンテナWebサーバーを公開するため。
これで、WordPressのインストールが機能します。 管理インターフェースにアクセスするには、の出力から取得したパブリックIPアドレスを使用します。 kubectl get services
、 に続く /wp-admin
Webブラウザで:
http://203.0.113.110/wp-admin
で定義された資格情報を使用する必要があります values.yaml
ログインしてWordPressサイトの設定を開始するファイル。
ステップ3—WordPressのアップグレード
WordPressは人気があるため、悪意のある悪用の標的になることが多いため、WordPressを最新の状態に保つことが重要です。 コマンドでHelmリリースをアップグレードできます helm upgrade
.
現在のすべてのリリースを一覧表示するには、ローカルマシンまたは開発サーバーから次のコマンドを実行します。
- 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リリースの以前のリビジョンにいつでもロールバックできます。 helm rollback
指図:
- 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
リリースをロールバックすると、ロールバックのターゲットリビジョンに基づいて、実際に新しいリビジョンが作成されることに注意してください。 私たちのWordPressリリースという名前 myblog
現在、リビジョン番号 three であり、リビジョン番号oneに基づいています。
結論
このガイドでは、コマンドラインツールHelmを使用して、外部MySQLサーバーとともにWordPressをKubernetesクラスターにインストールしました。 また、WordPressリリースを新しいチャートバージョンにアップグレードする方法と、アップグレードプロセス全体で問題が発生した場合にリリースをロールバックする方法についても学びました。
追加の手順として、 Cert-Managerを使用したNginxIngressのセットアップを検討して、名前ベースの仮想ホスティングを有効にし、WordPressサイトのSSL証明書を構成することを検討してください。 このガイドで使用したWordPressチャートの推奨生産設定も確認する必要があります。
KubernetesとHelmの詳細については、コミュニティページのKubernetesセクションをご覧ください。