Google Cloud Platformに戻る

GKE (Google Kubernetes Engine)

GKEとは

Google Kubernetes Engine (GKE) は、Google Cloud Platform (GCP) が提供するマネージド Kubernetes サービスです。Kubernetes は、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのオープンソースのコンテナオーケストレーションシステムです。GKEを使用することで、Kubernetesの複雑なインフラストラクチャ管理をGoogleに委託し、アプリケーション開発と運用に集中することができます。

GKEの主な特徴

GKEのアーキテクチャ

GKEクラスタは以下の主要コンポーネントで構成されています:

コンポーネント 説明
コントロールプレーン クラスタの状態を管理し、ワークロードのスケジューリングや監視を行うKubernetesマスターコンポーネント群。GKEではこれらをGoogleが管理
ノードプール 同じ構成を持つ複数のノード(VM)のグループ。異なる構成のワークロード用に複数のノードプールを作成可能
ノード コンテナを実行するCompute Engineインスタンス。各ノードにはKubeletエージェントが実行され、コントロールプレーンと通信
ポッド Kubernetesの最小デプロイ単位。1つ以上のコンテナとストレージリソースで構成
サービス ポッドのグループに対する単一のエンドポイントとロードバランシングを提供

Autopilot モードと Standard モード

GKEには2つの運用モードがあります:

GKEクラスタの作成

GKEクラスタは、Google Cloud Console、gcloud CLIツール、またはTerraformなどのIaCツールを使用して作成できます。

Google Cloud Consoleを使用したクラスタ作成

  1. Google Cloud Consoleにログイン
  2. Kubernetes Engineページに移動
  3. 「クラスタを作成」をクリック
  4. Standard または Autopilot モードを選択
  5. クラスタの名前、リージョン、ネットワーク設定などを構成
  6. 「作成」をクリックしてクラスタをプロビジョニング

gcloud CLIを使用したクラスタ作成

Standard クラスタの作成例

gcloud container clusters create my-cluster \
    --zone asia-northeast1-a \
    --num-nodes 3 \
    --machine-type e2-standard-4

Autopilot クラスタの作成例

gcloud container clusters create-auto my-autopilot-cluster \
    --region asia-northeast1

GKEでのアプリケーションデプロイ

GKEにアプリケーションをデプロイするには、Kubernetesのマニフェストファイル(YAML)を使用します。以下は基本的なデプロイメントとサービスの例です:

デプロイメントの例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

サービスの例

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
  type: LoadBalancer

これらのマニフェストを適用するには、以下のコマンドを使用します:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

GKEの高度な機能

水平ポッド自動スケーリング(HPA)

CPUやメモリの使用率に基づいてポッドの数を自動的にスケールします:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

ノード自動スケーリング

GKEはポッドの要求に基づいてノードプールを自動的にスケールできます。これはクラスタ作成時または既存のクラスタで有効にできます:

gcloud container clusters update my-cluster \
    --enable-autoscaling \
    --min-nodes 1 \
    --max-nodes 10 \
    --zone asia-northeast1-a

GKE Ingress

GKE IngressはGoogle Cloud Load Balancerを自動的にプロビジョニングし、HTTPSトラフィックをサービスにルーティングします:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80

GKEのセキュリティベストプラクティス

ネットワークポリシーの例

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

GKEのモニタリングとロギング

GKEはGoogle Cloud Monitoringおよびロギングと統合されており、クラスタの健全性とパフォーマンスを監視できます:

主なモニタリング機能

カスタムメトリクスの収集

アプリケーション固有のメトリクスを収集するには、Prometheus形式でメトリクスを公開し、Cloud Monitoringで収集できます:

apiVersion: v1
kind: Service
metadata:
  name: prometheus-service
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/path: '/metrics'
    prometheus.io/port: '8080'
spec:
  selector:
    app: myapp
  ports:
  - port: 8080

GKEのコスト最適化

GKEのコストを最適化するためのベストプラクティス:

Spot VMの使用例

gcloud container node-pools create spot-pool \
    --cluster=my-cluster \
    --spot \
    --machine-type=e2-standard-4 \
    --num-nodes=3 \
    --zone=asia-northeast1-a

GKEのトラブルシューティング

GKEで発生する一般的な問題とその解決方法:

問題 考えられる原因 解決策
ポッドが起動しない リソース不足、イメージプル失敗、構成エラー kubectl describe pod <pod-name>でイベントを確認
kubectl logs <pod-name>でログを確認
サービスにアクセスできない セレクタの不一致、ポート構成の誤り、ファイアウォールルール kubectl describe service <service-name>で設定を確認
kubectl get endpoints <service-name>でエンドポイントを確認
ノードの問題 リソース枯渇、ディスク容量不足、カーネルの問題 kubectl describe node <node-name>でノードの状態を確認
Cloud Monitoringでノードメトリクスを確認
クラスタの自動スケーリングが機能しない リソース要求の未設定、クォータ制限、構成の誤り ポッドのリソース要求が設定されていることを確認
クォータ制限を確認
自動スケーリングの設定を確認

診断コマンド集

GKEのバージョンアップグレード

GKEクラスタは定期的にアップグレードして、最新の機能、バグ修正、セキュリティパッチを適用することが重要です:

アップグレードの種類

クラスタのアップグレード例

gcloud container clusters upgrade my-cluster \
    --master \
    --zone asia-northeast1-a

ノードプールのアップグレード例

gcloud container clusters upgrade my-cluster \
    --node-pool=default-pool \
    --zone asia-northeast1-a

アップグレードのベストプラクティス

GKEとの統合サービス

GKEは他のGoogle Cloudサービスと統合して、より強力なソリューションを構築できます:

サービス 統合の利点
Cloud Build コンテナイメージのビルドとGKEへの継続的デプロイメント
Artifact Registry コンテナイメージの安全な保存と脆弱性スキャン
Cloud SQL マネージドデータベースサービスとの安全な接続
Secret Manager 機密情報の安全な管理と利用
Cloud CDN GKEアプリケーションのコンテンツ配信の高速化
Cloud Armor GKEアプリケーションのDDoS保護とWAF
Anthos ハイブリッドおよびマルチクラウド環境でのKubernetes管理

まとめ

Google Kubernetes Engine (GKE) は、Kubernetesの管理の複雑さを軽減しながら、スケーラビリティ、信頼性、セキュリティを提供するマネージドKubernetesサービスです。AutopilotモードとStandardモードの選択肢により、様々なユースケースに対応できます。

GKEの主な利点は以下の通りです:

GKEを効果的に活用するには、Kubernetesの基本概念を理解し、適切なクラスタ構成、リソース管理、セキュリティ対策、モニタリング戦略を実装することが重要です。また、定期的なアップグレードとメンテナンスを行い、最新の機能と改善を取り入れることで、アプリケーションの信頼性と効率性を維持することができます。