序章

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

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

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

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

前提条件

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

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

  1. 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

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

  1. kubectl config use-context context-name

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

ステップ1—MySQLの設定

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

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

  1. mysql -u root -p

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

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

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

  1. CREATE DATABASE wordpress;

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

  1. CREATE USER wordpress_user IDENTIFIED BY 'password';

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

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

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

  1. FLUSH PRIVILEGES;

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

  1. exit;

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

  1. mysql -u wordpress_user -p

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

  1. show databases;

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

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

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

  1. exit;

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

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

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

を見つけます bind-address このファイル内の設定。 デフォルトでは、MySQLはでのみリッスンします 127.0.0.1 (ローカルホスト)。 外部ホストからの接続を受け入れるには、この値を次のように変更する必要があります。 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を再起動する必要があります。

  1. sudo systemctl restart mysql

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

  1. 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構成ファイルを介して設定できます。

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

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

  1. mkdir myblog-settings
  2. cd myblog-settings

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

  1. nano values.yaml

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

デフォルトに基づいて構成を行います values.yaml WordPressHelmチャートからのファイル。 ブログ/サイト情報セクションには、ブログの名前や初期ユーザー資格情報など、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 WordPressチャートの最新の安定したリリースを名前でインストールします myblog、を使用して values.yaml 構成ファイルとして:

  1. 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アドレスを取得するには、次のコマンドを実行します。

  1. 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.

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

  1. helm list

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

Output
NAME 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リポジトリを次のように更新します。

  1. helm repo update

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

Output
Hang 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チャートの新しいバージョンが利用可能かどうかを確認できます。

  1. helm inspect chart stable/wordpress

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

Output
apiVersion: 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チャートにアップグレードする場合は、次のコマンドを実行する必要があります。

  1. 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 指図:

  1. helm rollback release-name revision-number

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

  1. 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セクションをご覧ください。