前書き
より多くの開発者が分散環境内で作業するにつれて、Kubernetesのようなツールは、動的なビルド環境と本番環境全体でアプリケーションコンポーネントを標準化するための中心になりました。 アプリケーションエコシステムの複雑化とKuberbetesの人気の高まりに伴い、Kubernetesクラスター内のリソースの管理に役立つツールが不可欠になっています。
Helmは、Kubernetesのオープンソースパッケージマネージャーであり、Kubernetesクラスターでのアプリケーションのデプロイとアップグレードのプロセスを簡素化すると同時に、%(t1としてパッケージ化されているすぐにインストールできるアプリケーションを見つけて共有する方法を提供します。 )s。
このチュートリアルでは、Helmを使用してKubernetesクラスターの上にWordPressを設定し、可用性の高いWebサイトを作成します。 Kubernetesの本質的なスケーラビリティと高可用性の側面を活用することに加えて、このセットアップは、Helmを介して単純化されたアップグレードおよびロールバックワークフローを提供することにより、WordPressの安全性を維持するのに役立ちます。
データベースコンポーネントを抽象化するために外部MySQLサーバーを使用します。これは、可用性を拡張するための別個のクラスターまたはマネージドサービスの一部である可能性があるためです。 このチュートリアルで説明されている手順を完了すると、Kubernetesが管理するコンテナー化されたクラスター環境内に完全に機能するWordPressインストールができます。
前提条件
このガイドを完了するには、次のものが必要です。
-
role-based access control(RBAC)が有効になっているKubernetes1.10 +クラスター。
-
ローカルマシンまたは開発サーバーにインストールされ、クラスターに接続するように構成された
kubectl
コマンドラインツール。 これを設定する方法については、official Kubernetes documentationを参照してください。 -
このチュートリアルで説明されているように、Helmパッケージマネージャーがローカルマシンまたは開発サーバーにインストールされ、Tillerがクラスターにインストールされています:How To Install Software on Kubernetes Clusters with the Helm Package Manager。
-
SSHアクセスを備えた外部MySQLサーバー、およびrootMySQLパスワード。 これを設定するには、How To Install MySQL on Ubuntu 18.04などのMySQLチュートリアルの1つに従うことができます。
次に進む前に、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 context-name
これで、残りのガイドに従う準備ができました。
[[step-1 -—- configuring-mysql]] ==ステップ1—MySQLの構成
最初に、専用のMySQLユーザーとWordPress用のデータベースを作成し、外部ホストからの接続を許可します。 これは、WordPressインストールがKubernetesクラスター内の別のサーバーに存在するために必要です。 WordPress専用のMySQLユーザーとデータベースが既に設定されている場合は、次のステップにスキップできます。
MySQLサーバーから、次のコマンドを使用してMySQLにログインします。
mysql -u root -p
ソフトウェアを最初にインストールしたときに、rootMySQLアカウントに設定したパスワードを入力するように求められます。 ログイン後、MySQLは、WordPressに必要なデータベースとユーザーの作成に使用できるコマンドプロンプトを表示します。
Note:このチュートリアルでは、wordpress
という名前のデータベースと、パスワードpassword
で識別されるwordpress_user
という名前のユーザーを作成します。 これらは安全でないサンプル値であり、このガイド全体でそれに応じてshould modifyすることに注意してください。
データベースを作成するには、次のステートメントを使用できます。
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アドレスまたはホスト名に変更することを忘れないでください。 エラーなしで接続できる場合は、次のステップに進む準備ができています。
[[step-2 -—- installing-wordpress]] ==ステップ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にログインするための初期管理ユーザーについても設定する必要があります。
構成は、WordPress Helm chartのデフォルトのvalues.yaml
ファイルに基づいて行います。 Blog/Site Infoセクションには、ブログの名前や初期ユーザー資格情報など、WordPressブログの一般的なオプションが含まれています。 このファイルのDatabase Settingsセクションには、リモート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をインストールします。 次のコマンドは、values.yaml
を構成ファイルとして使用して、myblog
という名前でWordPressチャートの最新の安定版リリースをインストールするようにhelm
に指示します。
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 80:31403/TCP,443:30879/TCP 1s
(...)
インストールが完了すると、Kubernetesクラスター内にmyblog-wordpressという名前のサービスが作成されますが、コンテナーの準備が整い、External-IP
情報が利用可能になるまでに数分かかる場合があります。 このサービスのステータスを確認し、その外部IPアドレスを取得するには、次を実行します。
kubectl get services
次のような出力が得られるはずです。
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.245.0.1 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.110
でmyblog-wordpress
として提供されています。
Note:minikube
を使用してこの設定をテストしている場合は、ブラウザからアクセスできるようにコンテナWebサーバーを公開するためにminikube service myblog-wordpress
を実行する必要があります。
これで、WordPressインストールが動作可能になりました。 管理インターフェイスにアクセスするには、Webブラウザでkubectl get services
の出力に続いて/wp-admin
から取得したパブリックIPアドレスを使用します。
http://203.0.113.110/wp-admin
values.yaml
ファイルで定義されている資格情報を使用してログインし、WordPressサイトの構成を開始する必要があります。
[[step-3 -—- upgrading-wordpress]] ==ステップ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-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
出力からわかるように、WordPress5.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チャートに正常にアップグレードしました。
リリースのロールバック
リリースをアップグレードするたびに、そのリリースの新しいrevisionがHelmによって作成されます。 リビジョンは、固定のcheckpointを、物事が期待どおりに機能しない場合に戻ることができる場所に設定します。 比較して元に戻すことができる変更の履歴を作成するため、Gitのcommitに似ています。 アップグレードプロセス中に問題が発生した場合は、helm rollback
コマンドを使用して、特定のHelmリリースの以前のリビジョンにいつでもロールバックできます。
helm rollback release-name revision-number
たとえば、アップグレードを元に戻し、WordPressリリースをfirstバージョンにロールバックする場合は、次を使用します。
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を使用して、Kubernetesクラスター上の外部MySQLサーバーにWordPressをインストールしました。 また、WordPressリリースを新しいチャートバージョンにアップグレードする方法、およびアップグレードプロセス全体で問題が発生した場合にリリースをロールバックする方法も学びました。
追加の手順として、名前ベースの仮想ホスティングを有効にし、WordPressサイトのSSL証明書を構成するために、setting up Nginx Ingress with Cert-Managerを検討することができます。 このガイドで使用したWordPressチャートのrecommended production settingsも確認する必要があります。
KubernetesとHelmについて詳しく知りたい場合は、コミュニティページのKubernetesセクションを確認してください。