Skip to content
This repository has been archived by the owner on Oct 1, 2024. It is now read-only.

Latest commit

 

History

History
252 lines (176 loc) · 13.7 KB

File metadata and controls

252 lines (176 loc) · 13.7 KB

Build Status

他の言語で表示: English / 한국어 / português.

スケーラブルな WordPress 実装を Kubernetes クラスター上にデプロイする

このチュートリアルでは、Kubernetesクラスタの全機能を紹介し、世界で最も人気のあるWebサイトフレームワークを世界で最も人気のあるコンテナ・オーケストレーションプラットフォーム上に展開する方法を紹介します。KubernetesクラスタでWordPressをホストするための完全なロードマップを提供します。各コンポーネントは別々のコンテナまたはコンテナのグループで実行されます。

Wordpressは典型的な多層アプリケーションを表し、各コンポーネントはそれぞれのコンテナを持ちます。WordPressコンテナはフロントエンド層となり、MySQLコンテナはWordPressのデータベース/バックエンド層になります。

Kubernetesへのデプロイに加えて、フロントのWordPress層をどのように拡張できるか、そしてMySQLをIBM Cloudからのサービスとして仕様してWordPressフロントエンドで使用する方法も説明します。

kube-wordpress

Included Components

前提条件

ローカルテスト用のMinikubeや、IBM Cloud Kubernetes ServiceまたはIBM Cloud Private のいずれかでKubernetes Clusterを作成します。このレポジトリのコードはKubernetes Cluster from IBM Cloud Container Service上でTravis CIを使用して定期的にテストされています。

目的

このシナリオでは、以下の作業について説明します:

  • 永続ディスクを定義するためローカル永続ボリュームを作成
  • 機密データを保護するためのシークレットを作成
  • WordPressフロントエンドのポットを1つ以上作成してデプロイ
  • MySQLデータベースを作成してデプロイします。(コンテナ内、またはバックエンドとしてIBM CloudのMySQLを使用)

Deploy to IBM Cloud

WordPressを直接IBM Cloudへデプロイしたい場合は、下のDeploy to IBM CloudボタンをクリックしてWordPressサンプルをデプロイするためのIBM Cloud DepOps サービスツールチェインとパイプラインを作成します。それ以外の場合は、手順へジャンプします

Create Toolchain

ツールチェインとパイプラインを完成させるには、 Toolchain instructions の指示に従ってください。

手順

  1. MySQL シークレットの設定
  2. ローカル永続ボリュームの作成
  3. WordPressとMySQLのサービス/デプロイメントの作成と配布
  1. 外部のWordPressリンクにアクセスする
  2. WordPressを使用する

1. MySQL シークレットの設定

Quickstart option: このレポジトリ内で bash scripts/quickstart.shを実行します。

同じディレクトリにpassword.txtという名前の新しいファイルを作成し、希望のMySQLパスワードをpassword.txtの中に入れます。 (ASCII文字を含む任意の文字列).

password.txtの末尾に改行が無いことを確認する必要があります。改行を削除するには、次のコマンドを使用します。

tr -d '\n' <password.txt >.strippedpassword.txt && mv .strippedpassword.txt password.txt

2. ローカル永続ボリュームの作成

Kubernetesポッドのライフサイクルを超えてデータを保存するには、MySQLおよびWordPressアプリケーションが接続するための永続的なボリュームを作成する必要があります。

IBM Cloud Kubernetes Service "ライト"クラスタ

次のコマンドを実行して、ローカル永続ボリュームを手動で作成します

kubectl create -f local-volumes.yaml

IBM Cloud Kubernetes Service "有料"クラスタ または Minikube

MySQLおよびWordPressアプリケーションがデプロイされると、永続ボリュームが動的に作成されます。この手順は不要です

3. WordPressとMySQLのサービス/デプロイメントの作成と配布

3.1 コンテナ内でMySQLを使用する

Note: IBM Cloud Compose-MySQLをバックエンドとして使用したい場合は、バックエンドとしてIBM Cloud MySQLを使用するを参照してください

永続ボリュームをクラスタのローカルストレージにインストールします。その後、MySQLとWordPressのためのシークレットとサービスを作成します

kubectl create secret generic mysql-pass --from-file=password.txt
kubectl create -f mysql-deployment.yaml
kubectl create -f wordpress-deployment.yaml

すべてのポッドが実行されたら、次のコマンドを実行してポッド名を確認します。

kubectl get pods

これにより、Kubernetesクラスタからのポッドのリストが返されます

NAME                               READY     STATUS    RESTARTS   AGE
wordpress-3772071710-58mmd         1/1       Running   0          17s
wordpress-mysql-2569670970-bd07b   1/1       Running   0          1m

それでは、外部のWordPressリンクにアクセスするへ進んでください

3.2 バックエンドとしてIBM Cloud MySQLを使用する

IBM CloudでCompose for MySQLをプロビジョニングします https://cloud.ibm.com/catalog/services/compose-for-mysql

サービス認証情報に移動して、認証情報を確認してください。 MySQLのホスト名、ポート番号、ユーザー、パスワードがあなたの認証情報URIの下にあり、以下のように見えるはずです

mysql

wordpress-deployment.yamlファイルを編集し、WORDPRESS_DB_HOSTの値をMySQLのホスト名とポート番号に変更し(例: value: <hostname>:<port>)、 WORDPRESS_DB_USERの値をMySQLパスワードに変更します

環境変数は次のようになります

    spec:
      containers:
      - image: wordpress:4.7.3-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: sl-us-dal-9-portal.7.dblayer.com:22412
        - name: WORDPRESS_DB_USER
          value: admin
        - name: WORDPRESS_DB_PASSWORD
          value: XMRXTOXTDWOOPXEE

wordpress-deployment.yamlを変更したら、次のコマンドを実行してWordPressをデプロイします

kubectl create -f wordpress-deployment.yaml

すべてのポッドが実行されたら、次のコマンドを実行してポッド名を確認します

kubectl get pods

これにより、Kubernetesクラスタからポッドのリストが返されます

NAME                               READY     STATUS    RESTARTS   AGE
wordpress-3772071710-58mmd         1/1       Running   0          17s

4. 外部のWordPressリンクにアクセスする

有料クラスタがある場合は、NodePortの代わりにLoadBalancerを使用することができます。

kubectl edit services wordpress

specの下で、 type: NodePorttype: LoadBalancer に変更してください

Note: YAMLファイルを編集したあとに、service "wordpress" editedが表示されていることを確認してください。これはYAMLファイルが入力ミスや接続エラーなしで正常に編集されたことを意味します。

クラスタのIPアドレスを取得するには

$ bx cs workers <your_cluster_name>
OK
ID                                                 Public IP        Private IP     Machine Type   State    Status
kube-hou02-pa817264f1244245d38c4de72fffd527ca-w1   169.47.220.142   10.10.10.57    free           normal   Ready

NodePort番号を取得するには、次のコマンドを実行する必要があります。

$ kubectl get svc wordpress
NAME        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
wordpress   10.10.10.57   <nodes>       80:30180/TCP   2m

おめでとうございます。今あなたはあなたのWordPressサイトへアクセスするためのリンクhttp://[IP]:[port number] を使用することができるようになりました。

Note: 上記の例では、リンクは次のようになります http://169.47.220.142:30180

Kubernetes UIでdeploymentのステータスを確認することができます。kubectl proxyを実行し、URL 'http://127.0.0.1:8001/ui' に移動して、WordPressコンテナの準備が整ったことを確認します。

Kubernetes Status Page

Note: ポッドが完全に機能するまで最大5分かかります。

(Optional) クラスタ内にさらにリソースがあり、WordPress Webサイトをスケールアップしたい場合は、次のコマンドを実行して現在のdeploymentsを確認できます。

$ kubectl get deployments
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
wordpress         1         1         1            1           23h
wordpress-mysql   1         1         1            1           23h

これで、次のコマンドを実行してWordPressフロントエンドをスケールアップできます。

$ kubectl scale deployments/wordpress --replicas=2
deployment "wordpress" scaled
$ kubectl get deployments
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
wordpress         2         2         2            2           23h
wordpress-mysql   1         1         1            1           23h

ご覧のとおり、WordPressフロントエンドを実行している2つのポッドがあります。

Note: 無料クラスタユーザーの場合、無料利用枠のユーザーには限られたリソースしかないため、スケールアップは最大10個のポッドまでとすることをおすすめします。

5. WordPressを使用する

WordPressが起動しました。新しいユーザーとして登録して、WordPressをインストールすることができます。 wordpress home Page

WordPresをインストール後、新しいコメントを投稿することができます。

wordpress comment Page

トラブルシューティング

誤って改行付きのパスワードを作成した場合、MySQLサービスを認証することはできません。現在のシークレットを削除するには

kubectl delete secret mysql-pass

サービス、deployments、永続ボリューム要求を削除したい場合は、次のコマンドで実行できます

kubectl delete deployment,service,pvc -l app=wordpress

永続ボリュームを削除したい場合は、次のコマンドで実行できます

kubectl delete -f local-volumes.yaml

WordPressの動作に時間がかかる場合、ログを調べることでWordPressのデバックすることができます。

kubectl get pods # WordPressのポッド名を取得する
kubectl logs [wordpress pod name]

References

ライセンス

このコードパターンは、Apache Software License, Version 2の元でライセンスされています。このコードパターン内で呼び出される個別のサードパーティコードオブジェクトは、独自の個別ライセンスに従って、それぞれのプロバイダによってライセンスされます。コントリビュートの対象はDeveloper Certificate of Origin, Version 1.1 (DCO)Apache Software License, Version 2です。

Apache Software License (ASL) FAQ