diff --git a/core/installer/io/kustomization.go b/core/installer/io/kustomization.go
new file mode 100644
index 0000000..d21c71d
--- /dev/null
+++ b/core/installer/io/kustomization.go
@@ -0,0 +1,53 @@
+package io
+
+import (
+	"bytes"
+	"golang.org/x/exp/slices"
+	"io"
+
+	"sigs.k8s.io/yaml"
+)
+
+type Kustomization struct {
+	ApiVersion string   `json:"apiVersion,omitempty"`
+	Kind       string   `json:"kind,omitempty"`
+	Resources  []string `json:"resources,omitempty"`
+}
+
+func NewKustomization() Kustomization {
+	return Kustomization{
+		ApiVersion: "kustomize.config.k8s.io/v1beta1",
+		Kind:       "Kustomization",
+		Resources:  []string{},
+	}
+}
+
+func (k Kustomization) Write(w io.Writer) error {
+	contents, err := yaml.Marshal(k)
+	if err != nil {
+		return err
+	}
+	if _, err := io.Copy(w, bytes.NewReader(contents)); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (k *Kustomization) AddResources(names ...string) {
+	for _, name := range names {
+		if !slices.Contains(k.Resources, name) {
+			k.Resources = append(k.Resources, name)
+		}
+	}
+}
+
+func (k *Kustomization) RemoveResources(names ...string) {
+	for _, name := range names {
+		for i, r := range k.Resources {
+			if r == name {
+				k.Resources = slices.Delete(k.Resources, i, i+1)
+				break
+			}
+		}
+	}
+}
