この記事は
この記事では、Google Cloudにおけるコンテナ技術とサーバーレスサービスについて解説します。Docker、Kubernetes、GKE、そしてApp Engine、Cloud Functions、Cloud Runなどのサーバーレスサービスを詳しく説明します。
コンテナとは
~アプリケーション単位で仮想化する技術~
コンテナの概念
コンテナは、アプリケーションとその実行に必要な依存関係を1つのパッケージにまとめる技術です。
仮想マシンとコンテナの比較
| 項目 | 仮想マシン | コンテナ |
|---|---|---|
| 起動時間 | 数分 | 数秒 |
| サイズ | GB単位 | MB単位 |
| リソース効率 | 中 | 高 |
| 分離レベル | 完全分離 | プロセス分離 |
| OSオーバーヘッド | あり | なし |
コンテナの利点
| 利点 | 説明 |
|---|---|
| ポータビリティ | どの環境でも同じように動作 |
| 効率性 | リソースの有効活用 |
| 一貫性 | 開発・本番で同一の環境 |
| スケーラビリティ | 迅速なスケールアップ/ダウン |
| マイクロサービス | サービスの分離と独立デプロイ |
Docker
Dockerは、最も広く使われているコンテナプラットフォームです。
主な概念:
- Dockerfile:コンテナイメージの定義ファイル
- イメージ:コンテナの設計図
- コンテナ:イメージの実行インスタンス
- レジストリ:イメージの保存場所
# Dockerfileの例
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Artifact Registry
Google Cloud のコンテナイメージを管理するサービス:
# イメージのビルドとプッシュ
docker build -t asia-northeast1-docker.pkg.dev/PROJECT/REPO/IMAGE:tag .
docker push asia-northeast1-docker.pkg.dev/PROJECT/REPO/IMAGE:tag
Kubernetes (K8s)
~コンテナを管理するツール~
Kubernetesとは
Kubernetes (K8s)は、Googleが開発し、現在はCNCFが管理するコンテナオーケストレーションプラットフォームです。詳しくは下記の記事でも解説しています。
Kubernetesの主要概念
| 概念 | 説明 |
|---|---|
| Pod | 1つ以上のコンテナのグループ |
| Deployment | Podのデプロイと管理 |
| Service | Podへのネットワークアクセス |
| ConfigMap/Secret | 設定と機密情報の管理 |
| Namespace | リソースの論理的な分離 |
| Ingress | 外部からのHTTPアクセス制御 |
Kubernetesの機能
| 機能 | 説明 |
|---|---|
| オートスケーリング | 負荷に応じたPod数の自動調整 |
| 自己修復 | 障害発生時の自動再起動 |
| ローリングアップデート | ダウンタイムなしの更新 |
| サービスディスカバリ | Podの自動検出 |
| ストレージ管理 | 永続ストレージの自動プロビジョニング |
Google Kubernetes Engine (GKE)
~Google Cloudで使えるKubernetes~
GKEとは
Google Kubernetes Engine (GKE)は、Google CloudのマネージドKubernetesサービスです。
GKEの特徴
| 特徴 | 説明 |
|---|---|
| マネージド | コントロールプレーンはGoogleが管理 |
| 自動アップグレード | Kubernetesバージョンの自動更新 |
| 自動スケーリング | クラスタとPodの自動スケール |
| 統合監視 | Cloud Monitoringとの連携 |
| セキュリティ | Shielded GKEノード、Workload Identity |
GKEのモード
| モード | 説明 | 管理レベル |
|---|---|---|
| Standard | ノードを自分で管理 | 中 |
| Autopilot | ノードもGoogleが管理 | 低(フルマネージド) |
GKE Autopilot
2024年にさらに強化されたAutopilotの特徴:
- GPUの利用(AI/MLワークロード)
- バースト可能なPodのサポート
- リソース設定の柔軟性向上(1m単位)
- Flexible CUDsの適用
GKEのアーキテクチャ
~コンテナを管理するしくみ~
GKEクラスタの構成
コントロールプレーン
| コンポーネント | 説明 |
|---|---|
| API Server | Kubernetes APIのエントリーポイント |
| Scheduler | Podをノードに配置 |
| Controller Manager | クラスタの状態を管理 |
| etcd | クラスタの状態を保存 |
GKEでは、コントロールプレーンはGoogleがマネージドVPC内で運用します。
ノードプール
同じ設定のノードをグループ化:
# ノードプールの追加
gcloud container node-pools create high-memory-pool \
--cluster=my-cluster \
--zone=asia-northeast1-a \
--machine-type=n2-highmem-4 \
--num-nodes=2
ネットワーキング
| オプション | 説明 |
|---|---|
| VPCネイティブ | Pod IPをVPC IPから割り当て |
| ClusterIP | クラスタ内部のサービス |
| NodePort | ノードのポートで公開 |
| LoadBalancer | 外部ロードバランサーで公開 |
| Ingress | HTTP(S)ルーティング |
2024年のアーキテクチャ更新
- 最大65,000ノードのクラスタをサポート
- マルチCPUアーキテクチャ対応(AMD64、Arm64)
- Google Axion(C4A)プロセッサのサポート
- Kubernetes 1.32がRapidチャネルで利用可能
GKE/K8sを使うメリット
~GKEとCompute Engineの比較~
GKEを使うメリット
| メリット | 説明 |
|---|---|
| 運用負担の軽減 | コントロールプレーンの管理不要 |
| 自動スケーリング | Pod/ノードの自動スケール |
| 自己修復 | 障害時の自動復旧 |
| 宣言的設定 | マニフェストでインフラを定義 |
| ポータビリティ | 他のKubernetes環境への移行が容易 |
Compute Engineとの比較
| 項目 | Compute Engine | GKE |
|---|---|---|
| 抽象化レベル | 低(VM直接管理) | 高(コンテナ) |
| スケーリング | 手動/スクリプト | 自動 |
| デプロイ | 手動/構成管理ツール | kubectl/マニフェスト |
| 可搬性 | 低 | 高 |
| 学習コスト | 低 | 中〜高 |
| 適したワークロード | レガシーアプリ、特殊要件 | マイクロサービス |
選択の基準
適切なサービスの選択
| 要件 | 推奨サービス |
|---|---|
| 完全なVM制御が必要 | Compute Engine |
| Kubernetes機能が必要 | GKE |
| シンプルなコンテナ実行 | Cloud Run |
| イベント駆動関数 | Cloud Functions |
| Webアプリ(簡単) | App Engine |
サーバーレスサービス
~サーバーを意識する必要がないしくみ~
サーバーレスとは
サーバーレスは、インフラストラクチャの管理をクラウドプロバイダーに任せ、コードの実行に集中できるコンピューティングモデルです。
サーバーレスの特徴
| 特徴 | 説明 |
|---|---|
| ゼロ運用 | サーバーのプロビジョニング・管理不要 |
| 自動スケーリング | 需要に応じて自動的にスケール |
| 従量課金 | 使用した分だけ支払い |
| イベント駆動 | イベントに応じて実行 |
Google Cloudのサーバーレスサービス
| サービス | 説明 | 用途 |
|---|---|---|
| App Engine | フルマネージドWebアプリ | Webアプリ、API |
| Cloud Functions | イベント駆動関数 | 軽量処理、トリガー |
| Cloud Run | コンテナベース | 柔軟性が必要な場合 |
2024年の重要な変更
2024年8月、Cloud FunctionsはCloud Runに統合され、「Cloud Run functions」として提供されるようになりました。
これにより:
- Cloud Functionsのイベント駆動モデルとCloud Runの柔軟性が統合
- GPU機能がCloud Run functionsで利用可能に
- より詳細なサービス設定のコントロールが可能に
App Engine
~Webアプリケーション開発のサービス~
App Engineとは
App Engineは、Webアプリケーションやモバイルバックエンドを簡単にデプロイできるフルマネージドPaaSです。
App Engineの環境
| 環境 | 特徴 | 用途 |
|---|---|---|
| スタンダード | 高速スケーリング、ゼロスケール | 一般的なWebアプリ |
| フレキシブル | Dockerコンテナ、カスタムランタイム | カスタム要件 |
スタンダード環境
| 特徴 | 説明 |
|---|---|
| スケーリング | ミリ秒単位で0から自動スケール |
| 料金 | インスタンス時間で課金 |
| ランタイム | Python, Java, Node.js, Go, PHP, Ruby |
| 制限 | リクエストタイムアウトあり |
Cloud Functions(レガシーサービス)
~関数を実行できるサーバーレスサービス~
Cloud Functionsとは
Cloud Functions(現:Cloud Run functions)は、イベント駆動型のサーバーレスコンピューティングサービスです。
サポートするランタイム
| 言語 | バージョン |
|---|---|
| Node.js | 18, 20 |
| Python | 3.9, 3.10, 3.11, 3.12 |
| Go | 1.20, 1.21, 1.22 |
| Java | 11, 17, 21 |
| .NET | 6, 8 |
| Ruby | 3.0, 3.2 |
| PHP | 8.1, 8.2 |
Cloud Run
~コンテナを動かせるサーバーレスサービス~
Cloud Runとは
Cloud Runは、コンテナベースのサーバーレスプラットフォームです。任意の言語・フレームワークで構築したコンテナを実行できます。
Cloud Runの特徴
| 特徴 | 説明 |
|---|---|
| 任意のコンテナ | Dockerイメージを実行 |
| ゼロスケール | リクエストがなければ0にスケール |
| 自動HTTPS | マネージドSSL証明書 |
| カスタムドメイン | 独自ドメインの設定可能 |
| VPC接続 | VPCリソースへのアクセス |
Cloud Run services vs Cloud Run jobs
| タイプ | 用途 |
|---|---|
| services | HTTPリクエストを処理 |
| jobs | バッチ処理、スケジュールタスク |
2024年の機能強化
- デプロイされたイメージの自動セキュリティ更新
- Cloud Run jobsでのGPU利用(プレビュー)
- Cloud Run functions(Cloud Functionsの統合)
Cloud Build
~テストやビルドを自動化~
Cloud Buildとは
Cloud Buildは、Google Cloud上でCI/CDパイプラインを実行するマネージドサービスです。
Cloud Buildの特徴
| 特徴 | 説明 |
|---|---|
| マネージド | インフラ管理不要 |
| 高速 | 並列ビルドで高速化 |
| 統合 | GKE、Cloud Run、App Engineと連携 |
| セキュリティ | VPC Service Controlsサポート |
まとめ
この記事では、コンテナとサーバーレスサービスについて以下の内容を学びました:
- コンテナはアプリケーションを軽量・ポータブルにパッケージ化する技術
- KubernetesはGoogleが開発したコンテナオーケストレーション
- GKEはマネージドKubernetesで、特にAutopilotは運用負担を大幅に軽減
- サーバーレスは運用を最小化するコンピューティングモデル
- App Engineは最もシンプルなWebアプリデプロイ
- Cloud Functions(Cloud Run functions)はイベント駆動の軽量処理
- Cloud Runはコンテナベースの柔軟なサーバーレス
- Cloud Buildで CI/CD を自動化