diff --git a/kubernetes/apps/kube-system/etcd-defrag/app/helmrelease.yaml b/kubernetes/apps/kube-system/etcd-defrag/app/helmrelease.yaml deleted file mode 100644 index bc63ab84c0..0000000000 --- a/kubernetes/apps/kube-system/etcd-defrag/app/helmrelease.yaml +++ /dev/null @@ -1,82 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/bjw-s-labs/helm-charts/main/charts/other/app-template/schemas/helmrelease-helm-v2.schema.json -apiVersion: helm.toolkit.fluxcd.io/v2 -kind: HelmRelease -metadata: - name: etcd-defrag -spec: - interval: 30m - chartRef: - kind: OCIRepository - name: app-template - - values: - defaultPodOptions: - # Must use host network and PID namespace to access Talos etcd on localhost:2379. - hostNetwork: true - hostPID: true - securityContext: - runAsGroup: 0 - runAsNonRoot: false - runAsUser: 0 - nodeSelector: - node-role.kubernetes.io/control-plane: "" - tolerations: - - key: node-role.kubernetes.io/control-plane - operator: Exists - effect: NoSchedule - - controllers: - etcd-defrag: - type: cronjob - cronjob: - # The previous weekly cadence let fragmentation cross the 50% alert - # threshold by day 4; a full 3-member pass costs ~95s. - timeZone: ${TIMEZONE} - schedule: "0 3 * * *" - backoffLimit: 1 - containers: - app: - image: - repository: ghcr.io/ahrtr/etcd-defrag - tag: v0.42.0@sha256:5138a12eda39067dabcf1d420d66f54f29f1e9297109a6b36574e010b45d58cc - args: - - --endpoints=https://127.0.0.1:2379 - - --cluster - - --cacert=/certs/ca.crt - - --cert=/certs/server.crt - - --key=/certs/server.key - - --defrag-rule=dbQuotaUsage > 0.5 || dbSizeFree > 50*1024*1024 - - --move-leader - # --cluster defragments all three control-plane etcd members. - - --wait-between-defrags=30s - # Talos uses etcd's default --quota-backend-bytes value (2 GiB). - - --etcd-storage-quota-bytes=2147483648 - - --auto-disalarm - - --disalarm-threshold=0.8 - resources: - requests: - cpu: 25m - memory: 128Mi - limits: - cpu: 100m - memory: 128Mi - securityContext: - # Talos etcd's client key is root-readable only on the host. - privileged: true - - persistence: - certs: - type: hostPath - # Talos EtcdPKIPath. - hostPath: /system/secrets/etcd - globalMounts: - - path: /certs - readOnly: true - tmpfs: - type: emptyDir - advancedMounts: - etcd-defrag: - app: - - path: /tmp - subPath: tmp diff --git a/kubernetes/apps/kube-system/etcd-defrag/app/kustomization.yaml b/kubernetes/apps/kube-system/etcd-defrag/app/kustomization.yaml deleted file mode 100644 index 904bfa2497..0000000000 --- a/kubernetes/apps/kube-system/etcd-defrag/app/kustomization.yaml +++ /dev/null @@ -1,6 +0,0 @@ ---- -# yaml-language-server: $schema=https://json.schemastore.org/kustomization -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -resources: - - helmrelease.yaml diff --git a/kubernetes/apps/kube-system/etcd-defrag/ks.yaml b/kubernetes/apps/kube-system/etcd-defrag/ks.yaml deleted file mode 100644 index 006d07a9bb..0000000000 --- a/kubernetes/apps/kube-system/etcd-defrag/ks.yaml +++ /dev/null @@ -1,17 +0,0 @@ ---- -# yaml-language-server: $schema=https://k8s-schemas.home-operations.com/kustomize.toolkit.fluxcd.io/kustomization_v1.json -apiVersion: kustomize.toolkit.fluxcd.io/v1 -kind: Kustomization -metadata: - name: etcd-defrag - namespace: &namespace kube-system -spec: - interval: 1h - path: ./kubernetes/apps/kube-system/etcd-defrag/app - prune: true - sourceRef: - kind: GitRepository - name: flux-system - namespace: flux-system - targetNamespace: *namespace - wait: false diff --git a/kubernetes/apps/kube-system/kustomization.yaml b/kubernetes/apps/kube-system/kustomization.yaml index e85aed0a04..52e55b1913 100644 --- a/kubernetes/apps/kube-system/kustomization.yaml +++ b/kubernetes/apps/kube-system/kustomization.yaml @@ -18,4 +18,3 @@ resources: - ./reloader/ks.yaml - ./snapshot-controller/ks.yaml - ./spegel/ks.yaml - - ./etcd-defrag/ks.yaml diff --git a/talos/patches/controller/cluster.yaml b/talos/patches/controller/cluster.yaml index c2c4edc4ef..5e0d9a5ab3 100644 --- a/talos/patches/controller/cluster.yaml +++ b/talos/patches/controller/cluster.yaml @@ -14,6 +14,11 @@ cluster: etcd: extraArgs: listen-metrics-urls: http://0.0.0.0:2381 + # Keep the etcd database lean by compacting old revisions hourly; this + # replaces the nightly defrag job (compaction prevents growth, defrag + # only reclaims space the file already holds). + auto-compaction-mode: periodic + auto-compaction-retention: 1h advertisedSubnets: [192.168.0.0/24] proxy: disabled: true