【ITニュース解説】My First GKE Experience - GKE Turns 10 Hackathon.
2025年09月21日に「Dev.to」が公開したITニュース「My First GKE Experience - GKE Turns 10 Hackathon.」について初心者にもわかりやすく解説しています。
ITニュース概要
GKEハッカソンでAI退職計画ダッシュボードを開発。しかし、GKEへのデプロイではシークレット設定やクラスターサイズ、Dockerイメージ、サービス公開方法などで多数の課題に直面した。試行錯誤の結果、無事に稼働させることができ、Kubernetesの重要性と難しさ、そしてスキルアップの必要性を痛感した。
ITニュース解説
GKE Turns 10 Hackathonというイベントが開催され、筆者はGoogle Kubernetes Engine(GKE)を使ったプロジェクト開発に挑戦した。このハッカソンは、Googleが提供するGKEというサービスが誕生して10周年を迎えることを記念するものであり、システムエンジニアを目指す上でGKEやKubernetesは今後ますます重要となる技術であるため、その体験談は非常に参考になる。
筆者のプロジェクトは「Bank of Anthos」という既存のサンドボックスプロジェクトを拡張し、退職金計画ダッシュボードを作成することだった。Bank of Anthosは、GKE上で動かすことができる銀行アプリケーションのサンプルで、筆者はこれに貯蓄目標確認、GoogleのAIであるGeminiからのアドバイス、Adzuna APIを利用した副業検索機能を追加することを目指した。最終的に、筆者はこのアイデアを実現し、実際に動くダッシュボードを構築した。
この開発において、アプリケーションの機能自体を実装することよりも、それをGKEという環境でスムーズに動作させることが本当の挑戦だったという。GKEは、コンテナ化されたアプリケーションを大規模に管理・実行するための強力なプラットフォームであるKubernetesを、Googleがクラウドサービスとして提供しているものだ。コンテナとは、アプリケーションとその実行に必要なすべての要素を一つのまとまりとしてパッケージ化したもので、これによりどこでも同じように動作させることができる。Kubernetesは、これらのコンテナを効率的に配置し、自動的にスケーリングしたり、障害発生時に再起動したりする「オーケストレーション」の役割を果たす。GKEは、そのKubernetesの複雑な設定や管理をGoogleが代行するため、開発者はアプリケーション開発に集中しやすくなる。しかし、それでも初心者にとっては学ぶべきことが多く、筆者もいくつかの課題に直面した。
まず、一つ目の課題は「Secrets(秘密情報)の設定漏れ」だった。アプリケーションの中には、データベースのパスワードやAPIキーなど、外部に漏れてはならない重要な情報が含まれる場合がある。これらを安全に管理するため、Kubernetesでは「Secret」という仕組みが提供されている。筆者の場合、JWT(JSON Web Token)という認証に使われる秘密情報をGKEに正しく適用し忘れたため、アプリケーションのコンテナ(Kubernetesでは「Pod(ポッド)」と呼ばれる)が起動できなかった。これは、アプリケーションが動作するために必要な設定の一部が欠けていたためで、筆者自身のミスだったという。この経験から、機密情報の適切な管理と設定の重要性を痛感した。
次に、「クラスターのリソース不足」という問題に直面した。GKEでアプリケーションを動かす際には、アプリケーションが必要とする計算資源(CPUやメモリなど)をあらかじめ設定する。これをKubernetesの設定ファイル(YAMLファイル)で「リソース要求(requests)」や「リソース制限(limits)」として定義する。筆者はGKEの利用コストを抑えるため、CPUの使用要件を下げた。その結果、一部のサービスが「Pending(保留中)」状態から動かなくなってしまった。これは、アプリケーションが動作するために最低限必要なリソースが不足していたため、GKEがサービスを起動できなかったことを意味する。GKEの費用は予想より高かったというが、コスト削減のためにリソースを過度に削減すると、システムの安定性やパフォーマンスに悪影響が出ることが示された。適切なリソース割り当ては、アプリケーションが安定稼働するための鍵である。
三つ目の課題は、「Dockerイメージのアーキテクチャ不一致」だった。筆者は自身のMac(ARMアーキテクチャのCPU)でDockerイメージをローカルでビルドした。Dockerイメージとは、コンテナを実行するための設計図のようなものだ。しかし、GKE上でアプリケーションが実行されるノード(サーバー)は通常、AMD64という異なるアーキテクチャのCPUを使用している。異なるアーキテクチャ用にビルドされたイメージは、そのままでは別のアーキテクチャのマシンでは動作しない。この問題は、GKEノードのアーキテクチャに合わせたイメージを再ビルドすることで解決できた。これは、開発環境と本番環境の差異を考慮することの重要性を示している。
最後の課題は、「サービス公開の混同」だった。筆者が開発したダッシュボードは、GKEのクラスター内部では問題なく動作していたものの、ウェブブラウザから外部に公開されず、アクセスできなかった。Kubernetesでは、アプリケーションを外部に公開する方法としていくつかの「Service Type(サービスタイプ)」が提供されている。初期設定で使われることが多い「ClusterIP」は、クラスター内部からのアクセスのみを許可するものだ。外部からアクセス可能にするには、「LoadBalancer(ロードバランサー)」というサービスタイプに変更する必要がある。LoadBalancerは、インターネットからのトラフィックをGKEクラスター内のアプリケーションに適切に振り分ける役割を果たす。筆者はこの設定をClusterIPのままにしていたため、外部からアクセスできなかったのだ。これをLoadBalancerに変更することで、無事にダッシュボードを公開できた。これは初心者によくある間違いだと筆者自身も述べており、Kubernetesの基本的なネットワーク設定の理解が不可欠であることを示している。
これらの課題に直面し、一つ一つ解決していく過程は、筆者にとってGKEとKubernetesの理解を深める貴重な経験となった。問題解決の瞬間はストレスを感じたものの、それらの経験が最終的にGKEの仕組みをより深く理解する助けになったという。
最終的に、筆者はBank of Anthosのフロントエンドと直接連携し、パーソナライズされたAI退職金アドバイスを提供し、収入増のための求人情報を表示するダッシュボードをGKE上で安定して動作させることに成功した。しかし、ソロ開発者にとってはGKEの運用コストが高いと感じたとも述べている。ハッカソンで得た100ドルのクレジットもすぐに使い果たしてしまったというほどだ。
この経験を通して、筆者はGKEやKubernetesが大規模なプロジェクトには不可欠な技術であることを強く実感した。これまではFirebaseやCloudflareのような、より手軽に利用できるサービスを主に使用してきたが、開発者として、また起業家として次のレベルに進むためには、Kubernetesのような高度な技術を習得する必要があると感じている。まだ「未熟」だと謙遜しながらも、一歩ずつ着実に学びを進めている途上にあることを示している。この体験談は、システムエンジニアを目指す初心者がKubernetesやクラウドネイティブ技術の世界に足を踏み入れる際の、具体的な課題と学びのイメージを掴む上で大変有益な情報となるだろう。