Common components of application stacks that are provided as supporting services to tenant workloads on a Kubernetes application platform.
This is a repository of different open source application components that are aggregated and modified with some best practices that we have found useful. You can use these manifests to install the various application supporting services as-is, or more likely, you can use them as a starting point for developing:
- Helm charts
- Kustomize overlays
- Kubernetes operators using Operator Builder
- vendir - download different formats from upstream
- yaml-overlay-tool - overlay opinions from downloaded manifests
-
Opinionated Manifests - provide opinions about what a real world deployment looks like for common projects.
-
Common Format - no guessing about whether to use Helm, Kustomize, Git, HTTP, OCI, etc. Everything in this repo is output in raw Kubernetes manifests. In most cases, you can
kubectl applydirectly. -
Updates - an opinionated pipeline makes updating versions both trackable via Git (e.g. see what changed), and easy to perform with the used tooling.
-
Consistent Structure - consistent naming for the output manifests:
ServiceAccount,Role,RoleBinding,ClusterRole,ClusterRoleBinding==rbac.yamlConfigMap,Secret,ExternalSecret==config.yamlCustomResourceDefinition==crds.yamlMutatingWebhookConfiguration,ValidatingWebhookConfiguration==webhook.yamlCertificate,Issuer,ClusterIssuer==certificates.yamlDeployment==deployment.yamlStatefulSet==statefulset.yamlDaemonSet==daemonset.yamlJob,CronJob==job.yamlService==service.yamlIngress==ingress.yamlIngressClass==ingress-class.yamlNetworkPolicy==networkpolicy.yamlPodDisruptionBudget==poddisruptionbudget.yaml- Mutually exclusive variants use a suffix, pick one (e.g.
service-aws.yaml,service-nodeport.yaml)
This library is the companion to the Platform Component Library (PCL). The two libraries share the same tooling, structure and development workflow, but they hold different kinds of components.
-
Platform Component Library - platform concerns. Services that make the cluster itself usable by any tenant, whether or not a given workload knows they exist. Examples are ingress, certificate management, identity and secrets management.
-
Application Component Library (this library) - application concerns. Services that an application directly depends on as part of its own stack and consumes by connecting to them. Examples are databases, caches, message queues and event streams, object storage and search.
When deciding where a new project belongs, ask whether a tenant application would list it as one of its own dependencies:
| Platform (PCL) | Application (ACL) | |
|---|---|---|
| Consumed by | the cluster and every tenant, often implicitly | a specific application, explicitly |
| Typical interface | Kubernetes resources (e.g. Ingress, Certificate, ExternalSecret) |
a network endpoint the app connects to (e.g. a Postgres connection string) |
| Typical categories | e.g. certificates, identity, ingress, secrets |
e.g. database, cache, messaging, storage, search |
| Labels | platform.nukleros.io/* |
application.nukleros.io/* |
Application components commonly rely on platform components (e.g. a database operator using cert-manager for TLS), so install the platform components first.
See .source/$CATEGORY for a list of supported projects where $CATEGORY is the
category of the project.