2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【本気で学ぶKubernetes】GKE AutopilotとHelmで始めるKubernetes

Last updated at Posted at 2025-12-18

はじめに

こんにちは!

本記事は「本気で学ぶKubernetes」シリーズの第19回です。このシリーズでは、Kubernetesの基礎から実践まで、段階的に学んでいきます。

このシリーズは、第1回から順に読むことで体系的に学べる構成にしています。
まだご覧になっていない方は、ぜひ最初からご覧ください!

Kubernetesとは?クラスタ構成の全体像をつかむ

今回はいよいよ実際にGKEクラスタを作成して、アプリケーションをデプロイしていきたいと思います!

この記事は人間がKubernetesの公式ドキュメントを読み漁りながら書いていますのでご安心ください!

TL;DR

忙しい方のために要点だけ図示しておきます!

gke-day19-tldr.png

前提条件

この記事では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をアクティブにする」ボタンをクリックします。

ブラウザの下部にターミナル(黒い画面)が表示されます。

cloudshell.png

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ページが表示されるはずです!

gke-welcome.png

または、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からも確認してみます。

ここから、クラスタの状態や詳細を確認することができます。

gke-cluster.png

特にワークロードのタブでは、デプロイしたPodのステータスやログがグラフィカルに表示されるので便利ですのでぜひ活用してください!

gke-cluster-workload.png

クリーンアップ

使い終わったら必ずリソースを削除して課金を止めます。これを忘れると課金が継続してしまうので注意してください。

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の使い分けについて整理していきたいと思います。

それでは、また次回!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?