# infrastructure/metallb/helmrelease.yaml apiVersion: helm.toolkit.fluxcd.io/v2 kind: HelmRelease metadata: name: metallb namespace: metallb-system spec: interval: 30m chart: spec: chart: metallb version: 0.15.3 sourceRef: kind: HelmRepository name: metallb namespace: flux-system install: crds: CreateReplace remediation: { retries: 3 } timeout: 10m upgrade: crds: CreateReplace remediation: retries: 3 remediateLastFailure: true cleanupOnFail: true timeout: 10m values: loadBalancerClass: metallb prometheus: metricsPort: 7472 controller: logLevel: info webhookMode: enabled tlsMinVersion: VersionTLS12 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: hardware operator: In values: - rpi4 - rpi5 speaker: logLevel: info # Atlas uses L2 advertisements; there are no BGP peers or advertisements. frr: enabled: false resources: requests: cpu: 50m memory: 128Mi limits: cpu: 500m memory: 512Mi readinessProbe: timeoutSeconds: 5 livenessProbe: timeoutSeconds: 5 # Restore eligibility after these offline nodes pass their recovery checks. affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: NotIn values: [titan-05, titan-06]