Google Cloud ことはじめ ~Google Kubernetes Engine編~

こんにちは!インフラ担当の米田です。

Google Cloudには色々なサービスがありますが、みなさんは一通り使ったことはありますか?
最近はフェンリルでもGoogle Cloudを使ったプロジェクトの話を耳にするようになってきたこともあり、これを機に『Google Cloud ことはじめ』として色々なサービスに触れてみることにしました。

今回テーマにするGoogle Cloudサービスは、Google Kubernetes Engine(以下GKE)です。
GKE Clusterの作成・アプリケーションのデプロイ・コンソールでの確認までの流れを実践してみましょう。

Google Kubernetes Engineとは

ドキュメントにはこのように書かれています。

GKE は、Google のインフラストラクチャを使用して、コンテナ化されたアプリケーションのデプロイと運用を大規模に行うために使用できるマネージド Kubernetes サービスです。

引用 : https://cloud.google.com/kubernetes-engine/docs/concepts/kubernetes-engine-overview?hl=ja

Google Cloud上でKubernetesクラスタを構築したい場合に、まず候補に上がるサービスでしょう。

事前準備

以降の作業ではgcloud CLIを使用しますので、セットアップができていない方は公式ドキュメントを参考に準備してください。

https://cloud.google.com/sdk/gcloud?hl=ja

以降のコマンドの例の中で登場する ${PROJECT_ID}${REGION} は、自身の環境に合わせて適宜読み替えてください。
また、必要に応じてGoogle Cloudプロジェクトを新規作成してください。

下記のコマンドを実行し、gcloud CLIで操作する対象のプロジェクトを指定します。

gcloud config set project ${PROJECT_ID}

ネットワークのルーティングを制御するため、下記のコマンドを実行してCloud Routerを作成します。

gcloud compute routers create beginning-gke-router \
  --network default \
  --region ${REGION}

パブリックなインターネット向きの通信をするため、下記のコマンドを実行してCloud NATを作成します。

gcloud compute routers nats create beginner-gke-nat \
  --router beginner-gke-nat \
  --auto-allocate-nat-external-ips \
  --nat-all-subnet-ip-ranges \
  --region ${REGION}

これで事前準備は完了です。

GKE Clusterの作成

いよいよGKE Clusterを作成していきます。
が、その前に一つお勉強を。

GKEにはAutopilotとStandardという、2つのモードがあります。
簡単に言うと、Nodeの管理を自身で行うのがStandardモード、Google Cloudにお任せするのがAutopilotモードです。

オプション Autopilot Standard
ロケーション リージョン リージョン または ゾーン
ノード管理 Autopilotでノードを管理する 自身で作成および管理する
ノードのプロビジョニングとスケーリング ノードの数とサイズを自動的にスケーリング 新しいノードを手動でプロビジョニング
ノードのOS Container-Optimized OS Container-Optimized OS
Ubuntu
Windows Server

参考 : https://cloud.google.com/kubernetes-engine/docs/resources/autopilot-standard-feature-comparison?hl=ja

今回は構築・管理が簡単なAutopilotモードでGKEクラスタを作成します。
下記のコマンドを実行し、GKE Clusterを作成します。

gcloud container --project ${PROJECT_ID} clusters create-auto "gke-cluster" \
  --region ${REGION} \
  --release-channel "regular" \
  --network "default" \
  --subnetwork "default" \
  --enable-private-nodes \
  --no-enable-master-authorized-networks --async

作成には少し時間がかかりますので、気長に待ちましょう🍵

サンプルアプリケーションのデプロイ

では先ほど作成したGKE Clusterにサンプルアプリケーションをデプロイしてみましょう。

下記のコマンドを実行し、Google Cloudが公開しているサンプルアプリケーションのマニフェストファイルを手元にダウンロードします。

curl -LO https://raw.githubusercontent.com/GoogleCloudPlatform/microservices-demo/main/release/kubernetes-manifests.yaml

下記のコマンドを実行し、Kubernetesのコマンドラインツールである kubectl で、先ほど作成したGKE Clusterを操作できるようにします。
kubectl のインストール方法についてはここでは説明しませんので、インストールしていない方は公式ドキュメントを参考に準備してください。

https://kubernetes.io/docs/tasks/tools/#kubectl

gcloud container clusters get-credentials gke-cluster \
  --region ${REGION} \
  --project ${PROJECT_ID}

下記のコマンドを実行し、サンプルアプリケーションをデプロイします。

kubectl apply -f kubernetes-manifests.yaml

これで、サンプルアプリケーションが順次作成されていきます。
下記のコマンドを実行し、PodのステータスがRunningになるまで待機しましょう。

kubectl get pod
NAME                                     READY   STATUS    RESTARTS   AGE
adservice-5d74687876-qfsc8               1/1     Running   0          84m
cartservice-67454688f9-jnxbc             1/1     Running   0          84m
checkoutservice-84f6f9f8d6-x8x7t         1/1     Running   0          81m
currencyservice-57c7c9d5bb-hhcb4         1/1     Running   0          84m
emailservice-767ffd6bc4-mw2pv            1/1     Running   0          84m
frontend-6ccf88564c-pn5fm                1/1     Running   0          84m
loadgenerator-5f98d9c568-84c2r           1/1     Running   0          84m
paymentservice-7fbf7b8fc8-ppmlt          1/1     Running   0          84m
productcatalogservice-59754b55d4-bf22m   1/1     Running   0          84m
recommendationservice-6476b6ff98-k2h8q   1/1     Running   0          84m
redis-cart-5d68cb5ff4-7fj9n              1/1     Running   0          84m
shippingservice-68b94cfd5d-h5lzn         1/1     Running   0          84m

起動が完了したら、ブラウザからアクセスしてみましょう。
下記のコマンドを実行してサービスの一覧を確認して、 frontend-external というサービスの外部IPをコピーします。

(一部マスクしています)

kubectl get service frontend-external
NAME                TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)        AGE
frontend-external   LoadBalancer   34.118.229.242   xxx.xxx.xxx.xxx   80:32575/TCP   84m

コピーしたIPアドレスをブラウザのアドレスバーに貼り付けアクセスすると、サンプルアプリケーションが表示されるはずです!

screenshot-of-sample-app

Google Cloudコンソールでの確認

先ほど作成したGKE Clusterとデプロイしたサンプルアプリケーションの状態を、Google Cloudコンソール上で確認してみます。

https://console.cloud.google.com

コンソールから Kubernetes Engine > Resource Management > Clusters に進み、一覧から先ほど作成した gke-cluster をクリックします。
DETAILSタブではClusterのバージョンや、リージョン、エンドポイントなどの基本的な情報が確認できます。

screenshot-of-gke-cluster-console-details

OBSERVABILITYタブではCPUやメモリの使用率などのグラフが確認できます。

screenshot-of-gke-cluster-observability

LOGSタブでは各Serviceが出力するログを確認できます。

screenshot-of-gke-cluster-console-logs

コンソールから Kubernetes Engine > Resource Management > Workloads に進み、一覧から先ほどデプロイしたアプリケーションのいずれかをクリックします。
ここではService単位で先ほどのような詳細な情報が確認できます。

screenshot-of-gke-workload-console

まとめ

個人的にKubernetesに興味はあるものの構築やデプロイが大変なイメージでしたが、GKEのAutopilotモードを利用すればクラスターやノードの管理がほぼ必要なく、簡単にKubernetesを使い始めることができました。
Kubernetesは元々Googleが設計したものなので、Google Cloudでホストさせる安心感もあるかも知れませんね。

また、私がGKEを触ってみるきっかけになったのが、Google Cloud公式で開催された 実践Google Cloudハンズオンセミナー という公式のハンズオンセミナーの中の GKEで始めるPlatform Engineering というイベントでした。
触ったことのないサービスに触れるきっかけとしてはとても良いものでしたので、Google Cloudに興味がある方はこういったハンズオンから始めてみてはいかがでしょうか。

今回はGoogle Cloudの中からGKEについて取り扱ってきましたが、今後他のサービスについても触れていきたいと考えています。
次回のGoogle Cloud ことはじめシリーズにご期待ください!

参考

  1. https://github.com/GoogleCloudPlatform/gcp-getting-started-lab-jp/tree/master
  2. https://github.com/GoogleCloudPlatform/microservices-demo