Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
25 changes: 25 additions & 0 deletions docs/map/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Coverage map

This directory is a [todography](https://github.com/mkmik/todography) map of
which Kubernetes kinds have a template in `k8s.libsonnet`.

- Each directory is an *area*: one built-in API group, or one add-on project.
Its `AREA.md` says which.
- Each other `.md` file is one kind. `status = "done"` means it has a
template; a missing status means it doesn't yet; `dropped` means it is
created by controllers or API calls, so a template would add little.
- Built-in kinds come from Kubernetes v1.37. Add-on areas cover the projects
the library supports plus other widely used ones. Each lists the kinds in
the project's CRDs, and its `AREA.md` names the release and CRD source they
were checked against. Add-on APIs change
versions on their own schedule, so re-check them when bumping.
- `lib/` holds the shared pieces the templates are built on.

```sh
todography lint # check the map
todography next --all # what to add next
todography open # look at it in a browser
```

When you add a template to `k8s.libsonnet`, mark its kind as done here in the
same commit.
7 changes: 7 additions & 0 deletions docs/map/admission/AREA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
+++
title = "admissionregistration.k8s.io"
band = "cluster"
summary = "Admission webhooks and admission policies"
+++

No templates in `k8s.libsonnet` yet. Kinds without a template still work through `k8s.Object { apiVersion, kind }`.
17 changes: 17 additions & 0 deletions docs/map/admission/mutatingadmissionpolicy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
+++
title = "MutatingAdmissionPolicy"
summary = "In-process mutation rules written in CEL"
aka = ["admissionregistration.k8s.io/v1 MutatingAdmissionPolicy"]
kind = "builtin"
intent = "aspiration"
research = "done"
status = "todo"

[[needs]]
on = "/lib/cluster-scoped"
why = "Cluster-wide: must not pick up the shared namespace"
+++

`apiVersion: admissionregistration.k8s.io/v1`, `kind: MutatingAdmissionPolicy`, cluster-wide.

New in v1; wait and see how much it is used.
15 changes: 15 additions & 0 deletions docs/map/admission/mutatingadmissionpolicybinding.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
+++
title = "MutatingAdmissionPolicyBinding"
summary = "Turns a MutatingAdmissionPolicy on for some objects"
aka = ["admissionregistration.k8s.io/v1 MutatingAdmissionPolicyBinding"]
kind = "builtin"
intent = "aspiration"
research = "done"
status = "todo"

[[needs]]
on = "/lib/cluster-scoped"
why = "Cluster-wide: must not pick up the shared namespace"
+++

`apiVersion: admissionregistration.k8s.io/v1`, `kind: MutatingAdmissionPolicyBinding`, cluster-wide.
18 changes: 18 additions & 0 deletions docs/map/admission/mutatingwebhookconfiguration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
+++
title = "MutatingWebhookConfiguration"
summary = "Sends objects to a webhook that can change them"
aka = ["admissionregistration.k8s.io/v1 MutatingWebhookConfiguration"]
kind = "builtin"
intent = "goal"
research = "done"
status = "todo"
milestone = "m2"

[[needs]]
on = "/lib/cluster-scoped"
why = "Cluster-wide: must not pick up the shared namespace"
+++

`apiVersion: admissionregistration.k8s.io/v1`, `kind: MutatingWebhookConfiguration`, cluster-wide.

Ships with every operator that has a mutating webhook.
18 changes: 18 additions & 0 deletions docs/map/admission/validatingadmissionpolicy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
+++
title = "ValidatingAdmissionPolicy"
summary = "In-process validation rules written in CEL"
aka = ["admissionregistration.k8s.io/v1 ValidatingAdmissionPolicy"]
kind = "builtin"
intent = "goal"
research = "done"
status = "todo"
milestone = "m2"

[[needs]]
on = "/lib/cluster-scoped"
why = "Cluster-wide: must not pick up the shared namespace"
+++

`apiVersion: admissionregistration.k8s.io/v1`, `kind: ValidatingAdmissionPolicy`, cluster-wide.

v1 since Kubernetes 1.30.
16 changes: 16 additions & 0 deletions docs/map/admission/validatingadmissionpolicybinding.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
+++
title = "ValidatingAdmissionPolicyBinding"
summary = "Turns a ValidatingAdmissionPolicy on for some objects"
aka = ["admissionregistration.k8s.io/v1 ValidatingAdmissionPolicyBinding"]
kind = "builtin"
intent = "goal"
research = "done"
status = "todo"
milestone = "m2"

[[needs]]
on = "/lib/cluster-scoped"
why = "Cluster-wide: must not pick up the shared namespace"
+++

`apiVersion: admissionregistration.k8s.io/v1`, `kind: ValidatingAdmissionPolicyBinding`, cluster-wide.
18 changes: 18 additions & 0 deletions docs/map/admission/validatingwebhookconfiguration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
+++
title = "ValidatingWebhookConfiguration"
summary = "Sends objects to a webhook that can reject them"
aka = ["admissionregistration.k8s.io/v1 ValidatingWebhookConfiguration"]
kind = "builtin"
intent = "goal"
research = "done"
status = "todo"
milestone = "m2"

[[needs]]
on = "/lib/cluster-scoped"
why = "Cluster-wide: must not pick up the shared namespace"
+++

`apiVersion: admissionregistration.k8s.io/v1`, `kind: ValidatingWebhookConfiguration`, cluster-wide.

Ships with every operator that has a validating webhook.
7 changes: 7 additions & 0 deletions docs/map/apiextensions/AREA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
+++
title = "apiextensions.k8s.io"
band = "cluster"
summary = "CustomResourceDefinitions"
+++

Templates live in `k8s.libsonnet` under `k8s['apiextensions.k8s.io'].v1`.
18 changes: 18 additions & 0 deletions docs/map/apiextensions/customresourcedefinition.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
+++
title = "CustomResourceDefinition"
summary = "Adds a new kind to the API"
aka = ["apiextensions.k8s.io/v1 CustomResourceDefinition", "crd"]
kind = "builtin"
intent = "goal"
research = "done"
status = "done"
refs = ["k8s.libsonnet"]

[[needs]]
on = "/lib/cluster-scoped"
why = "Cluster-wide: must not pick up the shared namespace"
+++

`apiVersion: apiextensions.k8s.io/v1`, `kind: CustomResourceDefinition`, cluster-wide.

Template only.
7 changes: 7 additions & 0 deletions docs/map/apiregistration/AREA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
+++
title = "apiregistration.k8s.io"
band = "cluster"
summary = "Aggregated API servers"
+++

No templates in `k8s.libsonnet` yet. Kinds without a template still work through `k8s.Object { apiVersion, kind }`.
17 changes: 17 additions & 0 deletions docs/map/apiregistration/apiservice.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
+++
title = "APIService"
summary = "Plugs an extra API server into the main one"
aka = ["apiregistration.k8s.io/v1 APIService"]
kind = "builtin"
intent = "aspiration"
research = "done"
status = "todo"

[[needs]]
on = "/lib/cluster-scoped"
why = "Cluster-wide: must not pick up the shared namespace"
+++

`apiVersion: apiregistration.k8s.io/v1`, `kind: APIService`, cluster-wide.

Ships with metrics-server and similar.
7 changes: 7 additions & 0 deletions docs/map/apiserver-internal/AREA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
+++
title = "internal.apiserver.k8s.io"
band = "runtime"
summary = "Storage versions (alpha)"
+++

Every kind in this group is created by the cluster or by API calls, so none of them needs a template.
17 changes: 17 additions & 0 deletions docs/map/apiserver-internal/storageversion.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
+++
title = "StorageVersion"
summary = "Which version each API server stores"
aka = ["internal.apiserver.k8s.io/v1alpha1 StorageVersion"]
kind = "builtin"
intent = "aspiration"
research = "done"
status = "dropped"

[[needs]]
on = "/lib/cluster-scoped"
why = "Cluster-wide: must not pick up the shared namespace"
+++

`apiVersion: internal.apiserver.k8s.io/v1alpha1`, `kind: StorageVersion`, cluster-wide.

Alpha, and written by API servers.
7 changes: 7 additions & 0 deletions docs/map/apps/AREA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
+++
title = "apps"
band = "workloads"
summary = "Deployments, StatefulSets and DaemonSets"
+++

Templates live in `k8s.libsonnet` under `k8s.apps.v1`.
13 changes: 13 additions & 0 deletions docs/map/apps/controllerrevision.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
+++
title = "ControllerRevision"
summary = "A saved revision of a StatefulSet or DaemonSet"
aka = ["apps/v1 ControllerRevision"]
kind = "builtin"
intent = "aspiration"
research = "done"
status = "dropped"
+++

`apiVersion: apps/v1`, `kind: ControllerRevision`.

Created by the cluster or by API calls, not written by hand, so a template would add little.
25 changes: 25 additions & 0 deletions docs/map/apps/daemonset.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
+++
title = "DaemonSet"
summary = "One pod on every node"
aka = ["apps/v1 DaemonSet", "ds"]
kind = "builtin"
intent = "goal"
research = "done"
refs = ["k8s.libsonnet"]

[[feature]]
id = "template"
title = "Template with apiVersion and kind"
status = "done"

[[feature]]
id = "pod-overlays"
title = "Pod template gets the shared PodTemplateSpec overlays"
status = "done"

[[needs]]
on = "/lib/pod-template"
why = "Its pods get the shared overlays"
+++

`apiVersion: apps/v1`, `kind: DaemonSet`.
27 changes: 27 additions & 0 deletions docs/map/apps/deployment.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
+++
title = "Deployment"
summary = "Keeps a set of identical pods running"
aka = ["apps/v1 Deployment", "deploy"]
kind = "builtin"
intent = "goal"
research = "done"
refs = ["k8s.libsonnet"]

[[feature]]
id = "template"
title = "Template with apiVersion and kind"
status = "done"

[[feature]]
id = "pod-overlays"
title = "Pod template gets the shared PodTemplateSpec overlays"
status = "done"

[[needs]]
on = "/lib/pod-template"
why = "Its pods get the shared overlays"
+++

`apiVersion: apps/v1`, `kind: Deployment`.

The main workload kind.
13 changes: 13 additions & 0 deletions docs/map/apps/replicaset.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
+++
title = "ReplicaSet"
summary = "Keeps N copies of a pod"
aka = ["apps/v1 ReplicaSet", "rs"]
kind = "builtin"
intent = "aspiration"
research = "done"
status = "dropped"
+++

`apiVersion: apps/v1`, `kind: ReplicaSet`.

Created and managed by Deployments.
32 changes: 32 additions & 0 deletions docs/map/apps/statefulset.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
+++
title = "StatefulSet"
summary = "Pods with stable names and their own storage"
aka = ["apps/v1 StatefulSet", "sts"]
kind = "builtin"
intent = "goal"
research = "done"
refs = ["k8s.libsonnet"]

[[feature]]
id = "template"
title = "Template with apiVersion and kind"
status = "done"

[[feature]]
id = "pod-overlays"
title = "Pod template gets the shared PodTemplateSpec overlays"
status = "done"

[[feature]]
id = "volume-claim-templates"
title = "volumeClaimTemplates_ keyed by metadata.name"
status = "done"

[[needs]]
on = "/lib/pod-template"
why = "Its pods get the shared overlays"
+++

`apiVersion: apps/v1`, `kind: StatefulSet`.

`serviceName` is optional (documented so since Kubernetes v1.33), so the template doesn't require it.
9 changes: 9 additions & 0 deletions docs/map/argo-cd/AREA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
+++
title = "Argo CD"
band = "addons"
summary = "argoproj.io: GitOps deployment"
+++

No templates in `k8s.libsonnet` yet. Kinds without a template still work through `k8s.Object { apiVersion, kind }`.

Checked against Argo CD v3.5.5: https://github.com/argoproj/argo-cd/tree/v3.5.5/manifests/crds. Argo Rollouts and Argo Workflows share the argoproj.io group but are separate projects, not mapped.
14 changes: 14 additions & 0 deletions docs/map/argo-cd/application.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
+++
title = "Application"
summary = "Something Argo CD deploys from Git and keeps in sync"
aka = ["argoproj.io/v1alpha1 Application", "app"]
kind = "crd"
intent = "goal"
research = "done"
status = "todo"
milestone = "m1"
+++

`apiVersion: argoproj.io/v1alpha1`, `kind: Application`.

Very common in GitOps repositories.
11 changes: 11 additions & 0 deletions docs/map/argo-cd/applicationset.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
+++
title = "ApplicationSet"
summary = "Generates Applications from a template"
aka = ["argoproj.io/v1alpha1 ApplicationSet", "appset"]
kind = "crd"
intent = "aspiration"
research = "done"
status = "todo"
+++

`apiVersion: argoproj.io/v1alpha1`, `kind: ApplicationSet`.
14 changes: 14 additions & 0 deletions docs/map/argo-cd/appproject.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
+++
title = "AppProject"
summary = "Limits what a group of Argo CD Applications may deploy, and where"
aka = ["argoproj.io/v1alpha1 AppProject", "appproj"]
kind = "crd"
intent = "goal"
research = "done"
status = "todo"
milestone = "m1"
+++

`apiVersion: argoproj.io/v1alpha1`, `kind: AppProject`.

Very common in GitOps repositories.
Loading
Loading