GKEチュートリアルやってみる ~ GKEでWordPress ~
- 参考記事 : GKE チュートリアル
概要
単一レプリカのWordPessデプロイをGKEにデプロイします。
MySQLの代わりにGCPのCloud SQLを使用します。また、コンテナの外部ストレージとしてPersistentVolumes(PV)と PersistentVolumeClaims(PVC)を使用してデータを保存します。
目標
- GKE クラスタを作成する。
- Persistent Disk を基盤とする PV と PVC を作成する。
- Cloud SQL for MySQL インスタンスを作成する。
- WordPress をデプロイする。
- WordPress ブログを設定する。
事前準備
Cloud SDKもしくはCloudShellを使用できる状態にしておいてください。
※参考 : https://semigeek-dev.hatenablog.com/entry/2020/05/31/110307 でコマンドラインツールのインストールを行ってください。
以下のコマンドでGKE と Cloud SQL Admin API を有効にします。
gcloud services enable container.googleapis.com sqladmin.googleapis.com
環境設定
gcloud コマンドライン ツールのデフォルト ゾーンを設定します。
gcloud config set compute/zone asia-northeast1-a
Gitからアプリマニフェストファイルをダウンロードする
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/wordpress-persistent-disks
WORKING_DIR 環境変数を設定します。
WORKING_DIR=$(pwd)
環境変数 PROJECT_ID に Google Cloud プロジェクト ID を設定します。
export PROJECT_ID=[PROJECT_ID]
GKE クラスタの作成
WordPress アプリコンテナをホストする GKE クラスタを作成します。
CLUSTER_NAME=persistent-disk-tutorial
gcloud container clusters create $CLUSTER_NAME \ --num-nodes=3 --enable-autoupgrade --no-enable-basic-auth \ --no-issue-client-certificate --enable-ip-alias --metadata \ disable-legacy-endpoints=true
Persistent Disk を基盤とする PV と PVC を作成する
kubectl apply -f $WORKING_DIR/wordpress-volumeclaim.yaml
Cloud SQL for MySQL インスタンスを作成する
mysql-wordpress-instance という名前のインスタンスを作成します。
INSTANCE_NAME=mysql-wordpress-instance gcloud sql instances create $INSTANCE_NAME
export INSTANCE_CONNECTION_NAME=$(gcloud sql instances describe $INSTANCE_NAME \ --format='value(connectionName)')
wordpress認証用のDBユーザーとパスワードを作成します。
CLOUD_SQL_PASSWORD=$(openssl rand -base64 18) gcloud sql users create wordpress --host=% --instance $INSTANCE_NAME \ --password $CLOUD_SQL_PASSWORD
サービスアカウントを構成して Secret を作成する
Cloud SQL Proxy を介した MySQL インスタンスへのアクセスを WordPress アプリに許可するには、サービス アカウントを作成します。
SA_NAME=cloudsql-proxy gcloud iam service-accounts create $SA_NAME --display-name $SA_NAME
サービス アカウントのメールアドレスを環境変数として追加します。
SA_EMAIL=$(gcloud iam service-accounts list \ --filter=displayName:$SA_NAME \ --format='value(email)')
サービス アカウントに cloudsql.client 役割を追加します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAIL
サービス アカウントのキーを作成します。
gcloud iam service-accounts keys create $WORKING_DIR/key.json \ --iam-account $SA_EMAIL
MySQL 認証情報に Kubernetes Secret を作成します。
kubectl create secret generic cloudsql-db-credentials \ --from-literal username=wordpress \ --from-literal password=$CLOUD_SQL_PASSWORD
サービスアカウントの認証情報にKubernates Secret を作成します。
WordPress をデプロイする
環境変数を置き換えて、デプロイ ファイルを準備します。
cat $WORKING_DIR/wordpress_cloudsql.yaml.template | envsubst > \ $WORKING_DIR/wordpress_cloudsql.yaml
wordpress_cloudsql.yaml マニフェスト ファイルをデプロイします。
kubectl create -f $WORKING_DIR/wordpress_cloudsql.yaml
デプロイのステータスが running に変わるのを待ちます。
kubectl get pod -l app=wordpress --watch ---------------------- NAME READY STATUS RESTARTS AGE wordpress-387015-02xxb 2/2 Running 0 9h
WordPress サービスを公開する
サービスを作成します。ロードバランサーの作成とグローバルIPの割り当てが行われます。
kubectl create -f $WORKING_DIR/wordpress-service.yaml
デプロイを監視し、サービスに外部 IP アドレスが割り当てられるまで待ちます。
kubectl get svc -l app=wordpress --watch ------------------------------------ NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE wordpress XX.XX.XXX.XXX XXX.X.XXX.X 80:32418/TCP 1m