· Kubernetes と コンテナ  · 6 min read

Kubernetes Engine でコンテナオーケストレーションを始める:初心者向け実践ガイド

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

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

はじめに:なぜ Google Kubernetes Engine (GKE) なのか?

コンテナ化されたアプリケーションの運用は、現代のソフトウェア開発において重要な役割を果たしています。Google Kubernetes Engine (GKE) は、このプロセスを大幅に簡素化し、開発者と運用チームの負担を軽減します。

GKE を選ぶ主な理由:

  • マネージドサービスによる運用負荷の軽減
  • Google のインフラストラクチャを活用した高可用性と信頼性
  • スケーラビリティと柔軟性の向上
  • クラウドネイティブ開発の促進

GKE概要図:コンテナ、ポッド、ノード、クラスタの関係を示す図

GKE の主な特徴と利点

  1. 自動スケーリング:トラフィックに応じてアプリケーションを自動的にスケールアップ/ダウン
  2. ロードバランシング:トラフィックを効率的に分散し、アプリケーションのパフォーマンスを最適化
  3. 自動修復:障害が発生したノードやコンテナを自動的に検出し、再起動または置換
  4. アップグレードの自動化:Kubernetes のバージョンアップやセキュリティパッチの適用を自動化
  5. 統合モニタリングとロギング:Cloud Monitoring と Cloud Logging との統合による可視性の向上

GKE を始める準備:環境のセットアップ

  1. Google Cloud Consoleにアクセスし、アカウントを作成またはログイン
  2. 新しいプロジェクトを作成:
    gcloud projects create my-gke-project --name="My GKE Project"
    
  3. Kubernetes Engine API を有効化:
    gcloud services enable container.googleapis.com
    
  4. 必要なツールのインストール:

クラスタの作成:GKE の中心となる要素

GKE クラスタは、Kubernetes を実行するための管理されたインフラストラクチャです。

  1. GKE ダッシュボードで「クラスタを作成」をクリック、または以下のコマンドを使用:

    gcloud container clusters create my-first-cluster \
      --num-nodes=3 \
      --zone=us-central1-a
    
  2. クラスタの主な設定項目:

    • クラスタ名
    • リージョンまたはゾーン
    • ノードプールの構成(マシンタイプ、ノード数)
    • ネットワーキング(VPC ネットワーク、サブネット)
    • セキュリティ設定(認証方式、ネットワークポリシー)

GKEクラスタ作成画面のスクリーンショット

コンテナイメージの準備:アプリケーションのパッケージング

  1. サンプルアプリケーション(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}`);
});
  1. Dockerfile の作成:
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "node", "app.js" ]
  1. イメージのビルドとプッシュ:
docker build -t gcr.io/[PROJECT-ID]/myapp:v1 .
docker push gcr.io/[PROJECT-ID]/myapp:v1

デプロイメントの作成:アプリケーションの展開

  1. デプロイメント定義ファイル(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
  1. デプロイメントの適用:
kubectl apply -f deployment.yaml
  1. デプロイメントの確認:
kubectl get deployments
kubectl get pods

サービスの公開:アプリケーションへのアクセス

  1. サービス定義ファイル(service.yaml)の作成:
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  type: LoadBalancer
  selector:
    app: myapp
  ports:
    - port: 80
      targetPort: 3000
  1. サービスの作成:
kubectl apply -f service.yaml
  1. サービスの確認と外部 IP の取得:
kubectl get services

https://cloud.google.com/kubernetes-engine/docs/concepts/service-load-balancer?hl=ja

GKEサービス公開の概念図:ロードバランサーとポッドの関係を示す

スケーリングとアップデート:アプリケーションの管理

  1. 手動スケーリング:
kubectl scale deployment myapp --replicas=5
  1. 自動スケーリング(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
  1. ローリングアップデート:

新しいバージョンのイメージをプッシュした後:

kubectl set image deployment/myapp myapp=gcr.io/[PROJECT-ID]/myapp:v2

モニタリングとロギング:アプリケーションの監視

  1. Cloud Monitoring ダッシュボードの設定
  2. カスタムメトリクスの作成
  3. アラートの設定
  4. Cloud Logging を使用したログの表示と分析
GKEモニタリングダッシュボードのサンプル画面

セキュリティ対策:アプリケーションとインフラストラクチャの保護

  1. 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"]
  1. Network Policy の適用:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-access
spec:
  podSelector:
    matchLabels:
      app: myapp
  ingress:
    - from:
        - podSelector:
            matchLabels:
              access: allowed
  1. Secret と ConfigMap の使用:機密情報と設定の管理

  2. コンテナのセキュリティスキャン:Container Analysis API の活用

リソース管理:効率的なリソース利用

  1. ResourceQuota の設定:
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
  1. 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 との統合:継続的デリバリーの実現

  1. Cloud Build を使用したビルドパイプラインの構築
  2. GitOps アプローチの導入:ArgoCD or Flux の使用
  3. Canary Deployment の実装

トラブルシューティング:一般的な問題と解決方法

  1. ポッドが起動しない場合:

    kubectl describe pod [POD_NAME]
    kubectl logs [POD_NAME]
    
  2. サービスにアクセスできない場合:

    kubectl get services
    kubectl describe service [SERVICE_NAME]
    
  3. ノードの問題:

    kubectl get nodes
    kubectl describe node [NODE_NAME]
    
  4. リソース不足:

    kubectl top nodes
    kubectl top pods
    

まとめ:GKE によるコンテナオーケストレーションの価値

GKE を使用することで、堅牢でスケーラブルなコンテナ環境を簡単に構築、管理できます。主な利点は以下の通りです:

  • インフラストラクチャ管理の簡素化
  • アプリケーションのスケーラビリティと可用性の向上
  • 開発から本番環境までのシームレスな移行
  • セキュリティとコンプライアンスの強化
  • 運用コストの最適化

次のステップとして、より複雑なアプリケーションのデプロイ、マイクロサービスアーキテクチャの導入、高度な Kubernetes 機能の活用などに挑戦してみてください。

より詳細な情報は、以下のリソースを参照してください:

GKE を使いこなすことで、クラウドネイティブな開発と運用の世界が広がります。ぜひ、この強力なツールを活用して、革新的なアプリケーションを構築してください!

Back to Blog

Related Posts