# apps Kubernetes community-managed project infrastructure in the form of apps that run on the `aaa` cluster. See [running-in-community-clusters.md] for more details ## proposed format Each directory in here corresponds to a single `app`, which means: - the app runs in a namespace named `app` on the `aaa` cluster - the app is owned by a SIG, as designated by a `sig/foo` label in OWNERS - app managers are members of the `k8s-infra-rbac-{app}@kubernetes.io` group - the app's k8s resources all have the label `app: {app}` - any secrets needed by this app are implemented via `ExternalSecret` CRDs (TODO(https://github.com/kubernetes/k8s.io/issues/2220)) The expected layout for a given app is: ``` {app} # the k8s namespace this runs in, managed by k8s-infra-rbac-{app}@kubernetes.io ├── OWNERS # must have relevant reviewers/approvers, and labels: [sig/foo, area/apps/{app}] ├── README.md # what is it, who owns it, how to deploy it ├── deploy.sh # ideally "how to deploy it" == run this script └── *.yaml # kubernetes resources / manifests, deployable via kubectl apply -f ``` Expect this to change as we iterate toward convergence on a standard that actually fits the apps we run today. ## known issues - enforcement - OWNER constraints enforced by humans - no validation of yaml beyond yamllint - `app:` convention enforcement by humans - `*.yaml` can be more than k8s resources - consider a `resources/` subdir convention for all k8s resources - allows for config files etc. at app root - `app:` label convention - cert-manager has multiple `app:` labels: `cainjector`, `cert-manager`, `webhook`, and many empty - consider a custom label `k8s-infra-app:`; could do prefix but then need to decide on a DNS name - is this a convention worth enforcing? perhaps namespace is enough [running-in-community-clusters.md]: /running-in-community-clusters.md