Kubernetesで重複定義した環境変数を片方削除するとResource側の環境変数が消えるZennryo-yamaoka😭Kubernetesで重複定義した環境変数を片方削除するとResource側の環境変数が消える2022/03/16に公開・約10,800字ツイートKubernetestechはじめにKubernetesの環境変数周りで予期しない挙動に遭遇して事故ったので挙動・対処法を共有したいと思います。らくどのKubernetesでも再現するかと思いますが、今回はローカルで簡単に構築できるkindを使います。下記なんの変哲もないDeploymentをベースに確認を進めます。<none>以下のように環境変数が想定通りセットされています。環境変数を重複させる先程のManifestを以下のように編集しapplyします。sample2エラーが出るかと思いきや特に問題無く成功します。diffも出ないのでこの段階で気が付くことは難しいでしょう。configureddiffが無いので当然Resourceの環境変数にも変化はありません。削除しようとすると追加時には出なかったdiffが発生します。configureddiffの通り無慈悲にSAMPLE_ENV_VAR2が消滅してしまいます。値は既存と重複させてもさせなくても同様の挙動になります。新規作成時に重複がある場合の挙動このように重複させた値で新規作成すると警告は出ますがそのままapplyされ、特段エラーが出ることもなく正常にPodが立ち上がります。42sそしてPodの設定としてはconfiguredで重複させた時と違って同じ値が2つ存在しますが、実際にPod内部から見える値はどうもManifestで後ろに書いた値となるようです。順序を入れ替えると以下のようになります。SAMPLESAMPLE_ENV_VAR1=sample1SAMPLE_ENV_VAR2=sample2肝心の重複箇所を片方削除した場合の挙動ですが、やはり先程と同様に当該環境変数が消えてしまいます。(予防)何らかのLinterを導入する但し既存では存在しないかも。(火消し)もう一度同じManifestでapplyすれば現状との差分が埋まるため意図した状態に戻ります。applyを実行するなりCI/CDフローをもう一度回すなりして再デプロイしましょう。(地雷処理)前述した通り迂闊に削除すると環境変数が足りないPodがデプロイされ事故が発生するので何らかの回避策が必要です。思いつく方法としてはDeploymentを別名で作成しServiceのLabelSelectorを一時的に切り替えてトラフィックを逃してやりその間に修復することでしょうか。French.バッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフト券が還元されます。(地雷処理)考察まとめZennエンジニアのための情報共有コミュニティAboutZennについて運営会社お知らせ・リリースGuides使い方Publicationよくある質問LinksTwitterGitHubメディアキットLegal利用規約プライバシーポリシ。