--- # logarchiver — replaces the vector-archiver leg. Independent JetStream durable # consumer (archiver) that seals raw logs to S3 as zstd + OpenPGP objects and # indexes each object in ClickHouse (logs.archive_index). Acks only after the # object is in S3 AND indexed. Reuses the same NATS/S3/CA wiring the Vector # archiver used; the OpenPGP public key is delivered as a mounted file. apiVersion: apps/v1 kind: Deployment metadata: name: logarchiver namespace: logging annotations: configmap.reloader.stakater.com/auto: "true" secret.reloader.stakater.com/reload: "vault-ca-cert" labels: app.kubernetes.io/name: logarchiver app.kubernetes.io/component: archiver spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app.kubernetes.io/name: logarchiver template: metadata: labels: app.kubernetes.io/name: logarchiver vector.dev/exclude: "true" spec: # Dedicated SA whose projected vault-audience token authenticates the # k8s-auth login used to fetch the logarchive public key from the gpg engine. serviceAccountName: logarchiver automountServiceAccountToken: false securityContext: runAsNonRoot: true runAsUser: 65532 runAsGroup: 65532 seccompProfile: type: RuntimeDefault containers: - name: logarchiver image: artifactapi.k8s.syd1.au.unkin.net/docker-internal/logarchiver:v0.1.0 imagePullPolicy: IfNotPresent args: ["run"] securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities: drop: - ALL ports: - containerPort: 9090 name: metrics protocol: TCP env: - name: LOGARCHIVER_CONFIG value: /etc/logarchiver/config.yaml # Server-side subject filter; must match the archiver consumer's filter. - name: ARCHIVE_SUBJECTS value: "logs.k8s.vault.>" - name: NATS_CONSUMER_PASSWORD valueFrom: secretKeyRef: name: nats-auth key: consumer_password - name: CLICKHOUSE_USER valueFrom: secretKeyRef: name: clickhouse-credentials key: username - name: CLICKHOUSE_PASSWORD valueFrom: secretKeyRef: name: clickhouse-credentials key: password # S3 creds + S3_ENDPOINT + BUCKET_NAME from the cephrgw BucketAccess Secret. envFrom: - secretRef: name: logs-archive-s3 livenessProbe: httpGet: path: /healthz port: metrics initialDelaySeconds: 15 periodSeconds: 30 timeoutSeconds: 5 failureThreshold: 3 readinessProbe: httpGet: path: /healthz port: metrics initialDelaySeconds: 5 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 resources: requests: cpu: 100m memory: 256Mi limits: cpu: "1" memory: 1Gi volumeMounts: - name: config mountPath: /etc/logarchiver/config.yaml subPath: config.yaml readOnly: true - name: vault-token mountPath: /var/run/secrets/vault readOnly: true - name: vault-ca-cert mountPath: /etc/vault-ca/ca.crt subPath: ca.crt readOnly: true - name: tmp mountPath: /tmp volumes: - name: config configMap: name: logarchiver-config # Projected SA token with audience "vault" for the gpg-engine k8s login. - name: vault-token projected: sources: - serviceAccountToken: path: token audience: vault expirationSeconds: 600 - name: vault-ca-cert secret: secretName: vault-ca-cert - name: tmp emptyDir: {}