Kustomize¶
The Windsor CLI facilitates building Kubernetes systems by introducing a rational approach to composing Kubernetes configuration using Flux and Kustomize.
Folder Structure¶
The following files and folders are relevant when working with Kubernetes in a Windsor project.
contexts/
└── local/
├── .kube/
│ └── config
└── blueprint.yaml
kustomize/
└── my-app/
├── prometheus/
│ ├── kustomization.yaml
│ └── service-monitor.yaml
├── kustomization.yaml
├── deployment.yaml
└── service.yaml
In this example structure, the app my-app
consists of a simple deployment and service. It also includes a Kustomize component. The component pattern is used heavily by the Windsor project. In this example, the component adds Prometheus support.
Blueprint¶
The following example blueprint.yaml
now references my-app
:
kind: Blueprint
apiVersion: blueprints.windsorcli.dev/v1alpha1
metadata:
name: example-project
description: This blueprint outlines example resources
repository:
url: http://github.com/my-org/example-project
ref:
branch: main
secretName: flux-system
sources:
- name: core
url: github.com/windsorcli/core
ref:
branch: main
terraform:
- source: core
path: cluster/talos
- source: core
path: gitops/flux
kustomize:
- name: my-app
path: my-app
components:
- prometheus
Each entry under kustomize
follows the Flux Kustomization spec. As such, you may include patches and any other necessary settings for modifying the behavior of my-app
.
When running windsor up --install
or windsor install
, all Kustomization resources are applied to your cluster. This involves creating GitRepository resources from the corresponding repository
and sources
, as well as Kustomizations.
You can observe these resources on your cluster by running the following commands,
To see the GitRepository resources run:
kubectl get gitrepository -A
To see Kustomizations, run:
kubectl get kustomizations -A
You will find these all placed in the system-gitops
namespace.
Importing Resources¶
You can import Kustomize resources from remote sources. To import a component from core
, add the following under the blueprint's kustomize
section:
...
kustomize:
- name: system-csi
path: system-csi
source: core
components:
- longhorn
This would result in importing the system-csi
resource from core
, and specifically using the longhorn
driver. By including the source
field referencing core
, this reference will be used when the Kustomization is generated on your cluster.