|
| 1 | +[](https://travis-ci.org/IBM/Scalable-WordPress-deployment-on-Kubernetes) |
| 2 | + |
| 3 | +*他の言語で表示: [English](README.md) / [한국어](README-ko.md) / [português](README-po.md).* |
| 4 | + |
| 5 | +# スケーラブルな WordPress 実装を Kubernetes クラスター上にデプロイする |
| 6 | + |
| 7 | +このチュートリアルでは、Kubernetesクラスタの全機能を紹介し、世界で最も人気のあるWebサイトフレームワークを世界で最も人気のあるコンテナ・オーケストレーションプラットフォーム上に展開する方法を紹介します。KubernetesクラスタでWordPressをホストするための完全なロードマップを提供します。各コンポーネントは別々のコンテナまたはコンテナのグループで実行されます。 |
| 8 | + |
| 9 | +Wordpressは典型的な多層アプリケーションを表し、各コンポーネントはそれぞれのコンテナを持ちます。WordPressコンテナはフロントエンド層となり、MySQLコンテナはWordPressのデータベース/バックエンド層になります。 |
| 10 | + |
| 11 | +Kubernetesへのデプロイに加えて、フロントのWordPress層をどのように拡張できるか、そしてMySQLをIBM Cloudからのサービスとして仕様してWordPressフロントエンドで使用する方法も説明します。 |
| 12 | + |
| 13 | + |
| 14 | + |
| 15 | +## Included Components |
| 16 | +- [WordPress (最新版)](https://hub.docker.com/_/wordpress/) |
| 17 | +- [MySQL (5.6)](https://hub.docker.com/_/mysql/) |
| 18 | +- [Kubernetes Clusters](https://cloud.ibm.com/docs/containers/cs_ov.html#cs_ov) |
| 19 | +- [IBM Cloud Compose for MySQL](https://cloud.ibm.com/catalog/services/compose-for-mysql) |
| 20 | +- [IBM Cloud DevOps Toolchain Service](https://cloud.ibm.com/catalog/services/continuous-delivery) |
| 21 | +- [IBM Cloud Kubernetes Service](https://cloud.ibm.com/catalog?taxonomyNavigation=apps&category=containers) |
| 22 | + |
| 23 | +## 前提条件 |
| 24 | + |
| 25 | +ローカルテスト用の[Minikube](https://kubernetes.io/docs/setup/minikube/)や、[IBM Cloud Kubernetes Service](https://github.com/IBM/container-journey-template)または[IBM Cloud Private](https://github.com/IBM/deploy-ibm-cloud-private/blob/master/README.md) のいずれかでKubernetes Clusterを作成します。このレポジトリのコードは[Kubernetes Cluster from IBM Cloud Container Service](https://cloud.ibm.com/docs/containers/cs_ov.html#cs_ov)上でTravis CIを使用して定期的にテストされています。 |
| 26 | + |
| 27 | +## 目的 |
| 28 | + |
| 29 | +このシナリオでは、以下の作業について説明します: |
| 30 | + |
| 31 | +- 永続ディスクを定義するためローカル永続ボリュームを作成 |
| 32 | +- 機密データを保護するためのシークレットを作成 |
| 33 | +- WordPressフロントエンドのポットを1つ以上作成してデプロイ |
| 34 | +- MySQLデータベースを作成してデプロイします。(コンテナ内、またはバックエンドとしてIBM CloudのMySQLを使用) |
| 35 | + |
| 36 | +## Deploy to IBM Cloud |
| 37 | +WordPressを直接IBM Cloudへデプロイしたい場合は、下の`Deploy to IBM Cloud`ボタンをクリックしてWordPressサンプルをデプロイするためのIBM Cloud DepOps サービスツールチェインとパイプラインを作成します。それ以外の場合は、[手順](##手順)へジャンプします |
| 38 | + |
| 39 | +[](https://cloud.ibm.com/devops/getting-started) |
| 40 | + |
| 41 | +ツールチェインとパイプラインを完成させるには、 [Toolchain instructions](https://github.com/IBM/container-journey-template/blob/master/Toolchain_Instructions_new.md) の指示に従ってください。 |
| 42 | + |
| 43 | +## 手順 |
| 44 | +1. [MySQL シークレットの設定](#1-mysql-シークレットの設定) |
| 45 | +2. [ローカル永続ボリュームの作成](#2-ローカル永続ボリュームの作成) |
| 46 | +3. [WordPressとMySQLのサービス/デプロイメントの作成と配布](#3-WordPressとMySQLのサービス/デプロイメントの作成と配布) |
| 47 | + - 3.1 [コンテナ内でMySQLを使用する](#31-コンテナ内でMySQLを使用する) |
| 48 | + - 3.2 [バックエンドとしてIBM Cloud MySQLを使用する](#32-バックエンドとしてIBM-Cloud-MySQLを使用する) |
| 49 | +4. [外部のWordPressリンクにアクセする](#4-外部のWordPressリンクにアクセする) |
| 50 | +5. [WordPressを使用する](#5-WordPressを使用する) |
| 51 | + |
| 52 | +# 1. MySQL シークレットの設定 |
| 53 | + |
| 54 | +> *Quickstart option:* このレポジトリ内で `bash scripts/quickstart.sh`を実行します。 |
| 55 | +
|
| 56 | +同じディレクトリに`password.txt`という名前の新しいファイルを作成し、希望のMySQLパスワードを`password.txt`の中に入れます。 (ASCII文字を含む任意の文字列). |
| 57 | + |
| 58 | + |
| 59 | +`password.txt`の末尾に改行が無いことを確認する必要があります。改行を削除するには、次のコマンドを使用します。 |
| 60 | +```bash |
| 61 | +tr -d '\n' <password.txt >.strippedpassword.txt && mv .strippedpassword.txt password.txt |
| 62 | +``` |
| 63 | + |
| 64 | +# 2. ローカル永続ボリュームの作成 |
| 65 | +Kubernetesポッドのライフサイクルを超えてデータを保存するには、MySQLおよびWordPressアプリケーションが接続するための永続的なボリュームを作成する必要があります。 |
| 66 | + |
| 67 | +#### IBM Cloud Kubernetes Service "ライト"クラスタ |
| 68 | +次のコマンドを実行して、ローカル永続ボリュームを手動で作成します |
| 69 | +```bash |
| 70 | +kubectl create -f local-volumes.yaml |
| 71 | +``` |
| 72 | +#### IBM Cloud Kubernetes Service "有料"クラスタ または Minikube |
| 73 | +MySQLおよびWordPressアプリケーションがデプロイされると、永続ボリュームが動的に作成されます。この手順は不要です |
| 74 | + |
| 75 | +# 3. WordPressとMySQLのサービス/デプロイメントの作成と配布 |
| 76 | + |
| 77 | +### 3.1 コンテナ内でMySQLを使用する |
| 78 | + |
| 79 | +> *Note:* IBM Cloud Compose-MySQLをバックエンドとして使用したい場合は、[バックエンドとしてIBM Cloud MySQLを使用する](#32-バックエンドとしてIBM-Cloud-MySQLを使用する)を参照してください |
| 80 | +
|
| 81 | +永続ボリュームをクラスタのローカルストレージにインストールします。その後、MySQLとWordPressのためのシークレットとサービスを作成します |
| 82 | +```bash |
| 83 | +kubectl create secret generic mysql-pass --from-file=password.txt |
| 84 | +kubectl create -f mysql-deployment.yaml |
| 85 | +kubectl create -f wordpress-deployment.yaml |
| 86 | +``` |
| 87 | + |
| 88 | + |
| 89 | +すべてのポッドが実行されたら、次のコマンドを実行してポッド名を確認します。 |
| 90 | +```bash |
| 91 | +kubectl get pods |
| 92 | +``` |
| 93 | + |
| 94 | +これにより、Kubernetesクラスタからのポッドのリストが返されます |
| 95 | +```bash |
| 96 | +NAME READY STATUS RESTARTS AGE |
| 97 | +wordpress-3772071710-58mmd 1/1 Running 0 17s |
| 98 | +wordpress-mysql-2569670970-bd07b 1/1 Running 0 1m |
| 99 | +``` |
| 100 | + |
| 101 | +それでは、[外部のWordPressリンクにアクセスする](#-4-外部のWordPressリンクにアクセスする)へ進んでください |
| 102 | + |
| 103 | +### 3.2 バックエンドとしてIBM Cloud MySQLを使用する |
| 104 | + |
| 105 | +IBM CloudでCompose for MySQLをプロビジョニングします https://cloud.ibm.com/catalog/services/compose-for-mysql |
| 106 | + |
| 107 | +サービス認証情報に移動して、認証情報を確認してください。 |
| 108 | +MySQLのホスト名、ポート番号、ユーザー、パスワードがあなたの認証情報URIの下にあり、以下のように見えるはずです |
| 109 | + |
| 110 | + |
| 111 | + |
| 112 | +`wordpress-deployment.yaml`ファイルを編集し、WORDPRESS_DB_HOSTの値をMySQLのホスト名とポート番号に変更し(例: `value: <hostname>:<port>`)、 WORDPRESS_DB_USERの値をMySQLパスワードに変更します |
| 113 | + |
| 114 | +環境変数は次のようになります |
| 115 | + |
| 116 | +```yaml |
| 117 | + spec: |
| 118 | + containers: |
| 119 | + - image: wordpress:4.7.3-apache |
| 120 | + name: wordpress |
| 121 | + env: |
| 122 | + - name: WORDPRESS_DB_HOST |
| 123 | + value: sl-us-dal-9-portal.7.dblayer.com:22412 |
| 124 | + - name: WORDPRESS_DB_USER |
| 125 | + value: admin |
| 126 | + - name: WORDPRESS_DB_PASSWORD |
| 127 | + value: XMRXTOXTDWOOPXEE |
| 128 | +``` |
| 129 | +
|
| 130 | +`wordpress-deployment.yaml`を変更したら、次のコマンドを実行してWordPressをデプロイします |
| 131 | +```bash |
| 132 | +kubectl create -f wordpress-deployment.yaml |
| 133 | +``` |
| 134 | + |
| 135 | +すべてのポッドが実行されたら、次のコマンドを実行してポッド名を確認します |
| 136 | +```bash |
| 137 | +kubectl get pods |
| 138 | +``` |
| 139 | + |
| 140 | +これにより、Kubernetesクラスタからポッドのリストが返されます |
| 141 | + |
| 142 | +```bash |
| 143 | +NAME READY STATUS RESTARTS AGE |
| 144 | +wordpress-3772071710-58mmd 1/1 Running 0 17s |
| 145 | +``` |
| 146 | + |
| 147 | +# 4. 外部のWordPressリンクにアクセスする |
| 148 | + |
| 149 | +> 有料クラスタがある場合は、NodePortの代わりにLoadBalancerを使用することができます。 |
| 150 | +> |
| 151 | +>`kubectl edit services wordpress` |
| 152 | +> |
| 153 | +> `spec`の下で、 `type: NodePort` を `type: LoadBalancer` に変更してください |
| 154 | +> |
| 155 | +> **Note:** YAMLファイルを編集したあとに、`service "wordpress" edited`が表示されていることを確認してください。これはYAMLファイルが入力ミスや接続エラーなしで正常に編集されたことを意味します。 |
| 156 | + |
| 157 | +クラスタのIPアドレスを取得するには |
| 158 | + |
| 159 | +```bash |
| 160 | +$ bx cs workers <your_cluster_name> |
| 161 | +OK |
| 162 | +ID Public IP Private IP Machine Type State Status |
| 163 | +kube-hou02-pa817264f1244245d38c4de72fffd527ca-w1 169.47.220.142 10.10.10.57 free normal Ready |
| 164 | +``` |
| 165 | + |
| 166 | +NodePort番号を取得するには、次のコマンドを実行する必要があります。 |
| 167 | + |
| 168 | +```bash |
| 169 | +$ kubectl get svc wordpress |
| 170 | +NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
| 171 | +wordpress 10.10.10.57 <nodes> 80:30180/TCP 2m |
| 172 | +``` |
| 173 | + |
| 174 | +おめでとうございます。今あなたはあなたのWordPressサイトへアクセスするためのリンク**http://[IP]:[port number]** を使用することができるようになりました。 |
| 175 | + |
| 176 | + |
| 177 | +> **Note:** 上記の例では、リンクは次のようになります http://169.47.220.142:30180 |
| 178 | + |
| 179 | +Kubernetes UIでdeploymentのステータスを確認することができます。`kubectl proxy`を実行し、URL 'http://127.0.0.1:8001/ui'に移動して、WordPressコンテナの準備が整ったことを確認します。 |
| 180 | + |
| 181 | + |
| 182 | + |
| 183 | +> **Note:** ポッドが完全に機能するまで最大5分かかります。 |
| 184 | + |
| 185 | + |
| 186 | + |
| 187 | +**(Optional)** クラスタ内にさらにリソースがあり、WordPress Webサイトをスケールアップしたい場合は、次のコマンドを実行して現在のdeploymentsを確認できます。 |
| 188 | + |
| 189 | +```bash |
| 190 | +$ kubectl get deployments |
| 191 | +NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE |
| 192 | +wordpress 1 1 1 1 23h |
| 193 | +wordpress-mysql 1 1 1 1 23h |
| 194 | +``` |
| 195 | + |
| 196 | +これで、次のコマンドを実行してWordPressフロントエンドをスケールアップできます。 |
| 197 | +```bash |
| 198 | +$ kubectl scale deployments/wordpress --replicas=2 |
| 199 | +deployment "wordpress" scaled |
| 200 | +$ kubectl get deployments |
| 201 | +NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE |
| 202 | +wordpress 2 2 2 2 23h |
| 203 | +wordpress-mysql 1 1 1 1 23h |
| 204 | +``` |
| 205 | +ご覧のとおり、WordPressフロントエンドを実行している2つのポッドがあります。 |
| 206 | + |
| 207 | +> **Note:** 無料クラスタユーザーの場合、無料利用枠のユーザーには限られたリソースしかないため、スケールアップは最大10個のポッドまでとすることをおすすめします。 |
| 208 | + |
| 209 | +# 5. WordPressを使用する |
| 210 | + |
| 211 | +WordPressが起動しました。新しいユーザーとして登録して、WordPressをインストールすることができます。 |
| 212 | + |
| 213 | + |
| 214 | +WordPresをインストール後、新しいコメントを投稿することができます。 |
| 215 | + |
| 216 | + |
| 217 | + |
| 218 | + |
| 219 | +# トラブルシューティング |
| 220 | + |
| 221 | +誤って改行付きのパスワードを作成した場合、MySQLサービスを認証することはできません。現在のシークレットを削除するには |
| 222 | + |
| 223 | +```bash |
| 224 | +kubectl delete secret mysql-pass |
| 225 | +``` |
| 226 | + |
| 227 | +サービス、deployments、永続ボリューム要求を削除したい場合は、次のコマンドで実行できます |
| 228 | +```bash |
| 229 | +kubectl delete deployment,service,pvc -l app=wordpress |
| 230 | +``` |
| 231 | + |
| 232 | +永続ボリュームを削除したい場合は、次のコマンドで実行できます |
| 233 | +```bash |
| 234 | +kubectl delete -f local-volumes.yaml |
| 235 | +``` |
| 236 | + |
| 237 | +WordPressの動作に時間がかかる場合、ログを調べることでWordPressのデバックすることができます。 |
| 238 | +```bash |
| 239 | +kubectl get pods # WordPressのポッド名を取得する |
| 240 | +kubectl logs [wordpress pod name] |
| 241 | +``` |
| 242 | + |
| 243 | + |
| 244 | +# References |
| 245 | +- このWordPressの例は、 |
| 246 | +https://github.com/kubernetes/kubernetes/tree/master/examples/mysql-wordpress-pd にあるKubernetesのオープンソースの例[mysql-wordpress-pd](https://github.com/kubernetes/kubernetes/tree/master/examples/mysql-wordpress-pd)に基づいています。 |
| 247 | + |
| 248 | + |
| 249 | +# ライセンス |
| 250 | +このコードパターンは、Apache Software License, Version 2の元でライセンスされています。このコードパターン内で呼び出される個別のサードパーティコードオブジェクトは、独自の個別ライセンスに従って、それぞれのプロバイダによってライセンスされます。コントリビュートの対象は[Developer Certificate of Origin, Version 1.1 (DCO)](https://developercertificate.org/) と [Apache Software License, Version 2](https://www.apache.org/licenses/LICENSE-2.0.txt)です。 |
| 251 | + |
| 252 | +[Apache Software License (ASL) FAQ](https://www.apache.org/foundation/license-faq.html#WhatDoesItMEAN) |
0 commit comments