You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 093380b
Browse filesBrowse the repository at this point in the historyBrowse 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
| 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 |
Copy file name to clipboardExpand all lines: _docs/10-summary.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -188,7 +188,7 @@ job extends to giving every domain a *trusted base* to layer on.
188
188

189
189
190
190
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
192
192
every Python service in the reference. UBI is freely redistributable
193
193
and enterprise-maintained, which means a domain team gets a base image
194
194
they can use without licensing constraints and that's patched on a
Copy file name to clipboardExpand all lines: _plans/decisions.md
+98Lines changed: 98 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -857,3 +857,101 @@ status table of what is published and reachable.
857
857
- Membership in the `docker` group is root-equivalent on the host.
858
858
- CI gate scan 5 in `scripts/forbidden-syntax.sh` enforces the podman scope.
859
859
- 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
Copy file name to clipboardExpand all lines: _plans/reconciliation.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,6 +15,8 @@ The historical reconciliation rows from the capstone era are preserved in
15
15
16
16
| Status | Claim | Where | Verification |
17
17
|---|---|---|---|
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. |
18
20
|**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). |
19
21
|**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). |
20
22
|**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. |
0 commit comments