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
では単純にデプロイできないようだ。
解決策
kubectl apply
ではなくkubectl create
やkubectl replace
を使おう。今回はCI/CDで使い回したかったので下記のようなコマンドを使うことにした。
$ kubectl replace -f dashboard.yaml || kubectl create -f dashboard.yaml
他にいい方法あったらぜひ教えて下さい 🙏