Google Kubernetes Engine (GKE) は、Google Cloud Platform (GCP) が提供するマネージド Kubernetes サービスです。Kubernetes は、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのオープンソースのコンテナオーケストレーションシステムです。GKEを使用することで、Kubernetesの複雑なインフラストラクチャ管理をGoogleに委託し、アプリケーション開発と運用に集中することができます。
GKEクラスタは以下の主要コンポーネントで構成されています:
コンポーネント | 説明 |
---|---|
コントロールプレーン | クラスタの状態を管理し、ワークロードのスケジューリングや監視を行うKubernetesマスターコンポーネント群。GKEではこれらをGoogleが管理 |
ノードプール | 同じ構成を持つ複数のノード(VM)のグループ。異なる構成のワークロード用に複数のノードプールを作成可能 |
ノード | コンテナを実行するCompute Engineインスタンス。各ノードにはKubeletエージェントが実行され、コントロールプレーンと通信 |
ポッド | Kubernetesの最小デプロイ単位。1つ以上のコンテナとストレージリソースで構成 |
サービス | ポッドのグループに対する単一のエンドポイントとロードバランシングを提供 |
GKEには2つの運用モードがあります:
GKEクラスタは、Google Cloud Console、gcloud CLIツール、またはTerraformなどのIaCツールを使用して作成できます。
gcloud container clusters create my-cluster \
--zone asia-northeast1-a \
--num-nodes 3 \
--machine-type e2-standard-4
gcloud container clusters create-auto my-autopilot-cluster \
--region asia-northeast1
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
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は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
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
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のコストを最適化するためのベストプラクティス:
gcloud container node-pools create spot-pool \
--cluster=my-cluster \
--spot \
--machine-type=e2-standard-4 \
--num-nodes=3 \
--zone=asia-northeast1-a
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でノードメトリクスを確認 |
クラスタの自動スケーリングが機能しない | リソース要求の未設定、クォータ制限、構成の誤り |
ポッドのリソース要求が設定されていることを確認 クォータ制限を確認 自動スケーリングの設定を確認 |
kubectl get nodes
- ノードの一覧と状態を表示kubectl top nodes
- ノードのリソース使用率を表示kubectl top pods
- ポッドのリソース使用率を表示kubectl get events --sort-by=.metadata.creationTimestamp
- 時系列順にイベントを表示kubectl describe pod <pod-name>
- ポッドの詳細情報とイベントを表示kubectl logs <pod-name> -c <container-name>
- コンテナのログを表示kubectl exec -it <pod-name> -- /bin/bash
- ポッド内でシェルを実行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は他の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の基本概念を理解し、適切なクラスタ構成、リソース管理、セキュリティ対策、モニタリング戦略を実装することが重要です。また、定期的なアップグレードとメンテナンスを行い、最新の機能と改善を取り入れることで、アプリケーションの信頼性と効率性を維持することができます。