removed nfs-photo
This commit is contained in:
@@ -34,8 +34,7 @@ spec:
|
|||||||
# already there. Running it as a restartPolicy:Always init
|
# already there. Running it as a restartPolicy:Always init
|
||||||
# container (started, gated on the startupProbe below, before
|
# container (started, gated on the startupProbe below, before
|
||||||
# regular containers) guarantees that ordering; a regular sidecar
|
# regular containers) guarantees that ordering; a regular sidecar
|
||||||
# container racing "app" on every pod start does not. Same
|
# container racing "app" on every pod start does not.
|
||||||
# pattern as clusters/base/apps/nfs-photo.
|
|
||||||
mergerfs:
|
mergerfs:
|
||||||
dependsOn:
|
dependsOn:
|
||||||
- fix-permissions
|
- fix-permissions
|
||||||
|
|||||||
@@ -1,95 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: nfs-photo-config
|
|
||||||
namespace: nfs
|
|
||||||
data:
|
|
||||||
ganesha.conf: |
|
|
||||||
NFS_Core_Param {
|
|
||||||
NFS_Port = 2049;
|
|
||||||
Protocols = NFSv4;
|
|
||||||
Fsid_Device = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
NFSV4 {
|
|
||||||
RecoveryBackend = fs_ng;
|
|
||||||
RecoveryRoot = /recovery;
|
|
||||||
Lease_Lifetime = 40;
|
|
||||||
Grace_Period = 50;
|
|
||||||
}
|
|
||||||
|
|
||||||
VFS {
|
|
||||||
Link_Support = true;
|
|
||||||
Symlink_Support = true;
|
|
||||||
CanSetTime = true;
|
|
||||||
umask = 0000;
|
|
||||||
}
|
|
||||||
|
|
||||||
EXPORT {
|
|
||||||
Export_Id = 1;
|
|
||||||
|
|
||||||
Path = /export;
|
|
||||||
Pseudo = /export;
|
|
||||||
|
|
||||||
SecType = sys;
|
|
||||||
Protocols = NFSv4;
|
|
||||||
|
|
||||||
FSAL {
|
|
||||||
Name = VFS;
|
|
||||||
}
|
|
||||||
|
|
||||||
CLIENT {
|
|
||||||
Clients = *;
|
|
||||||
Access_Type = RW;
|
|
||||||
Squash = No_Root_Squash;
|
|
||||||
Protocols = NFSv4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# individual disks, exported alongside the merged /export view so
|
|
||||||
# clients (webdav) can also see each underlying disk on its own.
|
|
||||||
EXPORT {
|
|
||||||
Export_Id = 2;
|
|
||||||
|
|
||||||
Path = /disks/base;
|
|
||||||
Pseudo = /base;
|
|
||||||
|
|
||||||
SecType = sys;
|
|
||||||
Protocols = NFSv4;
|
|
||||||
|
|
||||||
FSAL {
|
|
||||||
Name = VFS;
|
|
||||||
}
|
|
||||||
|
|
||||||
CLIENT {
|
|
||||||
Clients = *;
|
|
||||||
Access_Type = RW;
|
|
||||||
Squash = No_Root_Squash;
|
|
||||||
Protocols = NFSv4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
EXPORT {
|
|
||||||
Export_Id = 3;
|
|
||||||
|
|
||||||
Path = /disks/sub1;
|
|
||||||
Pseudo = /sub1;
|
|
||||||
|
|
||||||
SecType = sys;
|
|
||||||
Protocols = NFSv4;
|
|
||||||
|
|
||||||
FSAL {
|
|
||||||
Name = VFS;
|
|
||||||
}
|
|
||||||
|
|
||||||
CLIENT {
|
|
||||||
Clients = *;
|
|
||||||
Access_Type = RW;
|
|
||||||
Squash = No_Root_Squash;
|
|
||||||
Protocols = NFSv4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG {
|
|
||||||
Default_Log_Level = INFO;
|
|
||||||
}
|
|
||||||
@@ -1,240 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: nfs-photo
|
|
||||||
namespace: nfs
|
|
||||||
spec:
|
|
||||||
interval: 30m
|
|
||||||
chartRef:
|
|
||||||
kind: OCIRepository
|
|
||||||
name: nfs-photo
|
|
||||||
driftDetection:
|
|
||||||
mode: enabled
|
|
||||||
values:
|
|
||||||
controllers:
|
|
||||||
app:
|
|
||||||
strategy: Recreate
|
|
||||||
podDisruptionBudget:
|
|
||||||
maxUnavailable: "0"
|
|
||||||
initContainers:
|
|
||||||
fix-permissions:
|
|
||||||
image:
|
|
||||||
repository: hectorm/nfs-ganesha
|
|
||||||
tag: v10
|
|
||||||
command:
|
|
||||||
- sh
|
|
||||||
- -c
|
|
||||||
- chmod -R a+rwX /disks/base /disks/sub1
|
|
||||||
# native sidecar (restartPolicy: Always): mounts the two disks and
|
|
||||||
# exposes their union at /disks/merged via FUSE. It must be up and
|
|
||||||
# actually mounted *before* the "app" container is created, since
|
|
||||||
# HostToContainer propagation only relays mounts made *after* the
|
|
||||||
# receiving container's own mount exists - it won't retroactively
|
|
||||||
# pick up a FUSE mount that's already there. Running it as a
|
|
||||||
# restartPolicy:Always init container (started, gated on the
|
|
||||||
# startupProbe below, before regular containers) guarantees that
|
|
||||||
# ordering; a regular sidecar container racing "app" on every pod
|
|
||||||
# start does not.
|
|
||||||
mergerfs:
|
|
||||||
dependsOn:
|
|
||||||
- fix-permissions
|
|
||||||
restartPolicy: Always
|
|
||||||
image:
|
|
||||||
repository: ghcr.io/hotio/mergerfs
|
|
||||||
tag: release-v2.42.0
|
|
||||||
args:
|
|
||||||
- "-o"
|
|
||||||
# category.search=newest (not ff): getattr on the merged root
|
|
||||||
# dir has to report one branch's attrs, and with ff that's
|
|
||||||
# always the first branch (base) regardless of which branch
|
|
||||||
# actually changed. NFS-Ganesha's directory cache relies on
|
|
||||||
# that mtime to know when to re-fetch a stale readdir listing
|
|
||||||
# - with ff, writes to any branch but the first never bump the
|
|
||||||
# merged root's reported mtime, so Ganesha keeps serving a
|
|
||||||
# stale listing to NFS clients (confirmed: mergerfs's own
|
|
||||||
# readdir is always a correct live union - this is purely a
|
|
||||||
# getattr/mtime-propagation issue up through the NFS cache).
|
|
||||||
- "allow_other,use_ino,func.create=ff,category.action=all,category.create=ff,category.search=newest"
|
|
||||||
- "/disks/base:/disks/sub1"
|
|
||||||
- "/disks/merged"
|
|
||||||
securityContext:
|
|
||||||
privileged: true
|
|
||||||
probes:
|
|
||||||
startup:
|
|
||||||
enabled: true
|
|
||||||
custom: true
|
|
||||||
spec:
|
|
||||||
exec:
|
|
||||||
command:
|
|
||||||
- sh
|
|
||||||
- -c
|
|
||||||
- grep -q fuse.mergerfs /proc/mounts
|
|
||||||
periodSeconds: 1
|
|
||||||
timeoutSeconds: 2
|
|
||||||
failureThreshold: 30
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 50m
|
|
||||||
memory: 64Mi
|
|
||||||
limits:
|
|
||||||
memory: 512Mi
|
|
||||||
# runs after mergerfs is confirmed mounted (see dependsOn) and has
|
|
||||||
# /export, /disks/base and /disks/sub1 all mounted too, so the
|
|
||||||
# /proc/self/mounts snapshot it takes covers every path ganesha
|
|
||||||
# exports. ganesha's FSAL_VFS resolves each EXPORT's Path against
|
|
||||||
# this frozen /etc/mtab, not the live /proc/mounts - any exported
|
|
||||||
# path missing from it (e.g. this ran before mergerfs, or without
|
|
||||||
# that path mounted here at all) fails at startup with
|
|
||||||
# "resolve_posix_filesystem(<path>) ... No such file or directory"
|
|
||||||
# even though the path is mounted fine in every other container.
|
|
||||||
mtab-setup:
|
|
||||||
dependsOn:
|
|
||||||
- mergerfs
|
|
||||||
image:
|
|
||||||
repository: hectorm/nfs-ganesha
|
|
||||||
tag: v10
|
|
||||||
command:
|
|
||||||
- sh
|
|
||||||
- -c
|
|
||||||
- cat /proc/self/mounts > /mtab-vol/mtab
|
|
||||||
containers:
|
|
||||||
app:
|
|
||||||
image:
|
|
||||||
repository: hectorm/nfs-ganesha
|
|
||||||
tag: v10
|
|
||||||
securityContext:
|
|
||||||
readOnlyRootFilesystem: true
|
|
||||||
capabilities:
|
|
||||||
drop:
|
|
||||||
- ALL
|
|
||||||
add:
|
|
||||||
- CHOWN
|
|
||||||
- DAC_OVERRIDE
|
|
||||||
- DAC_READ_SEARCH
|
|
||||||
- FOWNER
|
|
||||||
- FSETID
|
|
||||||
- SETGID
|
|
||||||
- SETUID
|
|
||||||
- SYS_RESOURCE
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: true
|
|
||||||
spec:
|
|
||||||
initialDelaySeconds: 2
|
|
||||||
periodSeconds: 10
|
|
||||||
timeoutSeconds: 2
|
|
||||||
failureThreshold: 3
|
|
||||||
readiness:
|
|
||||||
enabled: true
|
|
||||||
spec:
|
|
||||||
initialDelaySeconds: 1
|
|
||||||
periodSeconds: 2
|
|
||||||
timeoutSeconds: 1
|
|
||||||
failureThreshold: 2
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 50m
|
|
||||||
memory: 128Mi
|
|
||||||
limits:
|
|
||||||
memory: 512Mi
|
|
||||||
|
|
||||||
service:
|
|
||||||
app:
|
|
||||||
controller: app
|
|
||||||
# cluster-internal only. pinned (not DNS name): webdav's PV mounts
|
|
||||||
# this over NFS via the kubelet's in-tree kernel NFS client, which
|
|
||||||
# runs in the node's host network namespace and can't reliably
|
|
||||||
# resolve/route Kubernetes Service DNS names - it needs a stable IP
|
|
||||||
# it can reach directly.
|
|
||||||
type: ClusterIP
|
|
||||||
clusterIP: 10.43.166.34
|
|
||||||
ports:
|
|
||||||
nfs:
|
|
||||||
port: 2049
|
|
||||||
protocol: TCP
|
|
||||||
|
|
||||||
persistence:
|
|
||||||
config:
|
|
||||||
type: configMap
|
|
||||||
name: nfs-photo-config
|
|
||||||
globalMounts:
|
|
||||||
- path: /etc/ganesha/ganesha.conf
|
|
||||||
subPath: ganesha.conf
|
|
||||||
readOnly: true
|
|
||||||
base:
|
|
||||||
type: persistentVolumeClaim
|
|
||||||
accessMode: ReadWriteOnce
|
|
||||||
size: 100Gi
|
|
||||||
storageClass: longhorn-single-replica
|
|
||||||
retain: true
|
|
||||||
advancedMounts:
|
|
||||||
app:
|
|
||||||
mergerfs:
|
|
||||||
- path: /disks/base
|
|
||||||
fix-permissions:
|
|
||||||
- path: /disks/base
|
|
||||||
# exported directly as its own NFS share (Pseudo=/base, see
|
|
||||||
# configmap.yaml) alongside the merged /export view.
|
|
||||||
app:
|
|
||||||
- path: /disks/base
|
|
||||||
mtab-setup:
|
|
||||||
- path: /disks/base
|
|
||||||
sub1:
|
|
||||||
type: persistentVolumeClaim
|
|
||||||
accessMode: ReadWriteOnce
|
|
||||||
size: 100Gi
|
|
||||||
storageClass: longhorn-single-replica
|
|
||||||
retain: true
|
|
||||||
advancedMounts:
|
|
||||||
app:
|
|
||||||
mergerfs:
|
|
||||||
- path: /disks/sub1
|
|
||||||
fix-permissions:
|
|
||||||
- path: /disks/sub1
|
|
||||||
# exported directly as its own NFS share (Pseudo=/sub1, see
|
|
||||||
# configmap.yaml) alongside the merged /export view.
|
|
||||||
app:
|
|
||||||
- path: /disks/sub1
|
|
||||||
mtab-setup:
|
|
||||||
- path: /disks/sub1
|
|
||||||
merged:
|
|
||||||
type: emptyDir
|
|
||||||
advancedMounts:
|
|
||||||
app:
|
|
||||||
mergerfs:
|
|
||||||
- path: /disks/merged
|
|
||||||
mountPropagation: Bidirectional
|
|
||||||
app:
|
|
||||||
- path: /export
|
|
||||||
mountPropagation: HostToContainer
|
|
||||||
mtab-setup:
|
|
||||||
- path: /export
|
|
||||||
mountPropagation: HostToContainer
|
|
||||||
dev-fuse:
|
|
||||||
type: hostPath
|
|
||||||
hostPath: /dev/fuse
|
|
||||||
advancedMounts:
|
|
||||||
app:
|
|
||||||
mergerfs:
|
|
||||||
- path: /dev/fuse
|
|
||||||
run:
|
|
||||||
type: emptyDir
|
|
||||||
globalMounts:
|
|
||||||
- path: /run
|
|
||||||
tmp:
|
|
||||||
type: emptyDir
|
|
||||||
globalMounts:
|
|
||||||
- path: /tmp
|
|
||||||
recovery:
|
|
||||||
type: emptyDir
|
|
||||||
globalMounts:
|
|
||||||
- path: /recovery
|
|
||||||
etc-mtab:
|
|
||||||
type: emptyDir
|
|
||||||
advancedMounts:
|
|
||||||
app:
|
|
||||||
app:
|
|
||||||
- path: /etc/mtab
|
|
||||||
subPath: mtab
|
|
||||||
mtab-setup:
|
|
||||||
- path: /mtab-vol
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
apiVersion: source.toolkit.fluxcd.io/v1
|
|
||||||
kind: OCIRepository
|
|
||||||
metadata:
|
|
||||||
name: nfs-photo
|
|
||||||
namespace: nfs
|
|
||||||
spec:
|
|
||||||
interval: 1h
|
|
||||||
url: oci://ghcr.io/bjw-s-labs/helm/app-template
|
|
||||||
ref:
|
|
||||||
tag: "5.0.1"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
resources:
|
|
||||||
- helmrepository.yaml
|
|
||||||
- configmap.yaml
|
|
||||||
- helmrelease.yaml
|
|
||||||
@@ -90,21 +90,6 @@ spec:
|
|||||||
existingClaim: ganesha-export
|
existingClaim: ganesha-export
|
||||||
globalMounts:
|
globalMounts:
|
||||||
- path: /webdav/export
|
- path: /webdav/export
|
||||||
photo:
|
|
||||||
type: persistentVolumeClaim
|
|
||||||
existingClaim: nfs-photo-export
|
|
||||||
globalMounts:
|
|
||||||
- path: /webdav/photo/library
|
|
||||||
photo-base:
|
|
||||||
type: persistentVolumeClaim
|
|
||||||
existingClaim: nfs-photo-base
|
|
||||||
globalMounts:
|
|
||||||
- path: /webdav/photo/library-base
|
|
||||||
photo-sub1:
|
|
||||||
type: persistentVolumeClaim
|
|
||||||
existingClaim: nfs-photo-sub1
|
|
||||||
globalMounts:
|
|
||||||
- path: /webdav/photo/library-sub1
|
|
||||||
sda2:
|
sda2:
|
||||||
type: persistentVolumeClaim
|
type: persistentVolumeClaim
|
||||||
existingClaim: nas1-sda2
|
existingClaim: nas1-sda2
|
||||||
|
|||||||
@@ -36,118 +36,6 @@ spec:
|
|||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: PersistentVolume
|
kind: PersistentVolume
|
||||||
metadata:
|
|
||||||
name: nfs-photo-export-nfs
|
|
||||||
spec:
|
|
||||||
capacity:
|
|
||||||
storage: 200Gi
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
persistentVolumeReclaimPolicy: Retain
|
|
||||||
storageClassName: ""
|
|
||||||
mountOptions:
|
|
||||||
- nfsvers=4.1
|
|
||||||
nfs:
|
|
||||||
# pinned ClusterIP, not the service DNS name - kubelet's in-tree kernel
|
|
||||||
# NFS client runs in the node's host network namespace and can't
|
|
||||||
# reliably resolve/route Kubernetes Service DNS names. See nfs-photo's
|
|
||||||
# helmrelease.yaml (service.app.clusterIP) for the matching pin.
|
|
||||||
server: 10.43.166.34
|
|
||||||
path: /export
|
|
||||||
claimRef:
|
|
||||||
namespace: webdav
|
|
||||||
name: nfs-photo-export
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: nfs-photo-export
|
|
||||||
namespace: webdav
|
|
||||||
annotations:
|
|
||||||
helm.sh/resource-policy: keep
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
storageClassName: ""
|
|
||||||
volumeName: nfs-photo-export-nfs
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 200Gi
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolume
|
|
||||||
metadata:
|
|
||||||
name: nfs-photo-base-nfs
|
|
||||||
spec:
|
|
||||||
capacity:
|
|
||||||
storage: 100Gi
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
persistentVolumeReclaimPolicy: Retain
|
|
||||||
storageClassName: ""
|
|
||||||
mountOptions:
|
|
||||||
- nfsvers=4.1
|
|
||||||
nfs:
|
|
||||||
server: 10.43.166.34
|
|
||||||
path: /base
|
|
||||||
claimRef:
|
|
||||||
namespace: webdav
|
|
||||||
name: nfs-photo-base
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: nfs-photo-base
|
|
||||||
namespace: webdav
|
|
||||||
annotations:
|
|
||||||
helm.sh/resource-policy: keep
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
storageClassName: ""
|
|
||||||
volumeName: nfs-photo-base-nfs
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 100Gi
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolume
|
|
||||||
metadata:
|
|
||||||
name: nfs-photo-sub1-nfs
|
|
||||||
spec:
|
|
||||||
capacity:
|
|
||||||
storage: 100Gi
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
persistentVolumeReclaimPolicy: Retain
|
|
||||||
storageClassName: ""
|
|
||||||
mountOptions:
|
|
||||||
- nfsvers=4.1
|
|
||||||
nfs:
|
|
||||||
server: 10.43.166.34
|
|
||||||
path: /sub1
|
|
||||||
claimRef:
|
|
||||||
namespace: webdav
|
|
||||||
name: nfs-photo-sub1
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: nfs-photo-sub1
|
|
||||||
namespace: webdav
|
|
||||||
annotations:
|
|
||||||
helm.sh/resource-policy: keep
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
storageClassName: ""
|
|
||||||
volumeName: nfs-photo-sub1-nfs
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 100Gi
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolume
|
|
||||||
metadata:
|
metadata:
|
||||||
name: nas1-sda2-nfs
|
name: nas1-sda2-nfs
|
||||||
spec:
|
spec:
|
||||||
|
|||||||
@@ -14,6 +14,5 @@ resources:
|
|||||||
- fava.yaml
|
- fava.yaml
|
||||||
- infcloud.yaml
|
- infcloud.yaml
|
||||||
- syncthing.yaml
|
- syncthing.yaml
|
||||||
- nfs-photo.yaml
|
|
||||||
- photo-stats.yaml
|
- photo-stats.yaml
|
||||||
- immich.yaml
|
- immich.yaml
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
|
||||||
kind: Kustomization
|
|
||||||
metadata:
|
|
||||||
name: nfs-photo
|
|
||||||
namespace: flux-system
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
sourceRef:
|
|
||||||
kind: GitRepository
|
|
||||||
name: flux-system
|
|
||||||
path: ./clusters/base/apps/nfs-photo
|
|
||||||
prune: true
|
|
||||||
wait: true
|
|
||||||
dependsOn:
|
|
||||||
- name: namespaces
|
|
||||||
- name: infra
|
|
||||||
retryInterval: 5s
|
|
||||||
@@ -14,7 +14,6 @@ spec:
|
|||||||
dependsOn:
|
dependsOn:
|
||||||
- name: namespaces
|
- name: namespaces
|
||||||
- name: nfs-ganesha
|
- name: nfs-ganesha
|
||||||
- name: nfs-photo
|
|
||||||
retryInterval: 5s
|
retryInterval: 5s
|
||||||
decryption:
|
decryption:
|
||||||
provider: sops
|
provider: sops
|
||||||
|
|||||||
Reference in New Issue
Block a user