This repository contains the Kubernetes-facing components of Brewlet:
- the node lifecycle and
JavaApplicationcontrollers; - the pod and
NodeProfileadmission webhook; - the
NodeProfileandJavaApplicationAPI types and CRDs; - raw Kubernetes deployment manifests; and
- the Brewlet Helm chart.
The runtime shim and node provisioner source live in
brewlet/brewlet. Architecture and API
specifications live in brewlet/specs, and
the user documentation lives in brewlet/site.
helm install brewlet ./charts/brewlet \
--set provisioner.jdks="temurin-21,microsoft-25" \
--set provisioner.launchers="jaz"The chart installs the CRDs, operator, admission webhook, and the RBAC used by
the operator-managed node provisioner. The default NodeProfile targets every
unclaimed node. Configure named profiles when provisioning should be restricted
to platform-owned node pools.
kubectl get nodeprofiles
kubectl get nodes -L brewlet.sh/runtimeSee the Brewlet installation guide for cluster prerequisites and production configuration.
temurin and microsoft use built-in image mappings. For another distribution,
provide its fully qualified OCI image and Java home directly in the
NodeProfile. For example, Azul Zulu 21:
apiVersion: node.brewlet.sh/v1alpha1
kind: NodeProfile
metadata:
name: zulu
spec:
nodePool:
names: ["zulu-workers"]
jdks:
- distribution: zulu
feature: 21
source:
image: docker.io/library/azul-zulu:21
javaHome: /usr/lib/jvm/zulu21Use a digest-pinned image in production. The image must support every
architecture in the selected pool, contain <javaHome>/bin/java, and provide the
runtime's required userland libraries. javaHome may point to a centrally built
jlink runtime; Brewlet installs it once per node pool rather than placing it in
each application artifact.
kubectl apply -f deploy/nodeprofile-crd.yaml
kubectl apply -f deploy/javaapplication-crd.yaml
kubectl apply -f deploy/node-provisioner.yaml
kubectl apply -f config/operator.yaml
kubectl apply -f deploy/sample-nodeprofile.yamlThe raw manifests use these images:
| Component | Image |
|---|---|
| Operator | ghcr.io/brewlet/operator |
| Admission webhook | ghcr.io/brewlet/admission |
| Node provisioner | ghcr.io/brewlet/node-provisioner |
The Go module is rooted at the repository root.
make build
make test
make test-envtest
make helm-checkBuild the component images with the repository root as the Docker context:
docker build -t ghcr.io/brewlet/operator:dev .
docker build -t ghcr.io/brewlet/admission:dev . --build-arg CMD=admission.
├── api/ NodeProfile and JavaApplication API types
├── charts/brewlet/ Helm chart and packaged CRDs
├── cmd/manager/ Kubernetes operator
├── cmd/admission/ Admission webhook
├── config/ Raw operator RBAC and Deployment
├── deploy/ CRDs, samples, and raw manifests
└── internal/ Controllers, admission logic, and tests