# The car server (Go). One replica on purpose: pending pairing requests and the wrong-password # counters are kept in memory. # The roads of the app's Grid map, fetched on demand, are kept on this small volume. apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mg4-server-maps namespace: mg4 labels: app.kubernetes.io/name: mg4-server app.kubernetes.io/part-of: mg4 spec: accessModes: ["ReadWriteOnce"] # No storageClassName: the cluster's default class is used. resources: requests: storage: 1Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: mg4-server namespace: mg4 labels: app.kubernetes.io/name: mg4-server app.kubernetes.io/part-of: mg4 spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app.kubernetes.io/name: mg4-server template: metadata: labels: app.kubernetes.io/name: mg4-server app.kubernetes.io/part-of: mg4 spec: securityContext: runAsNonRoot: true runAsUser: 65532 runAsGroup: 65532 fsGroup: 65532 seccompProfile: type: RuntimeDefault containers: - name: server # Pinned by digest so a re-pushed tag cannot change what runs (version in SPECS.md). image: git.stinnesbeck.com/nils/mg4-server@sha256:8b8d94e0562833d196162866b7fdc6910d5dd219f6eb84572d4d5c91b74f7ff1 ports: - name: http containerPort: 8080 env: - name: INFLUX_URL value: http://influxdb.mg4.svc:8086 - name: INFLUX_ORG value: mg4 - name: INFLUX_BUCKET value: mg4 # Where a phone reaches the server; the pairing QR code points here. - name: PUBLIC_URL value: https://car.k8s.stinnesbeck.com # App updates: the releases of this repository, relayed to the car. Read with # FORGE_TOKEN from the mg4-server Secret; leave that empty to switch updates off. - name: FORGE_URL value: https://git.stinnesbeck.com - name: FORGE_REPO value: nils/mg4 # The roads for the app's Grid map: OpenStreetMap vector tiles, fetched only for the # tiles a car asks for and kept on the volume below; "off" switches maps off. - name: MAP_TILES_URL value: https://tiles.openfreemap.org/planet - name: MAP_CACHE_DIR value: /var/cache/mg4-maps - name: INFLUX_TOKEN valueFrom: secretKeyRef: name: influxdb-auth key: admin-token # INGEST_TOKEN, APPROVAL_PASSWORD, FORGE_TOKEN. envFrom: - secretRef: name: mg4-server readinessProbe: httpGet: path: /v1/health port: http periodSeconds: 10 livenessProbe: httpGet: path: /v1/health port: http initialDelaySeconds: 5 periodSeconds: 30 resources: requests: cpu: 10m memory: 32Mi limits: memory: 128Mi securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities: drop: ["ALL"] volumeMounts: - name: maps mountPath: /var/cache/mg4-maps volumes: - name: maps persistentVolumeClaim: claimName: mg4-server-maps --- apiVersion: v1 kind: Service metadata: name: mg4-server namespace: mg4 labels: app.kubernetes.io/name: mg4-server app.kubernetes.io/part-of: mg4 spec: selector: app.kubernetes.io/name: mg4-server ports: - name: http port: 80 targetPort: http