ConfigMapボリュームマウント付きNginx
Kubernetes ConfigMapに保存されたカスタム設定ファイルを使用してNginxをデプロイし、コンテナ内の/etc/nginx/conf.d/にボリュームとしてマウントします。
Web Servers
詳細な説明
ConfigMap経由のカスタムNginx設定
Nginx設定の変更ごとにカスタムDockerイメージをビルドする代わりに、Kubernetes ConfigMapに設定を保存してコンテナにマウントできます。12-factorアプリの方法論に従い、設定をコンテナイメージから分離します。
主要な設定
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-custom
labels:
app: "nginx-custom"
spec:
replicas: 2
template:
spec:
containers:
- name: nginx
image: nginx:1.25-alpine
ports:
- name: http
containerPort: 80
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/conf.d
readOnly: true
volumes:
- name: nginx-config
configMap:
name: nginx-conf
ConfigMapの作成
デプロイ前にNginx設定でConfigMapを作成します:
kubectl create configmap nginx-conf \
--from-file=default.conf=./my-nginx.conf
マウントの詳細
ボリュームマウントは/etc/nginx/conf.d/ディレクトリ全体をConfigMapの内容で置き換えます。ConfigMap内の各キーがマウントされたディレクトリ内のファイルになります。readOnly: trueを使用すると、コンテナがマウントされた設定を誤って変更することを防ぎます。
ホットリロード
ConfigMapを更新すると、Kubernetesは最終的にマウントされたボリュームに変更を伝播します(デフォルトで最大1分かかります)。ただし、Nginxは自動的に設定をリロードしません。ファイル変更を監視してNginxにSIGHUPを送信するサイドカーか、デプロイメントのローリングリスタートが必要です。
ユースケース
コンテナイメージとは独立して設定を変更する必要がある場合のNginxリバースプロキシまたはロードバランサーのデプロイ。GitOpsワークフローでConfigMapを通じて管理されます。