例えば my-secret という Secret オブジェクトが Kubernetes の default ネームスペースに存在するとき、その .data.apiKey をランダムな UUID で置き換えたいとする。そのときは次のようなコマンドを実行すればよい。

kubectl get secret my-secret -o json | jq --arg apiKey "$(cat /proc/sys/kernel/random/uuid | tr -d '\n' | base64 -w 0)" '.data["apiKey"]=$apiKey' | kubectl apply -f -

十分に読める内容だと思うけど、説明をすると次のようになる。

  1. cat /proc/sys/kernel/random/uuid でランダムな UUID を取得する
  2. Kubernetes の Secret は base64 値で保存する必要があるので、パイプでつなげて base64 にしている (結果を apiKey という変数に保存する)
  3. 現状の my-secret から .data.apiKeyapiKey で置き換えて、それをパイプ経由で kubectl apply する

補足

本来であれば Kubernetes に変更を加えるときは、変更履歴を追えるようにするべきだ。具体的には YAML ファイルを Git で管理して、Git リポジトリへのプッシュをトリガーにして Kubernetes に変更を加えるようにするとよい。なお Helm や Kustomize を使う場合でも考え方は同じで、変更内容をファイルとして Git で管理して履歴を残すのが正しいプラクティスである。

上記の内容はワンライナーのシェルスクリプトで Kubernetes の Secret を変更しており、行儀が悪い。想定としては Kubernetes の初期設定の一環として実行することを想定している。