Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Part-92: 🚀 Create a Node Pool and Deploy Kubernetes Workloads with NodeSelector in Google Kubernetes Engine (GKE)

2025年09月27日に「Dev.to」が公開したITニュース「Part-92: 🚀 Create a Node Pool and Deploy Kubernetes Workloads with NodeSelector in Google Kubernetes Engine (GKE)」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

GKEでノードプールを作成し、NodeSelectorを使ってKubernetesワークロードを特定のノード群にデプロイする方法を学ぶ。これにより、どのノードでアプリケーションを実行するかを詳細に制御し、効率的なリソース配置を実現できる。設定から動作確認、クリーンアップまでを解説する。

ITニュース解説

Google Kubernetes Engine(GKE)は、Google Cloud上でコンテナ化されたアプリケーションを動かすための強力なプラットフォームである。Kubernetesは、これらのコンテナ化されたアプリケーションを自動的にデプロイ、スケーリング、管理するオープンソースのシステムであり、GKEはそのKubernetesをGoogleが提供するマネージドサービスとして利用できるものだ。多くの企業がアプリケーション開発と運用を効率化するためにKubernetesを採用しており、システムエンジニアを目指す上ではその基礎知識が不可欠となる。

GKEでアプリケーションを運用する際、アプリケーションの特性や要件に応じて、特定の種類の仮想マシン(ノード)で動かしたいという場面がよくある。例えば、計算能力の高いノードで機械学習のワークロードを動かしたり、コスト効率の良いノードで一般的なWebアプリケーションを動かしたりしたい場合などだ。このようなニーズに応えるために利用するのが、「ノードプール」と「ノードセレクター」という機能である。

ノードプールは、GKEクラスター内で同じ設定を持つノード(仮想マシン)の集まりを指す。クラスターは複数のノードで構成されており、アプリケーションの実際の処理はこのノード上で実行される。ノードプールを使うことで、CPUの種類、メモリ容量、ディスクサイズ、さらにはGPUの有無など、異なるスペックを持つノード群をグループ化して管理できる。これにより、アプリケーションの種類や重要度に応じて最適なリソースを割り当てることが可能になる。

この記事では、まず既存のGKEクラスター内に新しいノードプールを作成する手順を説明する。コマンドラインツールであるgcloudを使って、linuxapps-nodepoolという名前のノードプールを作成する。この際、--machine-type "e2-small"でマシンの種類、--disk-size "20"でディスクサイズ、--num-nodes "1"でノード数を指定している。さらに、--spotというオプションが指定されている点も重要だ。これは「スポットVM」と呼ばれるもので、Google Cloudの余剰リソースを利用するため、通常のVMよりも安価に利用できるが、リソースが不足した場合には停止される可能性があるという特徴がある。これにより、コストを抑えつつ開発やテスト環境を構築する際に有効な選択肢となる。ノードプールが作成された後、再びgcloud container node-pools listコマンドで、新しいノードプールが追加されたことを確認できる。

次に、この新しく作成したノードプール上でアプリケーション(ワークロード)を実行するための設定方法を解説する。Kubernetesでは、アプリケーションは「Pod(ポッド)」という最小単位で実行され、Podは一つまたは複数のコンテナを含む。これらのPodのデプロイと管理を定義するのが「Deployment(デプロイメント)」というオブジェクトである。

アプリケーションを特定のノードプールで実行させるために「ノードセレクター」を利用する。これはDeploymentの設定ファイル(YAMLファイル)の中に記述するもので、Podを配置するノードの条件を指定する。この記事では01-kubernetes-deployment.yamlというファイルでDeploymentを定義しており、その中にnodeSelector: cloud.google.com/gke-nodepool: linuxapps-nodepoolという記述がある。この行が、このDeploymentによって作成されるPodが、linuxapps-nodepoolという名前のノードプールに属するノードでのみ実行されるように指示している。これにより、アプリケーションが必要とする特定の環境を持つノードプールに、Podを確実に配置できるのだ。

さらに、アプリケーションを外部からアクセスできるようにするために「Service(サービス)」というKubernetesオブジェクトも作成する。Serviceは、Podの集合に安定したネットワークアクセスを提供し、外部からのリクエストをPodにルーティングする役割を果たす。02-kubernetes-loadbalancer-service.yamlというファイルで定義されているServiceは、type: LoadBalancerが指定されている。これは、Google Cloudのロードバランサーを自動的にプロビジョニングし、アプリケーションにインターネットからアクセス可能な外部IPアドレスを割り当てることを意味する。これにより、ユーザーはWebブラウザを通じてアプリケーションに接続できるようになる。

これらのKubernetesリソースの定義ファイルが準備できたら、kubectl apply -f kube-manifests/コマンドを使ってGKEクラスターにデプロイする。kubectlはKubernetesクラスターを操作するためのコマンドラインツールであり、このコマンドでYAMLファイルに記述された内容が実際にクラスター内に作成される。

デプロイが完了したら、Podが意図した通りに新しいノードプールに配置されているかを確認する。kubectl get pods -o wideコマンドを実行すると、各Podがどのノードで実行されているかを含め、詳細な情報が表示される。ここで、作成したPodがlinuxapps-nodepoolに属するノード上で動作していることを確認できる。その後、kubectl get svcコマンドでLoadBalancer Serviceの外部IPアドレスを取得し、WebブラウザでそのIPアドレスにアクセスすることで、デプロイしたアプリケーションが正しく動作しているかを確認できる。

最後に、作業が終わったら、リソースのクリーンアップを行うことが重要だ。kubectl delete -f kube-manifests/コマンドでKubernetesリソースを削除し、gcloud container node-pools delete "linuxapps-nodepool"コマンドで作成したノードプールも削除する。これにより、不要なリソースが残り、予期せぬ費用が発生することを防ぐことができる。

まとめると、GKEにおけるノードプールは、異なる構成を持つノードをグループ化して管理するための機能であり、ノードセレクターは、アプリケーションのPodを特定のノードプールに意図的に配置するためのメカニズムである。これらの機能を組み合わせることで、開発者はアプリケーションの特性やリソース要件に応じて、GKEクラスター内のワークロード配置をきめ細かく制御できるようになる。これは、効率的で信頼性の高いアプリケーション運用を実現するために非常に重要な技術である。

関連コンテンツ

関連IT用語

関連ITニュース