kubectl applyでデプロイする際には容量制限に気をつける

kubenertesを使っていてハマったのでメモ。

kubectl apply -f でエラー

kubectl apply が便利なので何でもかんでもこれでデプロイをしていたが、とあるリソースファイルをデプロイしようとしたところ以下のようなエラーが

$ kubectl apply -f dashboard.yaml
The ConfigMap "dashboard" is invalid: metadata.annotations: Too long: must have at most 262144 characters

原因

kubectl apply ではロールバックなどのために更新前のリソースファイルをmetadata.annotationsに自動的に格納してくれている。metadata.annotationsの容量制限は256KBであるため、本来容量上限が1MBのConfigMapやSecretでも256KBを超えるとkubectl apply では単純にデプロイできないようだ。

github.com

解決策

kubectl applyではなくkubectl createkubectl replace を使おう。今回はCI/CDで使い回したかったので下記のようなコマンドを使うことにした。

$ kubectl replace -f dashboard.yaml || kubectl create -f dashboard.yaml

他にいい方法あったらぜひ教えて下さい 🙏