GKEでWordPressを構築する。

用語説明

GKEとは?

cloud.google.com

Google Kubernetes Engine(GKE)は、Googleが管理するKubernetesオープンソースコンテナオーケストレーションプラットフォームです。

GKEは、Google Cloudのインフラストラクチャ上で、コンテナ化されたアプリケーションのデプロイや運用管理を行うためのマネージドなKubernetesクラスタを利用できるサービスです。
GKEは、Googleの社内クラスタ管理システムであるBorgで長年培った本番環境ワークロードの大規模運用の経験を生かして開発されたシステムです。
GKEは、Kubernetesをより簡単かつ安全に使っていただくための機能を多く持っています。GKEのアーキテクチャは、大きくControl PlaneとNodeというコンポーネントに分かれています。
 
GKEは、Kubernetesのマネージドサービスであり、Kubernetesの知識を活かして細かい設定やカスタマイズが可能です

 WordPressとは?

wordpress.com

WordPressワードプレス)は、ブログやWebサイトを作成できるコンテンツ管理システム(CMS)の一種です。PHPというプログラミング言語で作られており、世界中のサイトの約4分の1はWordPressで構築されていると言われています。
WordPressは、専門的なプログラミング知識がなくても直感的にブログやサービスサイトを作成できます。また、本格的なサイトを簡単に開設できる、記事の作成・更新が簡単にできる、テーマを使ってデザインを簡単に変更できる、プラグインを使って機能を手軽に追加できる、独自ドメインでブログ運営できる、複数のユーザーでブログ運営できる、低コストでブログ運営できるなどのメリットがあります。
WordPressオープンソースのソフトウェアで、無料です。レンタルサーバーなどにインストールして使用します

 

AIとの対話

対話AIはBardだったりChatGPTだったりします。

 

gke を利用してwordpressを構築したい

Google Kubernetes Engine(GKE)を利用してWordPressを構築するには、次の手順を実行します。
  1. WordPressアプリコンテナをホストするGKEクラスタを作成します。Cloud Shellでpersistent-disk-tutorialという名前のGKEクラスタを作成し、作成した新しいクラスタに接続します。
  2. GKEはVPCネイティブで作成する必要があります。VPCネイティブでGKEを作成する場合は、--enable-ip-aliasオプションを付けて作成します。
  3. WordPressとcloudSQLの通信は内部ネットワークを使用することを前提としているので、MySQLの代わりにGCPのCloud SQLを使用します。
  4. コンテナの外部ストレージとしてPersistentVolumes(PV)とPersistentVolumeClaims(PVC)を使用してデータを保存します。
GKEの公式チュートリアルkubernetes.io)をはじめ、まとまっている情報を確認できます

紹介されたサイト

 

cloud.google.com

hyoublog.com

ponpon-soft.com

fand.jp

 

具体的なコマンド

完全な初心者だと公式のドキュメントと以下のサイトがわかりやすかったです。

Persistent Disk と Cloud SQL を使用して GKE に WordPress をデプロイする  |  Kubernetes Engine  |  Google Cloud

GKEチュートリアルやってみる その2 ~ GKEでWordPress ~ - 開発日報

なるべく料金やすく構築したいのでregionなどは以下も参考にします。

(ただし有料の部分を含みます。)

[GCP無料枠のみで構築]#2:GKEにてアプリケーション実行

cloud.google.com

 
  1. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  2. Google Cloud プロジェクトで課金が有効になっていることを確認します

  3. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

  4. Cloud Shell で、GKE と Cloud SQL Admin API を有効にします。
     
    gcloud services enable container.googleapis.com sqladmin.googleapis.com
 
  1. Cloud Shell で Google Cloud CLI のデフォルト リージョンを設定します。

     
    export REGION=us-west1
    gcloud config set compute/region $REGION
  2. 環境変数 PROJECT_ID に Google Cloud プロジェクト IDproject-id)を設定します。PROJECT_IDは、シェルを動かしているなら、左の括弧内に書かれている文字です。

     
    export PROJECT_ID=my-test 

     

  3. GitHub リポジトリからアプリ マニフェスト ファイルをダウンロードします。

     
    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
  4. wordpress-persistent-disks ファイルのあるディレクトリに変更します。

     
    cd kubernetes-engine-samples/quickstarts/wordpress-persistent-disks
  5. WORKING_DIR 環境変数を設定します。

     
    WORKING_DIR=$(pwd)

     

WordPress アプリコンテナをホストする GKE クラスタを作成します。

  • Cloud Shell で persistent-disk-tutorial という名前の GKE クラスタを作成します。

     
    export CLUSTER_NAME=persistent-disk-tutorial
    gcloud container clusters create
    -auto $CLUSTER_NAME

    作成した新しいクラスタに接続します。

     
    gcloud container clusters get-credentials $CLUSTER_NAME --region $REGION

     

永続的に保存するためにPVCを利用します。

このマニフェスト ファイルには、200 GB のストレージを必要とする PVC が記述されているので、一応1GBに変えてからapplyします。

  1. Cloud Shell で、マニフェスト ファイルをデプロイします。

     

    vim $WORKING_DIR/wordpress-volumeclaim.yaml
    kubectl apply
    -f $WORKING_DIR/wordpress-volumeclaim.yaml
    kubectl get persistentvolumeclaim
  1. Cloud Shell で、mysql-wordpress-instance という名前のインスタンスを作成します。

     
    INSTANCE_NAME=mysql-wordpress-instance
    gcloud sql instances create $INSTANCE_NAME
  2. 環境変数インスタンス接続名を追加します。

     
    export INSTANCE_CONNECTION_NAME=$(gcloud sql instances describe $INSTANCE_NAME --format='value(connectionName)')
  3. WordPress のデータを保存するデータベースを作成します。

     
    gcloud sql databases create wordpress --instance $INSTANCE_NAME
  4. wordpress というデータベース ユーザーとパスワードを作成します

     
    CLOUD_SQL_PASSWORD=$(openssl rand -base64 18)
    gcloud sql users create wordpress
    --host=% --instance $INSTANCE_NAME --password=$CLOUD_SQL_PASSWORD

    Secretに保存するまでメモしておいてください。

これで、新しい WordPress ブログ用のデータベースの設定が完了しました。

  1. WordPress アプリが Cloud SQL Proxy を介して MySQL インスタンスにアクセスできるようにするには、サービス アカウントを作成します。

     
    SA_NAME=cloudsql-proxy
    gcloud iam service
    -accounts create $SA_NAME --display-name $SA_NAME
  2. サービス アカウントのメールアドレスを環境変数として追加します。

     
    SA_EMAIL=$(gcloud iam service-accounts list --filter=displayName:$SA_NAME --format='value(email)')
  3. サービス アカウントに cloudsql.client ロールを追加します。

     
    gcloud projects add-iam-policy-binding $PROJECT_ID --role roles/cloudsql.client --member serviceAccount:$SA_EMAIL
  4. サービス アカウントのキーを作成します。

     
    gcloud iam service-accounts keys create $WORKING_DIR/key.json --iam-account $SA_EMAIL

    次のコマンドを実行して、key.json ファイルのコピーをダウンロードします。

    DB接続が失敗したら、このファイルのPROJECT IDなどがおかしくないか見てください。
  5. MySQL 認証情報に Kubernetes Secret を作成します。

     
    kubectl create secret generic cloudsql-db-credentials --from-literal username=wordpress --from-literal password=$CLOUD_SQL_PASSWORD
  6. サービス アカウントの認証情報に Kubernetes シークレットを作成します。

     
    kubectl create secret generic cloudsql-instance-credentials --from-file $WORKING_DIR/key.json
  1. INSTANCE_CONNECTION_NAME 環境変数を置き換えてファイルを準備します。

     
    cat $WORKING_DIR/wordpress_cloudsql.yaml.template | envsubst >  $WORKING_DIR/wordpress_cloudsql.yaml
  2. wordpress_cloudsql.yaml マニフェスト ファイルをデプロイします。

     
    kubectl create -f $WORKING_DIR/wordpress_cloudsql.yaml

    Persistent Disk がコンピューティング ノードに接続される場合、このマニフェスト ファイルのデプロイに数分かかります。

  3. デプロイのステータスが running に変わるのを待ちます。

     
    kubectl get pod -l app=wordpress --watch

    出力に Running のステータスが示されたら、次のステップに進むことができます。

     
    NAME                     READY     STATUS    RESTARTS   AGE
    wordpress-387015-02xxb   2/2       Running   0          2m47s
    
  1. type:LoadBalancer の Service を作成します。

     
    kubectl create -f $WORKING_DIR/wordpress-service.yaml

    ロードバランサの作成には数分かかります。

  2. デプロイを監視し、サービスに外部 IP アドレスが割り当てられるまで待ちます。

     
    kubectl get svc -l app=wordpress --watch
  3. 出力に外部 IP アドレスが表示されたら、次の手順に進みます。外部 IP は次の例とは異なるため、注意が必要です。

     
    NAME        CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE
    wordpress   10.51.243.233   203.0.113.3    80:32418/TCP   1m
    
  4. 後で使用できるように、EXTERNAL_IP アドレス フィールドをメモしておきます。

このセクションでは、WordPress ブログを設定します。

  1. ブラウザで次の URL にアクセスします。external-ip-address は、WordPress インスタンスを公開するサービスの EXTERNAL_IP アドレスに置き換えます。

     
    http://external-ip-address
    
  2. WordPress のインストール ページで言語を選択して、[Continue] をクリックします。

  3. [Information needed] ページで必要な情報を入力し、[Install WordPress] をクリックします。

  4. [Log In] をクリックします。

  5. 以前に作成したユーザー名とパスワードを入力します。

  6. ブログサイトが作成されます。ブログにアクセスするには、ブラウザで次の URL にアクセスします。

     
    http://external-ip-address
    

 

 

必要ない時はロードバランサは、削除します。

 


kubectl delete
-f $WORKING_DIR/wordpress-service.yaml

 

感想

チュートリアルを利用したらあっさり構築できて、内容もk8sのような一般的知識に近いもので、簡単だったが、変数間違い等で少し時間を使った。

変数間違い等トラブルがあった時もk8sの一般的なログインなどをしてログが見れるのは良かった。

構成等もシンプルで必要なものが入っている感じでチュートリアルを通すことでyamlファイル作成時の勉強になると思うので、3ヶ月の無料期間中はもっとGCPを使いこなしてみたい。

wordpressプラグインがたくさんあるのは素晴らしいが、アメリカサーバにしたせいもあり、少し動作が重い気がした。

常にお金がかかる状態ではあるので、他にも、k8sやteraformベースのクラウドも試してみたいと思った。

 

3ヶ月の無料キャンペーン中で料金はかかっていないが、

自分でアクセスするだけでもこの程度料金がかかる模様。

かかった料金