kubectl で owner reference をセットする

2020/10/16に公開

Kubernetes には関連リソースをGCするときに使える metadata.ownerReferences というフィールドがあります。

client-go や controller-runtime を使用していると難なくセットできるこのフィールドですが、
kubectl にはサブコマンドが用意されていません。
ですので kubectl プラグインを使用しない場合は kubectl patch や kubectl edit を使うことになります。

kubectl patch

kubectl patchを使う方法を紹介します。

今回は、Deployment a を ConfigMap b の親とすることにします。

まず親となるリソースのUIDを取得します。

$ kubectl get deploy a -o json | jq -r .metadata.uid
xxx-yyy-zzz-000

このUIDを使って以下のような patch.json を用意してください。

{
	"metadata": {
		"ownerReferences": [{
			"apiVersion": "v1",
			"kind": "Deployment",
			"name": "a",
			"uid": "xxx-yyy-zzz-000"
		}]
	}
}

これを使ってkubectl patchを実行します。

$ kubectl patch cm b --patch "$(cat patch.json)"

手順は終わりです。Deployment a を消すと ConfigMap b も消えることが確認できます。

参考

Discussion