Node.jsアプリケーションDeployment

環境変数、HTTPヘルスエンドポイント、水平スケーリング用の設定可能なレプリカを持つNode.jsアプリケーション用のKubernetes Deploymentを作成します。

Web Servers

詳細な説明

KubernetesでのNode.js

KubernetesにNode.jsアプリケーションをデプロイするには、ヘルスチェックエンドポイント、環境変数管理、リソースサイジングに注意が必要です。Node.jsはシングルスレッドのため、CPU制限はマルチスレッドランタイムとは異なる影響を持ちます。

主要な設定

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-app
  labels:
    app: "node-app"
    version: "v1"
spec:
  replicas: 3
  template:
    spec:
      containers:
        - name: node
          image: node:20-alpine
          ports:
            - name: http
              containerPort: 3000
          env:
            - name: NODE_ENV
              value: "production"
            - name: PORT
              value: "3000"
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500m"
              memory: "512Mi"
          livenessProbe:
            httpGet:
              path: /health
              port: 3000
            initialDelaySeconds: 15
            periodSeconds: 20
          readinessProbe:
            httpGet:
              path: /ready
              port: 3000
            initialDelaySeconds: 5
            periodSeconds: 10

ヘルスエンドポイント

Node.jsアプリケーションは2つの異なるエンドポイントを公開する必要があります:

  • /health(liveness):プロセスが生存しデッドロックしていない場合に200を返します。軽量に保ちます — データベースチェックは不要です。
  • /ready(readiness):アプリがトラフィックを処理する準備ができたら200を返します。データベース接続チェック、キャッシュウォームアップなどを含めることができます。

メモリに関する考慮事項

Node.jsはガベージコレクション対象のヒープを使用します。64ビットシステムのデフォルトヒープ制限は約1.5GBです。メモリ制限が低い場合は--max-old-space-sizeフラグを設定してください。512Miメモリ制限のコンテナでは、非ヒープメモリの余地を残すために--max-old-space-size=384を設定すべきです。

スケーリング

replicas: 3では、Kubernetesが3つのポッド間でトラフィックを分散します。Node.jsはシングルスレッドのため、水平スケーリング(より多くのポッド)が垂直スケーリング(ポッドあたりのCPU増加)よりも効果的です。動的スケーリングにはHorizontal Pod Autoscalerの追加を検討してください。

ユースケース

適切な環境設定とヘルスチェックによる自動回復を備えた、Node.js REST API、Expressサーバー、Next.jsアプリケーションのKubernetesへのデプロイ。

試してみる — K8s Pod Spec Builder

フルツールを開く