Skip to content

Commit 093380b

Browse files
feat(platform): newest stable platform on Kubernetes v1.36.5; UBI 10 + Python 3.14 (#12)
* feat(platform): Kubernetes v1.36.5, Istio 1.31.1, KEDA 2.21 + HTTP 0.16, Strimzi 1.2, CNPG 0.29.1 Move the platform installers to the newest stable releases: - setup-capstone-profile.sh pins --kubernetes-version=v1.36.5 (KUBE_VERSION override), requires minikube >= 1.39.0, and refuses an existing profile whose driver/runtime/Kubernetes version does not match. - Istio 1.31.1 (scripts/setup-istio.sh). The capstone setup-istio.sh now checks that istioctl on PATH matches the pinned ISTIO_VERSION before it installs a control plane; setup-kiali.sh pins quay.io/kiali/kiali:v2.31.0, the release the addon's floating v2.31 tag resolves to. - KEDA core 2.21.0 and HTTP add-on 0.16.0. interceptor.readinessTimeout replaces the deprecated interceptor.replicas.waitTimeout; timeouts are 504, not 502; cluster-status.sh reads the standard Ready condition. - Strimzi operator 1.2.0 (root and capstone installers). - CloudNativePG chart 0.29.1 (operator 1.30.1); primary-pod selectors use cnpg.io/instanceRole=primary instead of the deprecated role=primary. - Observability charts pinned: prometheus 29.36.1, grafana 13.4.0, tempo 3.1.0 (Tempo service port indices re-checked against 3.1.0). * feat(capstone): Strimzi v1 CRs + Kafka 4.3.1, Postgres 18.6, Apicurio 3.3.3, OpenMetadata 2.0.5 - kafka subchart: kafka.strimzi.io/v1 (the only API Strimzi 1.x serves), strimzi.io/kraft and strimzi.io/node-pools annotations dropped, and spec.kafka.version set from the new subchart value `version` ("4.3.1"). The umbrella strimziCluster.version was never read by a template and is removed. Rendered Kafka, KafkaNodePool and KafkaTopic validate against strimzi-crds-1.2.0.yaml. - postgres subchart pins ghcr.io/cloudnative-pg/postgresql:18.6-standard-trixie instead of the operator default; the remaining demos and setup-openmetadata.sh select the primary by cnpg.io/instanceRole=primary. - Apicurio Registry 3.3.3; Kafka UI pinned to ghcr.io/kafbat/kafka-ui:v1.5.0 (was the floating latest tag). - OpenMetadata chart, server and ingestion images 2.0.5. The dependencies chart's OpenSearch is pinned to 3.4.0: 3.5.0 rejects the UUID-format X-Request-Id the 2.0.5 server sends, which fails every search-index write. Its fsgroup init container is pinned to busybox:1.38.0 (was latest). get_token.py no longer spells out the default admin login. - debug-ephemeral.sh uses registry.access.redhat.com/ubi10/ubi:10.2-1791444044. * fix(demos): hold the KEDA-scaled consumer up; demo-order deploys inventory Ported from the minikube-on-fedora live run (2026-10-09): - demos/lib/keda.sh adds keda_hold_replicas / keda_release. KEDA scales notification-service to zero when there is no lag, including between a demo's steps; demo-kafka, demo-avro and demo-notifications now hold its ScaledObject at one replica (autoscaling.keda.sh/paused-replicas) and release the hold on exit. demo-notifications' restart-and-reread durability check depended on a replica being up. demo-keda-kafka still shows the zero -> up -> zero cycle. - demo-order.sh builds and deploys inventory-service before placing its order: POST /orders checks stock over gRPC, and another demo's cleanup may have removed inventory. It already ordered the stocked WIDGET-001. * feat(services): UBI 10 python-314-minimal; asyncpg 0.32; pinned OpenTelemetry - All seven service Containerfiles (and the scaffold-service.sh template) build on registry.access.redhat.com/ubi10/python-314-minimal:10.2-1791464217 (was the floating ubi9/python-312:latest); fallback ubi9/python-314. - asyncpg ^0.32.0 for its cp314 wheel (the minimal image has no compiler); pyproject.toml and poetry.lock match the minikube-on-fedora capstone. - OpenTelemetry auto-instrumentation pinned to opentelemetry-distro 0.66b1 and opentelemetry-exporter-otlp 1.45.1 (was unpinned). The install runs under a pip constraint of the already-installed venv: unconstrained, it upgraded protobuf to 7.x past the project's <6 pin that the committed gRPC stubs (generated with protobuf 5.29) were built for. - GRPC_DNS_RESOLVER=native was already set in order-service and graphql-gateway; its comment now points at onboarding/LESSONS-LEARNED.md. All seven images and a scaffolded service build with docker build on Docker Engine; each imports app.main on Python 3.14.8. * feat(openshift): newest stable image pins for the CRC appendix - Core chart: postgres 16-alpine -> 18.6-alpine, apache/kafka 3.8.0 -> 4.3.1 (mirrored refs and upstream refs), Apicurio 3.2.4 -> 3.3.3; build-and-push.sh --mirror-infra mirrors the new tags. Both infra images were smoke-tested with docker using the chart's PGDATA layout and KRaft env. Postgres 18 cannot open a 16 data directory: an existing CRC install needs a fresh PVC. - otel-lgtm 0.8.1 -> 0.36.0; Prefect 3-latest -> 3.8.8-python3.14 (server, worker, README). - OpenMetadata 1.12.8 -> 2.0.5 (chart, mirrored server, ingestion Job) with OpenSearch held at 3.4.0 and its init container pinned to busybox:1.38.0. Documents that the opensearch.serviceAccount block does not bind (the 2026-10-07 run patched the StatefulSet by hand). - Operator Subscriptions and the OSSM3 Istio version are left as-is: CSVs can't be resolved without a cluster and are re-checked at the next CRC run. Evidence files under openshift/evidence/ are unchanged (historical). * docs: record the newest-stable platform bump (DRA-020) - _plans/decisions.md: DRA-020, dated 2026-10-09, with the full version table, the KEDA HTTP / Strimzi / CNPG / OpenMetadata behaviour changes, the rejected alternatives (Kiali 2.33, OpenSearch 3.5, InterceptorRoute) and what carries over from minikube-on-fedora's CAP-048..051. - _plans/reconciliation.md: two unverified rows (minikube stack, CRC image pins) with the offline evidence; the live run is pending. - README, examples/lgtm-datamesh/README.md, setup.html, GETTING-STARTED: minikube >= 1.39.0, Kubernetes v1.36.5, kubectl 1.36, Istio 1.31.1, the pinned component versions, Python 3.14 on UBI 10. - Chapter 10 names the UBI 10 base; chapter 11 and diagram 19 show the new CRC mirror tags, and the CRC verification status gains a note that the 2026-10-07 run used the earlier pins and the CSVs are re-checked at the next CRC run. The verification text itself is unchanged (historical). - LESSONS-LEARNED: a component's newest release can break its neighbour (OpenSearch 3.5 vs OpenMetadata 2.0.5, OpenTelemetry vs the protobuf pin, KEDA scaling a demo's consumer to zero). - audit-fedora-prereqs.sh: the istio-current hint names 1.31.1. * fix(scripts): prereq audit checks for minikube 1.39.0 The read-only Fedora audit still compared against the old 1.36 floor; setup-capstone-profile.sh now requires 1.39.0 for Kubernetes v1.36.5. * docs(plans): DRA-020 verified live on Docker Engine and minikube 1.39
1 parent 79140d9 commit 093380b

97 files changed

Lines changed: 905 additions & 476 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎README.md‎

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,16 +79,16 @@ end to end, verified order-independent (see
7979

8080
| Layer | Technology | Role |
8181
|---|---|---|
82-
| Services | Python 3.12, FastAPI, SQLAlchemy + Alembic, Poetry | Five domain services + GraphQL gateway; migrations via init-containers |
82+
| Services | Python 3.14 on UBI 10 (`ubi10/python-314-minimal`), FastAPI, SQLAlchemy + Alembic, Poetry | Five domain services + GraphQL gateway; migrations via init-containers |
8383
| Protocols | REST (OpenAPI), gRPC (Protobuf/buf), GraphQL (SDL), Kafka (Avro) | The deliberate protocol mix: cross-product APIs, hot paths, read surface, async spine |
8484
| Packaging | Helm (umbrella chart + per-service subcharts), Docker Engine | One chart tree for the whole system; images built on the host and loaded into the minikube node |
85-
| Substrate | Kubernetes v1.32 on minikube (Docker driver, containerd + runc) | The whole system on one 24 GB profile |
86-
| Database | CloudNativePG operator, PostgreSQL | One shared cluster, schema-per-service ownership |
87-
| Events | Strimzi operator, Apache Kafka | The asynchronous spine (`order-placed` topic) |
88-
| Contracts | Apicurio Registry | OpenAPI + Protobuf + GraphQL SDL (discovery) and Avro (runtime, Confluent-compatible API) |
89-
| Catalog | OpenMetadata (+ OpenSearch) | Service inventory, ownership, cross-product lineage |
90-
| Mesh | Istio | mTLS, traffic splitting for the v1→v2 contract canary |
91-
| Autoscaling | KEDA (core + HTTP add-on) | Consumer-lag scaling for event consumers, request-based scale-to-zero for the gateway |
85+
| Substrate | Kubernetes v1.36.5 on minikube 1.39 (Docker driver, containerd + runc) | The whole system on one 24 GB profile |
86+
| Database | CloudNativePG 1.30 operator, PostgreSQL 18 | One shared cluster, schema-per-service ownership |
87+
| Events | Strimzi 1.2 operator, Apache Kafka 4.3 (KRaft) | The asynchronous spine (`order-placed` topic) |
88+
| Contracts | Apicurio Registry 3.3 | OpenAPI + Protobuf + GraphQL SDL (discovery) and Avro (runtime, Confluent-compatible API) |
89+
| Catalog | OpenMetadata 2.0 (+ OpenSearch 3.4) | Service inventory, ownership, cross-product lineage |
90+
| Mesh | Istio 1.31 | mTLS, traffic splitting for the v1→v2 contract canary |
91+
| Autoscaling | KEDA 2.21 (core + HTTP add-on 0.16) | Consumer-lag scaling for event consumers, request-based scale-to-zero for the gateway |
9292
| Observability | Prometheus, Tempo, Grafana, Kiali, OpenTelemetry | Metrics, cross-product traces, dashboards, live mesh topology |
9393
| Site | Jekyll / GitHub Pages | The ten-page reading set with paired SVG + Excalidraw diagrams |
9494

@@ -131,7 +131,9 @@ cd examples/lgtm-datamesh
131131
```
132132

133133
The verified configuration is Fedora 44 with Docker Engine, 64 GB RAM
134-
(24 GB for the minikube profile), and minikube ≥ 1.36.
134+
(24 GB for the minikube profile), and minikube ≥ 1.39.0, which runs the pinned
135+
Kubernetes v1.36.5. Exact component versions are pinned in the setup scripts
136+
and charts (see DRA-020 in `_plans/decisions.md`).
135137

136138
An optional OpenShift Local (CRC) appendix uses podman. <!-- forbidden-ok -->
137139

‎_docs/10-summary.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ job extends to giving every domain a *trusted base* to layer on.
188188
![A trusted base for every data product — the supply chain the platform gives each domain]({{ '/assets/diagrams/17-trusted-supply-chain.svg' | relative_url }})
189189

190190
The deck pairs this reference with OpenShift's specific supply chain:
191-
Red Hat Universal Base Image (UBI) — `ubi9/python-311` is the base for
191+
Red Hat Universal Base Image (UBI) — `ubi10/python-314-minimal` is the base for
192192
every Python service in the reference. UBI is freely redistributable
193193
and enterprise-maintained, which means a domain team gets a base image
194194
they can use without licensing constraints and that's patched on a

‎_docs/11-running-on-openshift-crc.md‎

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ images with no further wiring. Pushing auto-creates an ImageStream per image in
337337
namespace, which is how the internal registry tracks what it's holding.
338338

339339
**One real snag worth planning for.** The CRC VM's outbound networking does not
340-
necessarily reach Docker Hub — a direct `podman pull docker.io/library/postgres:16-alpine`
340+
necessarily reach Docker Hub — a direct `podman pull docker.io/library/postgres:18.6-alpine`
341341
run *inside* the cluster's image-pull path can fail with something like `dial tcp
342342
registry-1.docker.io:443: i/o timeout`, which shows up as `postgres-0`/`kafka-0` stuck in
343343
`ImagePullBackOff` after `helm install`. The *host* running `podman`/`oc`, by contrast,
@@ -349,15 +349,15 @@ directly:
349349
./openshift/build-and-push.sh -r "$REG" -n datamesh --mirror-infra
350350
```
351351

352-
which pulls `docker.io/library/postgres:16-alpine` and `docker.io/apache/kafka:3.8.0` on
353-
the host, retags them into `$REG/datamesh/postgres:16-alpine` and
354-
`$REG/datamesh/kafka:3.8.0`, and pushes — exactly the refs `values.yaml`'s
352+
which pulls `docker.io/library/postgres:18.6-alpine` and `docker.io/apache/kafka:4.3.1` on
353+
the host, retags them into `$REG/datamesh/postgres:18.6-alpine` and
354+
`$REG/datamesh/kafka:4.3.1`, and pushes — exactly the refs `values.yaml`'s
355355
`postgres.image`/`kafka.image` default to. On a cluster whose CRC VM *does* have Docker
356356
Hub egress, skip `--mirror-infra` and uncomment the commented upstream `docker.io/...`
357357
lines in `values.yaml` instead; both forms are left in the file, one active.
358358

359359
Apicurio needs no such mirror: its image lives on `quay.io`
360-
(`quay.io/apicurio/apicurio-registry:3.2.4`), which CRC's networking reaches directly, so
360+
(`quay.io/apicurio/apicurio-registry:3.3.3`), which CRC's networking reaches directly, so
361361
`apicurio.yaml`'s Deployment references it unmirrored.
362362
363363
![Building and pushing: the host bridges the CRC VM's Docker Hub egress gap; Apicurio pulls from quay.io directly]({% raw %}{{ '/assets/diagrams/19-crc-image-delivery.svg' | relative_url }}{% endraw %})
@@ -774,6 +774,16 @@ endpoint. The full capture is committed at
774774
limitation.
775775
- OpenMetadata's server component remains unverified live, blocked on an external
776776
registry quota rather than anything this build controls.
777+
- The verification above ran on the appendix's earlier image pins
778+
(`postgres:16-alpine`, `kafka:3.8.0`, Apicurio 3.2.4, otel-lgtm 0.8.1, Prefect
779+
`3-latest`, OpenMetadata 1.12.8). On 2026-10-09 the pins moved to the newest
780+
stable tags (`postgres:18.6-alpine`, `kafka:4.3.1`, Apicurio 3.3.3, otel-lgtm
781+
0.36.0, Prefect 3.8.8-python3.14, OpenMetadata 2.0.5 with OpenSearch 3.4.0;
782+
DRA-020); they have
783+
not been run on CRC yet. Postgres 18 cannot open a 16 data directory, so an
784+
existing install needs a fresh PVC. The operator CSVs (Service Mesh 3, Custom
785+
Metrics Autoscaler) and the OSSM3 Istio version can't be resolved without a
786+
cluster; they are re-checked at the next CRC run.
777787
- **OpenShift GitOps** (the `Application` at `openshift/gitops/application.yaml`) and
778788
**OpenShift Pipelines** (Tekton) remain authored, not applied — no operators for
779789
either were installed for either verification pass.

‎_plans/decisions.md‎

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -857,3 +857,101 @@ status table of what is published and reachable.
857857
- Membership in the `docker` group is root-equivalent on the host.
858858
- CI gate scan 5 in `scripts/forbidden-syntax.sh` enforces the podman scope.
859859
- Live verification (2026-10-08/09): passed on Docker Engine 29.8.0 provided by Docker Desktop with the docker driver and containerd 2.2.1; see `_plans/reconciliation.md`. `ensure_node_forwarding` did not fire (the node's `FORWARD` policy was already `ACCEPT`). The live run also surfaced three fixes now in the scripts: bootstrap's service list ordering, endpoint checks accepting `LoadBalancer` Services, and `build-image.sh` waiting for its rollouts and for replaced pods to terminate. gRPC clients set `GRPC_DNS_RESOLVER=native`. A native (non-VM) Docker Engine run is still to do.
860+
861+
---
862+
863+
## DRA-020 — Newest stable platform on Kubernetes v1.36.5; UBI 10 + Python 3.14
864+
865+
**Status:** decided 2026-10-09; verified live 2026-10-09 on Docker Engine
866+
29.8.2 + minikube 1.39.0 (bootstrap, every demo group, walkthrough 5/5,
867+
stop/start; see `_plans/reconciliation.md`). The CRC appendix is re-checked at
868+
its next run.
869+
870+
**Context.** User decision on 2026-10-09: every component on its newest stable
871+
release, checked upstream (GitHub releases excluding pre-releases, the Helm
872+
repo indexes, `skopeo` for image tags), with exact pins and no floating tags.
873+
Kubernetes is the newest minor every component supports. Istio 1.29 reaches
874+
end of life on 2026-10-12. The parent repo `minikube-on-fedora` made the same
875+
move and verified it live on 2026-10-09 (its CAP-048 to CAP-051); this entry
876+
ports what applies here.
877+
878+
**Decision.**
879+
880+
| Component | From | To |
881+
|---|---|---|
882+
| Kubernetes (`--kubernetes-version`, new pin) | minikube default | v1.36.5 |
883+
| minikube floor | 1.36 | 1.39.0 |
884+
| Istio (istioctl + addon) | 1.29.2 | 1.31.1 |
885+
| Kiali (Istio addon image, now pinned) | addon tag | v2.31.0 |
886+
| KEDA core chart | 2.19.0 | 2.21.0 |
887+
| KEDA HTTP add-on | 0.15.0 | 0.16.0 |
888+
| Strimzi operator | 0.51.0 | 1.2.0 (Kafka 4.3.1 set explicitly) |
889+
| CloudNativePG chart / operator | 0.23.0 | 0.29.1 / 1.30.1 |
890+
| PostgreSQL image (CNPG) | operator default | `ghcr.io/cloudnative-pg/postgresql:18.6-standard-trixie` |
891+
| Apicurio Registry | 3.2.4 | 3.3.3 |
892+
| Kafka UI (kafbat) | `latest` | v1.5.0 |
893+
| OpenMetadata chart, server, ingestion | 1.12.8 | 2.0.5 |
894+
| OpenSearch (OpenMetadata dependency) | chart default | 3.4.0 (held back, see below) |
895+
| prometheus / grafana / tempo charts | unpinned | 29.36.1 / 13.4.0 / 3.1.0 |
896+
| Service base image | `ubi9/python-312:latest` | `ubi10/python-314-minimal:10.2-1791464217` |
897+
| asyncpg | ^0.30.0 | ^0.32.0 (cp314 wheels) |
898+
| OpenTelemetry distro / OTLP exporter | unpinned | 0.66b1 / 1.45.1 |
899+
| CRC appendix: postgres, kafka, otel-lgtm, Prefect | `postgres:16-alpine`, `kafka:3.8.0`, `otel-lgtm:0.8.1`, `prefect:3-latest` | `postgres:18.6-alpine`, `kafka:4.3.1`, `otel-lgtm:0.36.0`, `prefect:3.8.8-python3.14` |
900+
901+
- **Kubernetes.** `setup-capstone-profile.sh` passes `--kubernetes-version`
902+
(override with `KUBE_VERSION`) and refuses an existing profile whose driver,
903+
runtime or Kubernetes version differs; `--replace` recreates it.
904+
- **Istio.** The capstone `setup-istio.sh` checks that `istioctl` on PATH
905+
matches `ISTIO_VERSION` in the repo-root `scripts/setup-istio.sh`, because
906+
the binary and `~/.local/share/istio-current` are shared with other repos.
907+
- **KEDA HTTP.** `interceptor.readinessTimeout=180s` replaces the deprecated
908+
`interceptor.replicas.waitTimeout`; since 0.14 a timeout is a 504, not a
909+
502. `HTTPScaledObject` stays `http.keda.sh/v1alpha1` (`InterceptorRoute` is
910+
its successor and is not adopted); 0.16 reports a standard `Ready` condition.
911+
- **Strimzi.** 1.x serves only `kafka.strimzi.io/v1`. The kafka subchart moves
912+
to v1, drops the `strimzi.io/kraft` and `strimzi.io/node-pools` annotations,
913+
and sets `spec.kafka.version` from its own `version` value. The unread
914+
umbrella `strimziCluster.version` is removed.
915+
- **CloudNativePG.** Primary-pod selectors use `cnpg.io/instanceRole=primary`.
916+
- **OpenMetadata.** The 2.0.5 dependencies chart ships OpenSearch 3.5.0, which
917+
rejects the server's UUID-format `X-Request-Id`, so every search-index write
918+
(lineage included) fails with HTTP 500. OpenSearch is pinned to 3.4.0, the
919+
newest release that works (found live in the parent repo).
920+
- **Services.** UBI 10 minimal has no compiler, so dependencies need cp314
921+
wheels. The OpenTelemetry install runs under a pip constraint of the venv it
922+
extends; unconstrained it upgraded protobuf to 7.x, past the `<6` pin the
923+
committed gRPC stubs were generated for.
924+
- **Host ports.** Unchanged. This repo already publishes Prometheus on 9091
925+
(Cockpit owns 9090 on Fedora Server and RHEL), so the parent repo's
926+
9090 → 19090 move does not apply. The profile name stays `capstone`.
927+
- **Demos** (live-run fixes from the parent repo): the Kafka demos hold
928+
notification-service at one replica with `autoscaling.keda.sh/paused-replicas`
929+
(`demos/lib/keda.sh`) and release it on exit; `demo-order.sh` deploys
930+
inventory-service before ordering. Already present here: `GRPC_DNS_RESOLVER=native`,
931+
the walkthrough's OpenMetadata check in the `capstone` namespace, and an
932+
in-stock SKU. The walkthrough's trace act enters through the interceptor, so
933+
it needs no gateway hold. There is no Jaeger in this stack.
934+
- **CRC appendix.** Image pins move to the newest stable tags. Operator
935+
Subscriptions (CSVs) and the OSSM3 Istio version are unchanged: they can't be
936+
resolved without a cluster and are re-checked at the next CRC run.
937+
938+
**Rejected alternatives.**
939+
940+
- Kiali v2.33.0 (newest upstream): the Istio 1.31.1 addon ships v2.31; the
941+
parent repo verified that pairing live.
942+
- OpenSearch 3.5.0 (chart default): breaks OpenMetadata 2.0.5 writes.
943+
- Adopting `InterceptorRoute`: `HTTPScaledObject` is still supported, and the
944+
simpler shape is enough here.
945+
- Regenerating the gRPC stubs for protobuf 7: out of scope; the lock pins
946+
protobuf 5.x and the constraint keeps it there.
947+
948+
**Consequences.**
949+
950+
- An existing `capstone` profile on another Kubernetes version must be
951+
recreated: `./scripts/setup-capstone-profile.sh --replace`, then
952+
`./scripts/bootstrap-capstone.sh`.
953+
- A CRC install on postgres 16 needs a fresh PVC; Postgres 18 can't open a 16
954+
data directory.
955+
- OpenSearch is held one minor back until OpenMetadata or its dependencies
956+
chart moves; re-check then.
957+
- Live verification is pending; `_plans/reconciliation.md` tracks it.

‎_plans/reconciliation.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ The historical reconciliation rows from the capstone era are preserved in
1515

1616
| Status | Claim | Where | Verification |
1717
|---|---|---|---|
18+
| **verified** | The stack runs end to end on the newest stable platform (DRA-020): Kubernetes v1.36.5 on minikube 1.39.0, Istio 1.31.1, KEDA 2.21.0 + HTTP add-on 0.16.0, Strimzi 1.2.0 with Kafka 4.3.1, CloudNativePG 0.29.1 with Postgres 18.6, Apicurio 3.3.3, OpenMetadata 2.0.5 with OpenSearch 3.4.0, services on UBI 10 + Python 3.14 | `examples/lgtm-datamesh/` (DRA-020) | Offline-grounded 2026-10-09: every chart renders at its pin; the Kafka, KafkaNodePool, KafkaTopic, Cluster, ScaledObject and HTTPScaledObject CRs validate against the Strimzi 1.2.0, CNPG 0.29.1 and KEDA 2.21.0 / HTTP 0.16.0 CRD schemas; all seven service images and a scaffolded service build with `docker build` and import on Python 3.14.8. Verified live 2026-10-09 on Fedora 44 with Docker Engine 29.8.2 (context `default`), minikube 1.39.0, a fresh `capstone` profile: `bootstrap-capstone.sh` (OpenMetadata ingestion and lineage included) → 16 `demos/demo-*.sh` green, `verify-grafana.sh`, `demo-canary.sh up 90 10` → `demo-canary-verify.sh` → `down`, `demo-add-data-product.sh up` → `down`, `restore-baseline.sh` between groups, `walkthrough.sh` 5/5 acts; then `minikube stop` → `cluster-up.sh` with all six images still in the node. Not run: `demo-service.sh` (needs a scaffolded service) and the canary `shift` step. |
19+
| **unverified** | The CRC appendix runs on its bumped image pins (`postgres:18.6-alpine`, `kafka:4.3.1`, Apicurio 3.3.3, otel-lgtm 0.36.0, Prefect 3.8.8, OpenMetadata 2.0.5) | `examples/lgtm-datamesh/openshift/` (DRA-020) | `postgres:18.6-alpine` (chart `PGDATA` layout) and Kafka 4.3.1 (chart KRaft env) started under `docker run` 2026-10-09. Operator CSVs and the OSSM3 Istio version were not re-checked (no cluster); both are re-checked at the next CRC run. |
1820
| **verified** | This repo's `examples/lgtm-datamesh/` tree builds and runs the data-mesh reference end to end, producing the same five-act walkthrough verified in the parent repo as of r28 | `examples/lgtm-datamesh/` | Verified 2026-07-04/05 on a fresh Fedora 44 host (rootless podman, minikube 1.38.1, fresh `capstone` profile): `./scripts/bootstrap-capstone.sh` then `./demos/walkthrough.sh` → 5/5 acts green, twice (once in-order, once in the shuffled suite). Caveats that verification surfaced and this repo fixed: six demo-script bugs (`5403d06`–`e22b318`), plus two host prerequisites the README didn't list — legacy `ip_tables`/`iptable_nat` kernel modules loaded on the host (Fedora is nftables-only; the rootless node can't modprobe), and minikube ≥ 1.36 (1.35's registry addon pins a dead `kube-registry-proxy` digest). |
1921
| **verified** | Every demo script passes against the bootstrapped stack: all 19 `demos/demo-*.sh`, the `demo-canary.sh` cycle (up 90/10 → shift 50/50 → down), and the `demo-add-data-product.sh` cycle (up → down) | `examples/lgtm-datamesh/demos/` | Verified 2026-07-04/05, same host: two full-suite runs (24 scripted invocations each) green, with fixes landed and re-verified between them. Fix verification exercised the failure paths live (historical: re-attaching a dropped forwarded connection, since replaced by published NodePorts, DRA-017; gateway wake from scale-to-zero, interceptor cold-start 502 retry). |
2022
| **verified** | The smokes are order-independent when `scripts/restore-baseline.sh` is run between groups (the smokes' pass-cleanup, CAP-008, otherwise couples them) | `examples/lgtm-datamesh/scripts/restore-baseline.sh` | Verified 2026-07-05: full suite re-run in a deliberately shuffled order (gateway-heavy first, `demo-order` immediately after the cleanup-happy group — its prior failure position) with `restore-baseline.sh` between groups → all green. The shuffle also exposed one latent race (`demo-kafka`, fixed in `e22b318`) that two in-order runs had passed on timing. |

‎assets/diagrams/19-crc-image-delivery.excalidraw‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,13 +154,13 @@
154154
"updated": 1,
155155
"link": null,
156156
"locked": false,
157-
"text": "library/postgres:16-alpine",
157+
"text": "library/postgres:18.6-alpine",
158158
"fontSize": 11,
159159
"fontFamily": 1,
160160
"textAlign": "left",
161161
"verticalAlign": "top",
162162
"containerId": null,
163-
"originalText": "library/postgres:16-alpine",
163+
"originalText": "library/postgres:18.6-alpine",
164164
"lineHeight": 1.25,
165165
"baseline": 11
166166
},
@@ -189,13 +189,13 @@
189189
"updated": 1,
190190
"link": null,
191191
"locked": false,
192-
"text": "apache/kafka:3.8.0",
192+
"text": "apache/kafka:4.3.1",
193193
"fontSize": 11,
194194
"fontFamily": 1,
195195
"textAlign": "left",
196196
"verticalAlign": "top",
197197
"containerId": null,
198-
"originalText": "apache/kafka:3.8.0",
198+
"originalText": "apache/kafka:4.3.1",
199199
"lineHeight": 1.25,
200200
"baseline": 11
201201
},

‎assets/diagrams/19-crc-image-delivery.svg‎

Lines changed: 2 additions & 2 deletions
Loading

0 commit comments

Comments
 (0)