· Kubernetes と コンテナ · 6 min read
Kubernetes Engine でコンテナオーケストレーションを始める:初心者向け実践ガイド
Google Kubernetes Engine (GKE) を使用してコンテナオーケストレーションを始める方法を解説します。初心者向けの実践的なステップバイステップガイド。

はじめに:なぜ Google Kubernetes Engine (GKE) なのか?
コンテナ化されたアプリケーションの運用は、現代のソフトウェア開発において重要な役割を果たしています。Google Kubernetes Engine (GKE) は、このプロセスを大幅に簡素化し、開発者と運用チームの負担を軽減します。
GKE を選ぶ主な理由:
- マネージドサービスによる運用負荷の軽減
- Google のインフラストラクチャを活用した高可用性と信頼性
- スケーラビリティと柔軟性の向上
- クラウドネイティブ開発の促進
GKE の主な特徴と利点
- 自動スケーリング:トラフィックに応じてアプリケーションを自動的にスケールアップ/ダウン
- ロードバランシング:トラフィックを効率的に分散し、アプリケーションのパフォーマンスを最適化
- 自動修復:障害が発生したノードやコンテナを自動的に検出し、再起動または置換
- アップグレードの自動化:Kubernetes のバージョンアップやセキュリティパッチの適用を自動化
- 統合モニタリングとロギング:Cloud Monitoring と Cloud Logging との統合による可視性の向上
GKE を始める準備:環境のセットアップ
- Google Cloud Consoleにアクセスし、アカウントを作成またはログイン
- 新しいプロジェクトを作成:
gcloud projects create my-gke-project --name="My GKE Project"
- Kubernetes Engine API を有効化:
gcloud services enable container.googleapis.com
- 必要なツールのインストール:
クラスタの作成:GKE の中心となる要素
GKE クラスタは、Kubernetes を実行するための管理されたインフラストラクチャです。
GKE ダッシュボードで「クラスタを作成」をクリック、または以下のコマンドを使用:
gcloud container clusters create my-first-cluster \ --num-nodes=3 \ --zone=us-central1-a
クラスタの主な設定項目:
- クラスタ名
- リージョンまたはゾーン
- ノードプールの構成(マシンタイプ、ノード数)
- ネットワーキング(VPC ネットワーク、サブネット)
- セキュリティ設定(認証方式、ネットワークポリシー)
コンテナイメージの準備:アプリケーションのパッケージング
- サンプルアプリケーション(Node.js)の作成:
// app.js
const express = require("express");
const app = express();
const port = process.env.PORT || 3000;
app.get("/", (req, res) => {
res.send("Hello from GKE!");
});
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
- Dockerfile の作成:
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "node", "app.js" ]
- イメージのビルドとプッシュ:
docker build -t gcr.io/[PROJECT-ID]/myapp:v1 .
docker push gcr.io/[PROJECT-ID]/myapp:v1
デプロイメントの作成:アプリケーションの展開
- デプロイメント定義ファイル(deployment.yaml)の作成:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3 # ポッドの数
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: gcr.io/[PROJECT-ID]/myapp:v1
ports:
- containerPort: 3000
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
- デプロイメントの適用:
kubectl apply -f deployment.yaml
- デプロイメントの確認:
kubectl get deployments
kubectl get pods
サービスの公開:アプリケーションへのアクセス
- サービス定義ファイル(service.yaml)の作成:
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: LoadBalancer
selector:
app: myapp
ports:
- port: 80
targetPort: 3000
- サービスの作成:
kubectl apply -f service.yaml
- サービスの確認と外部 IP の取得:
kubectl get services
https://cloud.google.com/kubernetes-engine/docs/concepts/service-load-balancer?hl=ja
スケーリングとアップデート:アプリケーションの管理
- 手動スケーリング:
kubectl scale deployment myapp --replicas=5
- 自動スケーリング(Horizontal Pod Autoscaler)の設定:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
- ローリングアップデート:
新しいバージョンのイメージをプッシュした後:
kubectl set image deployment/myapp myapp=gcr.io/[PROJECT-ID]/myapp:v2
モニタリングとロギング:アプリケーションの監視
- Cloud Monitoring ダッシュボードの設定
- カスタムメトリクスの作成
- アラートの設定
- Cloud Logging を使用したログの表示と分析
セキュリティ対策:アプリケーションとインフラストラクチャの保護
- RBAC(Role-Based Access Control)の設定:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
- Network Policy の適用:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: restrict-access
spec:
podSelector:
matchLabels:
app: myapp
ingress:
- from:
- podSelector:
matchLabels:
access: allowed
Secret と ConfigMap の使用:機密情報と設定の管理
コンテナのセキュリティスキャン:Container Analysis API の活用
リソース管理:効率的なリソース利用
- ResourceQuota の設定:
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
- LimitRange の設定:
apiVersion: v1
kind: LimitRange
metadata:
name: limit-range
spec:
limits:
- default:
cpu: 200m
memory: 512Mi
defaultRequest:
cpu: 100m
memory: 256Mi
type: Container
CI/CD との統合:継続的デリバリーの実現
- Cloud Build を使用したビルドパイプラインの構築
- GitOps アプローチの導入:ArgoCD or Flux の使用
- Canary Deployment の実装
トラブルシューティング:一般的な問題と解決方法
ポッドが起動しない場合:
kubectl describe pod [POD_NAME] kubectl logs [POD_NAME]
サービスにアクセスできない場合:
kubectl get services kubectl describe service [SERVICE_NAME]
ノードの問題:
kubectl get nodes kubectl describe node [NODE_NAME]
リソース不足:
kubectl top nodes kubectl top pods
まとめ:GKE によるコンテナオーケストレーションの価値
GKE を使用することで、堅牢でスケーラブルなコンテナ環境を簡単に構築、管理できます。主な利点は以下の通りです:
- インフラストラクチャ管理の簡素化
- アプリケーションのスケーラビリティと可用性の向上
- 開発から本番環境までのシームレスな移行
- セキュリティとコンプライアンスの強化
- 運用コストの最適化
次のステップとして、より複雑なアプリケーションのデプロイ、マイクロサービスアーキテクチャの導入、高度な Kubernetes 機能の活用などに挑戦してみてください。
より詳細な情報は、以下のリソースを参照してください:
- 公式ドキュメント:GKE documentation
GKE を使いこなすことで、クラウドネイティブな開発と運用の世界が広がります。ぜひ、この強力なツールを活用して、革新的なアプリケーションを構築してください!