Pin the pushed server image; drop the pull secret
mg4-server:2.0.0 is on git.stinnesbeck.com and pulls anonymously, so the Deployment no longer references a registry pull secret. The image is pinned by digest (sha256:6feea777…) so a re-pushed tag cannot change what the cluster runs. README and secrets template updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QLJfZQZeAKAwSqViTmLzki
This commit is contained in:
@@ -37,7 +37,8 @@ car ──live telemetry───▶ car.stinnesbeck.com (Go) ──▶ ABRP ap
|
|||||||
idempotency, all 25 dashboard queries return data, dashboards rendered and checked.
|
idempotency, all 25 dashboard queries return data, dashboards rendered and checked.
|
||||||
- [x] Manifests validated offline (including Traefik CRDs). **Not applied.**
|
- [x] Manifests validated offline (including Traefik CRDs). **Not applied.**
|
||||||
- [x] Car app 2.3.0: unit tests and lint pass; **not yet tried on the car**.
|
- [x] Car app 2.3.0: unit tests and lint pass; **not yet tried on the car**.
|
||||||
- [ ] Push the image (`mg4-server:2.0.0`) to git.stinnesbeck.com (needs a registry login here).
|
- [x] Image `mg4-server:2.0.0` pushed to git.stinnesbeck.com (public; pinned by digest
|
||||||
|
`sha256:6feea777…` in `k8s/kustomization.yaml`).
|
||||||
- [ ] Check in `k8s/ingress.yaml`: the Traefik ingress class (placeholder `traefik-external`) and
|
- [ ] Check in `k8s/ingress.yaml`: the Traefik ingress class (placeholder `traefik-external`) and
|
||||||
Grafana's host (placeholder `car-grafana.stinnesbeck.com`).
|
Grafana's host (placeholder `car-grafana.stinnesbeck.com`).
|
||||||
- [ ] First drive with 2.3.0: telemetry arrives in InfluxDB, Grafana and ABRP.
|
- [ ] First drive with 2.3.0: telemetry arrives in InfluxDB, Grafana and ABRP.
|
||||||
|
|||||||
+4
-4
@@ -22,9 +22,8 @@ is applied automatically. Apply them yourself.
|
|||||||
2. **Create the Secrets.** Copy `secrets.example.yaml` outside the repository, replace every
|
2. **Create the Secrets.** Copy `secrets.example.yaml` outside the repository, replace every
|
||||||
`CHANGE-ME` (`openssl rand -hex 32`), then apply the copy: `influxdb-auth`, `mg4-server`
|
`CHANGE-ME` (`openssl rand -hex 32`), then apply the copy: `influxdb-auth`, `mg4-server`
|
||||||
(ingest token, your ABRP API key and user token) and `grafana-admin`.
|
(ingest token, your ABRP API key and user token) and `grafana-admin`.
|
||||||
3. **Registry access.** If the `mg4-server` package on git.stinnesbeck.com is private, create the
|
3. **Registry access.** The `mg4-server` package on git.stinnesbeck.com is public, so no pull
|
||||||
`git-stinnesbeck-registry` pull secret (command in `secrets.example.yaml`); if it is public,
|
secret is needed. If you make it private, add an `imagePullSecrets` entry to `server.yaml`.
|
||||||
delete `imagePullSecrets` from `server.yaml`.
|
|
||||||
|
|
||||||
## Apply
|
## Apply
|
||||||
|
|
||||||
@@ -42,4 +41,5 @@ kubectl apply -k k8s/
|
|||||||
for Grafana, read/write for the server) can replace it later.
|
for Grafana, read/write for the server) can replace it later.
|
||||||
- The dashboards are read-only in Grafana's UI. Change the JSON in `grafana/dashboards/`; the
|
- The dashboards are read-only in Grafana's UI. Change the JSON in `grafana/dashboards/`; the
|
||||||
ConfigMap name changes with its content, which rolls Grafana.
|
ConfigMap name changes with its content, which rolls Grafana.
|
||||||
- To upgrade the server, push a new image tag and change `newTag` in `kustomization.yaml`.
|
- The server image is pinned by digest in `kustomization.yaml`. To upgrade, push a new tag and
|
||||||
|
put its digest there (`skopeo inspect docker://git.stinnesbeck.com/nils/mg4-server:<tag>`).
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ resources:
|
|||||||
- ingress.yaml
|
- ingress.yaml
|
||||||
images:
|
images:
|
||||||
- name: git.stinnesbeck.com/nils/mg4-server
|
- name: git.stinnesbeck.com/nils/mg4-server
|
||||||
newTag: "2.0.0"
|
# 2.0.0, pinned by digest so a re-pushed tag cannot change what runs.
|
||||||
|
digest: sha256:6feea777c514b9488ffb0b49fad7c15423ee06f0e0e8d609cf31eb85755da815
|
||||||
generatorOptions:
|
generatorOptions:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/part-of: mg4
|
app.kubernetes.io/part-of: mg4
|
||||||
|
|||||||
@@ -37,8 +37,3 @@ stringData:
|
|||||||
# Grafana's admin login (user "admin"). Only read on first start: change it in Grafana
|
# Grafana's admin login (user "admin"). Only read on first start: change it in Grafana
|
||||||
# afterwards, or reset it with grafana cli.
|
# afterwards, or reset it with grafana cli.
|
||||||
admin-password: CHANGE-ME
|
admin-password: CHANGE-ME
|
||||||
---
|
|
||||||
# Pull secret for a private image on git.stinnesbeck.com. Easier to create with:
|
|
||||||
# kubectl -n mg4 create secret docker-registry git-stinnesbeck-registry \
|
|
||||||
# --docker-server=git.stinnesbeck.com --docker-username=<user> --docker-password=<token>
|
|
||||||
# If the package is public, remove imagePullSecrets from server.yaml instead.
|
|
||||||
|
|||||||
@@ -21,9 +21,6 @@ spec:
|
|||||||
app.kubernetes.io/name: mg4-server
|
app.kubernetes.io/name: mg4-server
|
||||||
app.kubernetes.io/part-of: mg4
|
app.kubernetes.io/part-of: mg4
|
||||||
spec:
|
spec:
|
||||||
# Needed only if the image is private on git.stinnesbeck.com; see secrets.example.yaml.
|
|
||||||
imagePullSecrets:
|
|
||||||
- name: git-stinnesbeck-registry
|
|
||||||
securityContext:
|
securityContext:
|
||||||
runAsNonRoot: true
|
runAsNonRoot: true
|
||||||
runAsUser: 65532
|
runAsUser: 65532
|
||||||
|
|||||||
Reference in New Issue
Block a user