folder structure. longhorn installation

This commit is contained in:
azykov@mail.ru
2026-07-21 12:49:13 +03:00
parent fe3e885b33
commit 2a0a0acc71
21 changed files with 94 additions and 76 deletions
-39
View File
@@ -1,39 +0,0 @@
clusters/
base/
namespaces/
vaultwarden.yaml
myai.yaml
shared.yaml
infra/
default-storageclass-patch.yaml
infra-apps/
metallb/
longhorn/
caddy/
mosquitto/
apps/
vaultwarden/
myai/
caldav-mcp/
home/
flux-system/ # bootstrap-managed, см. п.4
kustomization.yaml # explicit, см. выше
namespaces.yaml # Flux Kustomization CRD
namespaces/
kustomization.yaml # resources: [../../base/namespaces/*.yaml]
infra.yaml # Flux Kustomization CRD, dependsOn: namespaces
infra/
kustomization.yaml # resources: [../../base/infra/*.yaml]
infra-nodes.yaml # Flux Kustomization CRD, dependsOn: infra
infra-nodes/
node1/
kustomization.yaml
node2/
kustomization.yaml
infra-apps.yaml # Flux Kustomization CRD, dependsOn: infra-nodes
infra-apps/
kustomization.yaml # resources: [../../base/infra-apps/metallb, ...]
apps.yaml # Flux Kustomization CRD, dependsOn: infra-apps
apps/
kustomization.yaml # resources: [../../base/apps/vaultwarden, ...]
@@ -4,20 +4,20 @@ metadata:
name: vaultwarden-secrets name: vaultwarden-secrets
namespace: vaultwarden namespace: vaultwarden
stringData: stringData:
#ENC[AES256_GCM,data:0pyGYd1d1eJEINKxqUIxdgdc2pYCxY+flJ7sdfEdloOcdtfrY6z4nk6PQ0gMUWj0e/FpKTmITJEK,iv:7bwlpzDiAYfhAHIT59G0IJcEMe9yb1pnWN0y9rHs/NA=,tag:fYOr4mlezaydkWZz24/Vww==,type:comment] #ENC[AES256_GCM,data:aTlbA3DfH2l1hzLpOOw+IpUrR9dbVYcvuOCl5IiMiE7JRKpOb2Ao1h68sESyBpvEjwg8LWc2WYfr,iv:9I3Z9u7ZtzELlrUqmLj+dBEmmAKJXFyyKAegdsojOV4=,tag:YId6U0D5X9KIADyz2U6cJw==,type:comment]
ADMIN_TOKEN: ENC[AES256_GCM,data:Wn8PpV4NbJ4t2nJbdUdvJsk31AoT/ib8xYG2hs+8e3Uoke3WRjVmxp5RENC7rwYSfB2g/46a/lg/ABs28vBhwxvRBewbbkf1ZatdL4znkeS1kyiNJTZJ8SXDqBwCjFeZBTdBQUcuTATYdw7Zq2SRu5tmTLFWQA==,iv:8l8r/V+OfEauJxOMPosyRD+DKclD3aWWgXKFarkPWHY=,tag:Db/36TSen8zWRVwq/DZwTw==,type:str] ADMIN_TOKEN: ENC[AES256_GCM,data:T2xalQlwrMFt+dfqm87nRazkEfNxfoxQ+qljUuWo7kHE1x2Wo20uR2rPMfaJRIy8nCkb6nMEr/S7z0wYZwS10Z723V9+rGkDHo0+HHy81fa6HcsEUb6RofGkFVdOx8nXnp7Nc7Tsnc/3ub7TLNUNzleatlXlgQ==,iv:BIdElqr1s5QBVsCdBUAGm0aVF7FAKHbbkaAWq4wb904=,tag:ByG7FxAFXY0JIXsQksiuow==,type:str]
sops: sops:
age: age:
- recipient: age109zta6l0cwpkxn5wek82kvauxn6yqrq80rsz4mvu5atdnpcn9pusuvnqk5 - recipient: age109zta6l0cwpkxn5wek82kvauxn6yqrq80rsz4mvu5atdnpcn9pusuvnqk5
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4cFpaSmxwczRMY0ovWkg0 YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVSCtWSmtFRGZqcXQ0c2Vr
UUdYMzN5YndCVmM4R2IrUGJ3U1J3RlJ2RkR3CmNLVFhsaXo3anJ6WUlUMWdqaVJ0 ZGU4cHZQWE9GOHp0akpCbmZEQzlzMXpzZDBZCnhvVkRoWUdVL0ptR0M3c2xUTlhi
Vjl0K2I3RndBUC9QNUFzMk9VclE1RGcKLS0tICsrWUhwVlB6ak1IQy9peE9nRzhW ZWo4VHJGcmo3SDFXN0dKMll2Z3ZhbVkKLS0tIFRreDlvRkhoMjJpOU9JM2cyS0ds
dFYxY0xoRlNrd0w2ZE9RTTFaZHc3dEUKqS9q9k5dNmRAGl3k8/63R7XAq3LgxIzX SG5TcVlJc29ZSjc0VmR3NzlhcHE2L28Kuizg3n3+0ry08PGODugaAAC8KBv2rPeg
hJZetWJ5aKJF7+cqCFYUNGQA0qhlXinJnL7T0WBRLmzdCWCuW8Ha9Q== ylJj2Jref1A1xkbuoSkPD3qlOxNkjhYrxWWhiF1zDz3cqv9Kv+Q1wg==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:18:17Z" lastmodified: "2026-08-26T10:18:21Z"
mac: ENC[AES256_GCM,data:lQoTx/7t3iUxDV6VvzTn2uDg4HgB2OZYdaA4LmAY320uI+bHjMuLEtWe6Ing1Oa/vdQCLGTj3RxXXMCl+9Nk4PdnZ/lPAqh0mSwlCWwZZOnbRHqrNgzbrEa+nyKPfIZSEQSZJi9AMNDq0MpCzuwDfJlDPl/6dhRe/qZqSOt/8io=,iv:2o6QNFWALTdeHn2uyAoQAmEQxlVnMog+v/bcnxQ4XZo=,tag:GE7xRyoDlmWVujs5lK6KsA==,type:str] mac: ENC[AES256_GCM,data:1PvgVWP7YC/FBC/aClTBz5+d14BPpt1pUscjct1RUyV4y07vNHqBwXSorLnoGf5hUDwwBr2Yo51dAudJZUMrkIjSV38QeSmWjkvSgCXjt+QnoL1ynjLENZihbzGMDvZorx/rGN3DtK5fdj2T3VVubREYyoI+UvJSN49bO0d0Xo4=,iv:e2JzQAtot7sfnLNLQl7X6xiORF7v/1uEU5wZLFHqVqI=,tag:n6kCzjOrN0IjZMGkzS2dzA==,type:str]
encrypted_regex: ^(data|stringData)$ encrypted_regex: ^(data|stringData)$
version: 3.11.0 version: 3.11.0
@@ -4,19 +4,19 @@ metadata:
name: zigbee2mqtt-secrets name: zigbee2mqtt-secrets
namespace: zigbee2mqtt namespace: zigbee2mqtt
stringData: stringData:
secret.yaml: ENC[AES256_GCM,data:Bm/axxWEiSHuggnOlKAaUiJcWGx+z8Y3JeAThl71DuhGVC/0kHBb7DkihL1fW7ms8MuSFFpTjDGfl1Sf1T4k90mx9PQ9O7+QdiHaXHTgmX2DnKXHa7RCqmgzdvZCHLo0krdgkROA7146VEaDUhAf+mSm+d7Y9SfYJbfC97Y=,iv:5DNFF/jpnqXMnWohYloTvSbA1YHmRPartrbL4jruFz8=,tag:ZeTQC5fogAEUKYQ8GmwGHw==,type:str] secret.yaml: ENC[AES256_GCM,data:G1r/HWh9AYStkKGUIWj/vE8zM1ODLbwXG+wGmt5Y4sGFN7lU90WDYlR5AtgiFZUXYzdZyIuAcThYERe2ezw08yjIObf7Ea0hUQLzxWH2WvXnOSVimmPxiwJtgQioELUZMvNTBMFKOinhtEwsYsZBZo8YvMEPbMl1B+J5Crk=,iv:GG1GzGKn7xfFri5H4drOQiQqJ3qJU73LbsLnx+nqijY=,tag:6pCQ5EKsbHxSA2ISwtZoDw==,type:str]
sops: sops:
age: age:
- recipient: age1tu4xgfefvgdda0vn2thaqndq4p9tuydq2ud6qa98tzzgnff6749qnlcx29 - recipient: age1tu4xgfefvgdda0vn2thaqndq4p9tuydq2ud6qa98tzzgnff6749qnlcx29
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyT0dCZDNqSGdpM3lESVFa YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTVnI2QTBDdGlULzN1YjJa
S0xlVHhNOEIvZ3ZPVUpmYXFBQjJUaWdDZlM4CjVQQ3N4NFFoY0wzYTY5dm5qcHI3 dktjSVI0K3IxUFhJc29VZEIzQnNHa0Y0REdRCmdoVEE3b0UxSDMvaHVPeVo0dkpZ
VThMRzIyRU5sRnphTzA1TFRSRUkwdXMKLS0tIGZYbCtIK0xPRm10aGJjK0hTeEtI blNCRFpSZFZROFFpVEw2R2tiYlBFUE0KLS0tIGgzMlNPOFhKekdMT1JzK3NJbUZ2
dVdVMlJrT3dCa2JrR0dIbE5NbU9JTG8KrqovZIUOknPLUmQhPn8U2XIwj5Z9Nzs4 RTIwdUFRaXcxWCtqczZDWjR4OFJGNncKhY8b381dCG6sJp7rHSLyP1+bhVxwvIcj
GV2KigIHlIKBIg6PJmE4bEHXzOudd7H6h3mHBJzdgpuv2lg3MgyUhw== hF97LOUyb3AMwccq8GTC6XslGweFSIJnqUAoFPvpPm1AsVViwXuoig==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:18:18Z" lastmodified: "2026-08-26T10:18:22Z"
mac: ENC[AES256_GCM,data:n42Kyoe0ydzqnCM928Kj6cw4a09N8BVhd/HhK3x8I6yEcUuZw8xpESQvVCZRMZBJgXlPwUgyc/+erAmZevwNDInEXphu3T7Ori/sGrV/WJEqczXXQ3llr+gZ6of4SYU+uWRDOJ9TDu3Y1Srivr2+osz8awQwUyhM+u6Eu3X4Iog=,iv:ryYdXqWwwK93ZMvvVYwWVgSt6e8DaMBcgmgFmOFZpnE=,tag:krP7teRZo7Js//+h6nIdLQ==,type:str] mac: ENC[AES256_GCM,data:H0VVju9l1t6/LdadN2pRuPajG2TAnGL9tskk/hhgtNs3oOBfl9o+BxtvcKyckgASaZ/1CvqxBGEw+qNLyu/iYFT5FYvO65JHrgdtdrG4OhiR3oIC5K04lUWo8Gz8P/1HumqZIh2S6XWHRv/fbgf2V2fUccid5GQ7zGtAzSkQpUU=,iv:Aa7nmiSbd6B/4QNaDvfT3heLtbVWzog305TJE4oQzbc=,tag:NSZJLSi/Y4OhYDXubreXrg==,type:str]
encrypted_regex: ^(data|stringData)$ encrypted_regex: ^(data|stringData)$
version: 3.11.0 version: 3.11.0
@@ -0,0 +1,45 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: longhorn
namespace: longhorn-system
spec:
interval: 30m
chart:
spec:
chart: longhorn
version: "1.9.x" # зафиксируй актуальную стабильную ветку
sourceRef:
kind: HelmRepository
name: longhorn
namespace: longhorn-system
interval: 1h
install:
createNamespace: false # namespace создаём отдельным ресурсом с PSA-меткой
remediation:
retries: 3
upgrade:
remediation:
retries: 3
values:
defaultSettings:
defaultReplicaCount: 3 # по числу нод control-plane
defaultDataPath: /var/lib/longhorn
guaranteedEngineManagerCPU: 12
guaranteedReplicaManagerCPU: 12
# если backup target ещё не настроен — оставь пустым, донастроишь позже через UI/CR
backupTarget: ""
# чтобы не разъезжались реплики при 3 нодах
replicaSoftAntiAffinity: false
persistence:
defaultClass: true
defaultClassReplicaCount: 3
defaultFsType: ext4
reclaimPolicy: Retain
csi:
attacherReplicaCount: 3
provisionerReplicaCount: 3
resizerReplicaCount: 3
snapshotterReplicaCount: 3
ingress:
enabled: false # у тебя уже есть Caddy/Traefik, заведёшь свой Ingress/IngressRoute отдельно
@@ -0,0 +1,8 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: longhorn
namespace: longhorn-system
spec:
interval: 1h
url: https://charts.longhorn.io
@@ -1,4 +1,6 @@
apiVersion: kustomize.config.k8s.io/v1beta1 apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization kind: Kustomization
resources: resources:
- cert-manager-issuers.yaml - helmrepository.yaml
- helmrelease.yaml
- secret.enc.yaml
@@ -0,0 +1,6 @@
apiVersion: v1
kind: Namespace
metadata:
name: longhorn-system
labels:
pod-security.kubernetes.io/enforce: privileged
+1 -1
View File
@@ -13,7 +13,7 @@ spec:
wait: true wait: true
dependsOn: dependsOn:
- name: namespaces - name: namespaces
- name: infra-apps - name: infra
decryption: decryption:
provider: sops provider: sops
secretRef: secretRef:
+1 -1
View File
@@ -13,7 +13,7 @@ spec:
wait: true wait: true
dependsOn: dependsOn:
- name: namespaces - name: namespaces
- name: infra-apps - name: infra
decryption: decryption:
provider: sops provider: sops
secretRef: secretRef:
+1 -1
View File
@@ -13,7 +13,7 @@ spec:
wait: true wait: true
dependsOn: dependsOn:
- name: namespaces - name: namespaces
- name: infra-apps - name: infra
decryption: decryption:
provider: sops provider: sops
secretRef: secretRef:
+1 -1
View File
@@ -13,7 +13,7 @@ spec:
wait: true wait: true
dependsOn: dependsOn:
- name: namespaces - name: namespaces
- name: infra-apps - name: infra
decryption: decryption:
provider: sops provider: sops
secretRef: secretRef:
@@ -1,14 +1,14 @@
apiVersion: kustomize.toolkit.fluxcd.io/v1 apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization kind: Kustomization
metadata: metadata:
name: cert-manager-issuers name: cert-manager-certificate-issuers
namespace: flux-system namespace: flux-system
spec: spec:
interval: 10m interval: 10m
sourceRef: sourceRef:
kind: GitRepository kind: GitRepository
name: flux-system name: flux-system
path: ./clusters/base/infra-apps/cert-manager-issuers path: ./clusters/base/infra/cert-manager/certificate-issuers
prune: true prune: true
wait: true wait: true
dependsOn: dependsOn:
+3 -1
View File
@@ -1,4 +1,6 @@
apiVersion: kustomize.config.k8s.io/v1beta1 apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization kind: Kustomization
resources: resources:
- storage-class-longhorn-no-retain.yaml - longhorn/longhorn-system.yaml
- longhorn/storage-classes.yaml
- cert-manager/certificate-issuers.yaml
@@ -1,13 +1,13 @@
apiVersion: kustomize.toolkit.fluxcd.io/v1 apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization kind: Kustomization
metadata: metadata:
name: local-path name: longhorn-system
namespace: flux-system namespace: flux-system
spec: spec:
interval: 10m interval: 10m
sourceRef: sourceRef:
kind: GitRepository kind: GitRepository
name: flux-system name: flux-system
path: ./clusters/base/infra/storage-class-longhorn-no-retain path: ./clusters/base/infra/longhorn/longhorn-system
prune: true prune: true
wait: true wait: true
@@ -1,20 +1,15 @@
apiVersion: kustomize.toolkit.fluxcd.io/v1 apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization kind: Kustomization
metadata: metadata:
name: infra-apps name: longhorn-storage-classes
namespace: flux-system namespace: flux-system
spec: spec:
interval: 10m interval: 10m
sourceRef: sourceRef:
kind: GitRepository kind: GitRepository
name: flux-system name: flux-system
path: ./clusters/home/infra-apps path: ./clusters/base/infra/longhorn-storage-classes
prune: true prune: true
wait: true wait: true
dependsOn: dependsOn:
- name: namespaces - name: longhorn-system
- name: infra
decryption:
provider: sops
secretRef:
name: sops-age
-2
View File
@@ -4,6 +4,4 @@ resources:
- flux-system - flux-system
- namespaces.yaml - namespaces.yaml
- infra.yaml - infra.yaml
# - infra-nodes.yaml
- infra-apps.yaml
- apps.yaml - apps.yaml
@@ -4,3 +4,4 @@ resources:
- ../../base/namespaces/vaultwarden.yaml - ../../base/namespaces/vaultwarden.yaml
- ../../base/namespaces/zigbee2mqtt.yaml - ../../base/namespaces/zigbee2mqtt.yaml
- ../../base/namespaces/pim.yaml - ../../base/namespaces/pim.yaml
- ../../base/namespaces/longhorn-system.yaml