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を通じて管理されます。

試してみる — K8s Pod Spec Builder

フルツールを開く