ヘルスチェック付きNginx Deployment

レプリカ、リソース制限、liveness/readinessプローブ、Kubernetesサービス用の適切なラベリングを備えた本番環境対応のNginx Deploymentマニフェストを構築します。

Web Servers

詳細な説明

本番Nginx Deployment

本番環境のNginxデプロイメントにはコンテナイメージだけでなく、ポッドがトラフィックを配信していることを確認するヘルスチェック、ノイジーネイバー問題を防ぐリソース制限、サービスディスカバリー用の適切なラベルが必要です。

主要な設定

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: web
  labels:
    app: "nginx"
    tier: "frontend"
spec:
  replicas: 3
  selector:
    matchLabels:
      app: "nginx"
  template:
    spec:
      containers:
        - name: nginx
          image: nginx:1.25-alpine
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          resources:
            requests:
              cpu: "50m"
              memory: "64Mi"
            limits:
              cpu: "200m"
              memory: "128Mi"
          livenessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 5
            periodSeconds: 10
          readinessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 3
            periodSeconds: 5

なぜAlpineか?

フルイメージの代わりにnginx:1.25-alpineを使用すると、コンテナサイズが約140MBから約40MBに削減されます。プルの高速化、ストレージの削減、攻撃面の縮小を実現します。Alpineベースのイメージは本番Kubernetesデプロイメントの標準です。

リソースサイジング

静的ファイルを配信する一般的なNginxリバースプロキシの場合:

  • Requests(保証リソース):50m CPU、64Miメモリ
  • Limits(最大許容量):200m CPU、128Miメモリ

これらの値により、スケジューラがポッドを適切に配置し、単一のポッドが過剰なクラスタリソースを消費することを防ぎます。トラフィックパターンとページサイズに基づいて調整してください。

ヘルスチェック

livenessプローブはNginxがポート80で応答しているかを確認します。3回連続で失敗すると(デフォルトのfailureThreshold)、Kubernetesはコンテナを再起動します。readinessプローブはポッドがServiceからトラフィックを受信する準備ができているかを判断します。

ユースケース

適切なヘルスチェック、リソース管理、複数レプリカによる高可用性を備えた本番環境のNginx Webサーバーまたはリバースプロキシのデプロイ。

試してみる — K8s Pod Spec Builder

フルツールを開く