はじめに
こんにちは!
本記事は「本気で学ぶKubernetes」シリーズの第19回です。このシリーズでは、Kubernetesの基礎から実践まで、段階的に学んでいきます。
このシリーズは、第1回から順に読むことで体系的に学べる構成にしています。
まだご覧になっていない方は、ぜひ最初からご覧ください!
今回はいよいよ実際にGKEクラスタを作成して、アプリケーションをデプロイしていきたいと思います!
この記事は人間がKubernetesの公式ドキュメントを読み漁りながら書いていますのでご安心ください!
TL;DR
忙しい方のために要点だけ図示しておきます!
前提条件
この記事ではCloud Shellを使って進めます。
※Cloud Shellはブラウザから使えるGoogle Cloudの開発環境で、gcloud CLIやkubectlが最初から入っているためセットアップ不要ですぐに始められます。
Google Cloudを利用しますが、プロジェクト開設やその利用方法については本記事では触れませんのでご了承ください。
ローカル環境で実行したい場合は、gcloud CLIとkubectlのインストールが必要です。ご自身でセットアップしてお試しください!
GKEは無料枠($74.40/月のクレジット)がありますが、LoadBalancerなど一部のリソースは課金対象です。
無料トライアルではクレジットが提供されますので、そちらを活用するのがおすすめです。
Cloud Shellを開く
Google Cloud Consoleにアクセスして、右上の「Cloud Shellをアクティブにする」ボタンをクリックします。
ブラウザの下部にターミナル(黒い画面)が表示されます。
GKE APIの有効化
Cloud Shell上で、GKE APIを有効化します。
# GKE APIを有効化
gcloud services enable container.googleapis.com
GKE Autopilotクラスタの作成
それでは、実際にGKEクラスタを作成していきます。今回はAutopilotモードを使います。
# Autopilotクラスタを作成(東京リージョン)
gcloud container clusters create-auto demo-cluster \
--region=asia-northeast1
クラスタの作成には5〜10分ほどかかりますので、コーヒーでも飲みながら気長に待ちましょう☕️
クラスタが作成されたら、kubectlでGKEに接続できるようにkubeconfigを取得します。
# kubeconfigを取得
gcloud container clusters get-credentials demo-cluster \
--region=asia-northeast1
# Fetching cluster endpoint and auth data.
# kubeconfig entry generated for demo-cluster.
kubeconfigにはGKEクラスタの接続情報やアクセスするためのユーザー認証情報などが含まれており、これを取得することでクラスターを利用することができます。
クラスター情報を取得してみます。
kubectl cluster-info
# Kubernetes control plane is running at https://34.xxx.xxx.xxx
# GLBCDefaultBackend is running at https://34.xxx.xxx.xxx/api/v1/namespaces/kube-system/services/default-http-backend:http/proxy
# KubeDNS is running at https://34.xxx.xxx.xxx/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
# Metrics-server is running at https://34.xxx.xxx.xxx/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
GKEクラスタが無事に作成できたことが確認できました。
HelmでnginxをGKEにデプロイ
今回はHelmを利用してサクッとnginxをGKEにデプロイしてみます。
まずはBitnami repositoryを追加します。
# Bitnami repositoryを追加
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# "bitnami" has been added to your repositories
# Hang tight while we grab the latest from your chart repositories...
# ...Successfully got an update from the "bitnami" chart repository
# Update Complete. ⎈Happy Helming!⎈
nginxのインストール
LoadBalancerタイプのServiceで外部公開するようにnginxをインストールします。
# nginxをLoadBalancerで公開
helm install my-nginx bitnami/nginx \
--set service.type=LoadBalancer
# NAME: my-nginx
# LAST DEPLOYED: Mon Dec 16 10:00:00 2024
# NAMESPACE: default
# STATUS: deployed
# REVISION: 1
# TEST SUITE: None
BitnameのイメージやTAGに関するWARNINGメッセージが表示される場合もありますが、今回は学習用途ですので無視して問題ありあせん。
Helmが自動的にDeploymentとLoadBalancer Serviceを作成してくれます。
デプロイ確認
Podが起動しているか確認します。
kubectl get pods
# NAME READY STATUS RESTARTS AGE
# my-nginx-64c5888bcd-ffcfc 1/1 Running 0 2m
Bitnami nginxチャートのデフォルトでは、Podが1つ作成されます。
Serviceが作成されているか確認します。
kubectl get service
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 15m
# my-nginx LoadBalancer 34.118.226.50 34.xxx.xxx.xxx 80:31332/TCP,443:31563/TCP 3m
外部IPが割り当てられました!Bitnami nginxチャートは、デフォルトでHTTP(80)とHTTPS(443)の両方のポートを公開します。
動作確認
ブラウザでロードバランサーのIPアドレスにアクセスすると、nginxのWelcomeページが表示されるはずです!
または、curlでアクセスして確認することもできます。
# EXTERNAL-IPを環境変数に格納
EXTERNAL_IP=$(kubectl get service my-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
# curlでアクセス
curl http://$EXTERNAL_IP
# <!DOCTYPE html>
# <html>
# <head>
# <title>Welcome to nginx!</title>
# ...
nginxのWelcomeページが表示されました!インターネットから実際にアクセスできていることが確認できました。
GKEコンソールでの確認
Google Cloud Consoleからも確認してみます。
ここから、クラスタの状態や詳細を確認することができます。
特にワークロードのタブでは、デプロイしたPodのステータスやログがグラフィカルに表示されるので便利ですのでぜひ活用してください!
クリーンアップ
使い終わったら必ずリソースを削除して課金を止めます。これを忘れると課金が継続してしまうので注意してください。
Helmでインストールしたリソースは、helm uninstallで一括削除できます。
# nginxとそのServiceを削除
helm uninstall my-nginx
# release "my-nginx" uninstalled
これだけでDeploymentもLoadBalancer Serviceも全て削除されます。Helmは便利ですね
最後にクラスタ自体も削除しておきます。
gcloud container clusters delete demo-cluster \
--region=asia-northeast1
# The following clusters will be deleted.
# - [demo-cluster] in [asia-northeast1]
#
# Do you want to continue (Y/n)? y
#
# Deleting cluster demo-cluster...done.
# Deleted [https://container.googleapis.com/v1/projects/YOUR_PROJECT/zones/asia-northeast1/clusters/demo-cluster].
念のため削除されていることも確認します。
# クラスタが削除されたことを確認
gcloud container clusters list
# Listed 0 items.
GKEで余計に課金が発生してしまう場合はLoadBalancerとPersistent Volumeは削除忘れが多いようです。
クラスタ削除後も課金が続く場合があるので、必ずコンソールで確認してください。
https://console.cloud.google.com/net-services/loadbalancing/list/loadBalancers
まとめと次回予告
今回は実際にGKEクラスタを作成して、Helmを使ってnginxアプリケーションをデプロイしてみました。
HelmとGKEを活用して簡単に外部公開可能なアプリケーションが作成できることを確認できました。
次回はCloud RunとGKEの使い分けについて整理していきたいと思います。
それでは、また次回!




