installer: env and app manager
diff --git a/core/installer/kustomization.go b/core/installer/kustomization.go
new file mode 100644
index 0000000..8b96668
--- /dev/null
+++ b/core/installer/kustomization.go
@@ -0,0 +1,46 @@
+package installer
+
+import (
+	"bytes"
+	"io"
+	"io/ioutil"
+
+	"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 ReadKustomization(r io.Reader) (*Kustomization, error) {
+	contents, err := ioutil.ReadAll(r)
+	if err != nil {
+		return nil, err
+	}
+	var ret Kustomization
+	if err = yaml.UnmarshalStrict(contents, &ret); err != nil {
+		return nil, err
+	}
+	return &ret, nil
+}
+
+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
+}