ヘルスチェック付き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サーバーまたはリバースプロキシのデプロイ。