Kubernetes の Secret を CLI で書き換える

例えば 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 - 十分に読める内容だと思うけど、説明をすると次のようになる。 cat /proc/sys/kernel/random/uuid でランダムな UUID を取得する Kubernetes の Secret は base64 値で保存する必要があるので、パイプでつなげて base64 にしている (結果を apiKey という変数に保存する) 現状の my-secret から .data.apiKey を apiKey で置き換えて、それをパイプ経由で kubectl apply する 補足 本来であれば Kubernetes に変更を加えるときは、変更履歴を追えるようにするべきだ。具体的には YAML ファイルを Git で管理して、Git リポジトリへのプッシュをトリガーにして Kubernetes に変更を加えるようにするとよい。なお Helm や Kustomize を使う場合でも考え方は同じで、変更内容をファイルとして Git で管理して履歴を残すのが正しいプラクティスである。 [Read More]