こんにちは!インフラ担当の米田です。
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を使用しますので、セットアップができていない方は公式ドキュメントを参考に準備してください。
以降のコマンドの例の中で登場する ${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 |
今回は構築・管理が簡単な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
のインストール方法についてはここでは説明しませんので、インストールしていない方は公式ドキュメントを参考に準備してください。
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アドレスをブラウザのアドレスバーに貼り付けアクセスすると、サンプルアプリケーションが表示されるはずです!
Google Cloudコンソールでの確認
先ほど作成したGKE Clusterとデプロイしたサンプルアプリケーションの状態を、Google Cloudコンソール上で確認してみます。
コンソールから Kubernetes Engine
> Resource Management
> Clusters
に進み、一覧から先ほど作成した gke-cluster
をクリックします。
DETAILSタブではClusterのバージョンや、リージョン、エンドポイントなどの基本的な情報が確認できます。
OBSERVABILITYタブではCPUやメモリの使用率などのグラフが確認できます。
LOGSタブでは各Serviceが出力するログを確認できます。
コンソールから Kubernetes Engine
> Resource Management
> Workloads
に進み、一覧から先ほどデプロイしたアプリケーションのいずれかをクリックします。
ここではService単位で先ほどのような詳細な情報が確認できます。
まとめ
個人的にKubernetesに興味はあるものの構築やデプロイが大変なイメージでしたが、GKEのAutopilotモードを利用すればクラスターやノードの管理がほぼ必要なく、簡単にKubernetesを使い始めることができました。
Kubernetesは元々Googleが設計したものなので、Google Cloudでホストさせる安心感もあるかも知れませんね。
また、私がGKEを触ってみるきっかけになったのが、Google Cloud公式で開催された 実践Google Cloudハンズオンセミナー という公式のハンズオンセミナーの中の GKEで始めるPlatform Engineering というイベントでした。
触ったことのないサービスに触れるきっかけとしてはとても良いものでしたので、Google Cloudに興味がある方はこういったハンズオンから始めてみてはいかがでしょうか。
- GKE で始める Platform Engineering ~入門編~
- GKE で始める Platform Engineering ~実践編~
- GKE で始める Platform Engineering ~セキュリティ ガードレール編~
今回はGoogle Cloudの中からGKEについて取り扱ってきましたが、今後他のサービスについても触れていきたいと考えています。
次回のGoogle Cloud ことはじめシリーズにご期待ください!