apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: infra-longhorn namespace: argocd annotations: argocd.argoproj.io/sync-wave: "-10" # nền cụm -> sync sớm nhất trong tầng infra spec: project: default source: repoURL: https://charts.longhorn.io chart: longhorn targetRevision: 1.11.3 # pin: Longhorn v1.11.3 (2026-07-01), dòng 1.11 đã chín helm: releaseName: longhorn values: | persistence: # KHÔNG để longhorn làm default StorageClass — giữ local-path là default của cụm. # Workload lakehouse xin tường minh storageClassName: longhorn (checkpoint, kafka PV). defaultClass: false # 2 bản sao — cụm chỉ có 2 node lưu trữ (2 worker; 3 control-plane bị taint # nên longhorn-manager không lên). Hard anti-affinity mặc định cần mỗi replica # 1 node khác nhau -> tối đa 2. Chống 1 worker VM chết. KHÔNG chống host Proxmox # chết (1 fault domain) -> backup là phòng thủ thật. # Thêm worker node thứ 3 sau này -> nâng lại 3 cho prod-parity. defaultClassReplicaCount: 2 defaultSettings: defaultDataPath: /var/lib/longhorn # cần đủ chỗ trên MỌI node (đã resize +50-100G) preUpgradeChecker: # Cài qua ArgoCD/GitOps: TẮT pre-upgrade hook job (chart khuyến nghị rõ trong values.yaml). # Hook là helm pre-upgrade -> ArgoCD chạy ở PreSync, trước khi RBAC/CRD được tạo -> kẹt tới # activeDeadlineSeconds 900s và chặn toàn bộ Sync. Manager vẫn tự check version lúc runtime. jobEnabled: false destination: server: https://kubernetes.default.svc namespace: longhorn-system syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=true - ServerSideApply=true # tránh lỗi "metadata.annotations: Too long" trên CRD Longhorn retry: limit: 5 backoff: duration: 15s factor: 2 maxDuration: 5m