インフラ作業支援ラボInfra Support Lab ← ガイド一覧← 戻る

Kubernetes ConfigMap・Secretの確認・更新手順|反映されない原因も解説

Kubernetesでアプリの設定値・機密情報を扱う際、ConfigMapとSecretの違い、設定の参照方法、更新がPodへ反映される条件を整理する運用ガイドです。値を表示しない確認コマンドから始めます。

この記事の目的

設定を保持するオブジェクトの確認と、反映方式によるPod再起動の要否・セキュリティ上の注意を整理します。

まず確認すること

kubectl config current-contextで接続先を確認し、kubectl get configmaps/secrets -n appで対象を特定します。

本番作業前:Secret値をget -o yamlや画面キャプチャで公開しないこと。base64は暗号化ではありません。 app・APP・POD_NAMEなどは説明用です。作業前にcontext・namespace・対象オブジェクトを照合してください。

1. ConfigMapとSecretの役割

比較ConfigMapSecret
主な内容秘密ではない設定値・設定ファイルパスワード・トークン・鍵など
API上の扱い通常の設定オブジェクト秘匿情報を扱う専用オブジェクト
注意点設定でも機密情報が混ざることがあるbase64は暗号化ではない。RBAC・暗号化保存・外部Secrets管理を設計
Podへの渡し方環境変数・Volume環境変数・Volumeなど

Secretだからといってアクセス制御や保管場所の検討が不要になるわけではありません。Secretを読めるRBAC権限や暗号化保存(etcdのEncryption at Rest等)は別途確認します。

2. 値を露出させず対象と参照関係を確認

# 接続先とNamespaceを特定 kubectl config current-context kubectl get namespaces # 値を出さずに対象の名前・型を確認 kubectl get configmaps -n app kubectl get secrets -n app # 利用中PodとDeploymentの名前を確認 kubectl get pods -n app kubectl get deployments -n app # 自分の権限を確認 kubectl auth can-i get secrets -n app

権限がない場合はForbiddenになるので、対象の不存在と混同しないでください。get secret -o yamlやdescribe configmapは値を含む場合があり、共有前に必ず伏せます。

3. 環境変数とVolumeの反映差

Podへの設定方法更新後の挙動運用上の確認
環境変数起動済みコンテナの環境変数は自動更新されないPod再作成・再起動等による反映と影響範囲を計画
通常のVolumeマウント更新がkubeletの同期を通じて反映されることがある即時とは限らない。アプリが読み直すか確認
subPathによるマウントConfigMap/Secret変更が反映されないPod再作成等の反映手順を設計

ConfigMap・SecretのVolume更新とアプリの設定再読込は別です。新ファイルが見えるだけでは業務への反映を保証できません。

4. Deployment側の参照を確認

# 参照対象のマニフェストを見る(出力中の環境変数等に注意) kubectl get deployment APP -n app -o yaml # 更新状況の参照 kubectl rollout history deployment/APP -n app kubectl rollout status deployment/APP -n app --timeout=120s

PodテンプレートのenvFrom・configMapKeyRef・secretKeyRef・volumes・volumeMountsを確認します。参照先のNamespaceはPodと同じかどうか、オブジェクト名・キー名の一致も確認します。

5. ConfigMapの変更前検証と反映例

以下は機密情報を含まないConfigMapを検証する例です。Secretの値は同じ方法で平文ファイルに書かないでください。GitOpsやCI管理下では手作業で更新せず、管理元の変更フローを優先します。

# app-settings.yaml(検証用。値に秘密を入れない) apiVersion: v1 kind: ConfigMap metadata: name: app-settings namespace: app data: LOG_LEVEL: "info"
# 参照: 対象・Namespace・権限の確認 kubectl config current-context kubectl auth can-i patch configmaps -n app # APIサーバーの検証機構を使って確認(保存はしない) kubectl apply --dry-run=server -f app-settings.yaml # 差分確認: 0=変更なし、1=変更あり、1より大きい=エラー kubectl diff -f app-settings.yaml # 作業承認・変更元の整合確認後にのみ実行(実際に変更される) kubectl apply -f app-settings.yaml
実行前監査:差分・API Serverの接続先・対象Namespace・オブジェクト名・影響するPodを確認してください。--dry-run=serverはリソースを永続保存せず、APIの検証を行いますが、アプリケーションの実行時動作やGitOpsの再上書きまでは保証しません。kubectl diffは更新前のSecret値を含むようなYAMLに対して安易に使わないでください。

変更前に「どのアプリ・Podで利用しているか」「どのGitOps/CI定義が管理元か」「いつ・どう反映するか」「切り戻せるか」を確認します。GitOps管理下で手動のkubectl editを行っても宣言的な値で上書きされる場合があります。

注意:機密値を平文のYAMLやコマンドライン引数に残す作業は避けます。環境に応じてSecrets管理システムや暗号化済みマニフェスト等の運用方式を利用してください。

Deploymentの変更・再起動が必要な場合はDeploymentの更新・切り戻し手順を参照してください。

6. 差分・反映方式・切り戻しの判断

以下は機密情報を含まないConfigMapの想定例です。Secret値は出力しません。まずGitOps/CIの管理元から変更前の定義(旧版)を安全に確保し、利用Pod・アプリの設定読み込み方式を記録してください。

検証結果(想定)次の行動
kubectl diff終了コード0差分なし。変更対象や管理元を再確認し、不要なapply・restartを実施しない
kubectl diff終了コード1差分を確認。ConfigMapのキー削除・追加、参照Pod、環境変数かVolumeかを照合し、影響と復旧手段を承認後に変更する
kubectl diff終了コードが1より大きい、またはserver dry-run失敗不正な定義・RBAC・Webhook・接続先の問題を調べ、反映を中止する
ConfigMapは更新できたがアプリへ未反映環境変数は既存Podへ自動反映されない。通常Volumeは遅延して更新され得るが、subPathは自動反映されない。アプリの再読込可否を確認し、必要なら管理元からPod更新を計画する
新設定でエラー・業務不具合影響範囲と証跡を保全。管理元に保持した旧ConfigMap定義へ戻す手続きを承認のうえ行い、必要なPod再作成とアプリの機能確認を実施
# 参照・検証のみ(秘密情報を含まない管理済み定義) kubectl apply --dry-run=server -f app-settings.yaml kubectl diff -f app-settings.yaml # 反映後はオブジェクトとDeploymentの状態を確認 kubectl get configmap app-settings -n app kubectl rollout status deployment/APP -n app --timeout=120s

注意:通常のkubectl applyの成功は既存Podの設定反映を保証せず、rollout statusの成功も業務正常を保証しません。設定を変更する場合は影響するアプリの実動作・Pod Ready・ログ・Service経由の応答で完了判断します。元の定義が不明なら手動切り戻しを行わず、GitOps管理者へエスカレーションします。Kubernetes公式 — ConfigMapの更新と反映差。

7. 反映後に検証する項目

更新後にPodが起動できない場合はCrashLoopBackOffの調査、レジストリ認証が関係する場合はImagePullBackOffの調査へ進みます。

公式・一次資料

対象と実行前チェックを継続する

読み取り操作、設定変更、削除操作を分け、作業後の状態と業務影響を確認します。

柱ガイドへ戻る