Add NFS and iSCSI Storage Classes
This commit is contained in:
2
go.mod
2
go.mod
@@ -3,7 +3,7 @@ module danicos.dev/daniel/homelab
|
|||||||
go 1.26.2
|
go 1.26.2
|
||||||
|
|
||||||
require (
|
require (
|
||||||
danicos.dev/daniel/go-kube v1.9.0
|
danicos.dev/daniel/go-kube v1.10.0
|
||||||
github.com/fatih/color v1.19.0
|
github.com/fatih/color v1.19.0
|
||||||
github.com/fluxcd/helm-controller/api v1.5.4
|
github.com/fluxcd/helm-controller/api v1.5.4
|
||||||
github.com/fluxcd/kustomize-controller/api v1.8.3
|
github.com/fluxcd/kustomize-controller/api v1.8.3
|
||||||
|
|||||||
4
go.sum
4
go.sum
@@ -1,5 +1,5 @@
|
|||||||
danicos.dev/daniel/go-kube v1.9.0 h1:agofABwT1oa/gaxV4Q/KvUvxz1iVr8aiAB+X41WSv8s=
|
danicos.dev/daniel/go-kube v1.10.0 h1:woCiANl8hSEXZYkDXWNeei+JYlls322EoIVekUF4hZs=
|
||||||
danicos.dev/daniel/go-kube v1.9.0/go.mod h1:MBGwFBrGyqkEQ55mK0PP2TdKO1oQSih4hLiPjye+8Gg=
|
danicos.dev/daniel/go-kube v1.10.0/go.mod h1:MBGwFBrGyqkEQ55mK0PP2TdKO1oQSih4hLiPjye+8Gg=
|
||||||
github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
|
github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
|
||||||
github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
|
github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
|
||||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
apiVersion: storage.k8s.io/v1
|
apiVersion: storage.k8s.io/v1
|
||||||
kind: CSIDriver
|
kind: CSIDriver
|
||||||
metadata:
|
metadata:
|
||||||
name: csi.truenas.io
|
name: cis.truenas.io
|
||||||
spec:
|
spec:
|
||||||
attachRequired: true
|
attachRequired: true
|
||||||
fsGroupPolicy: File
|
fsGroupPolicy: File
|
||||||
|
|||||||
13
infrastructure/hydra/truenas-csi/iscsi-storage-class.yaml
Normal file
13
infrastructure/hydra/truenas-csi/iscsi-storage-class.yaml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
allowVolumeExpansion: true
|
||||||
|
apiVersion: storage.k8s.io/v1
|
||||||
|
kind: StorageClass
|
||||||
|
metadata:
|
||||||
|
name: truenas-iscsi
|
||||||
|
parameters:
|
||||||
|
compression: LZ4
|
||||||
|
iscsi.blocksize: "4096"
|
||||||
|
protocol: iscsi
|
||||||
|
volblocksize: 16K
|
||||||
|
provisioner: cis.truenas.io
|
||||||
|
reclaimPolicy: Delete
|
||||||
|
volumeBindingMode: Immediate
|
||||||
@@ -4,14 +4,16 @@ metadata:
|
|||||||
name: truenas-csi
|
name: truenas-csi
|
||||||
namespace: truenas-csi
|
namespace: truenas-csi
|
||||||
resources:
|
resources:
|
||||||
|
- CSIDriver.yaml
|
||||||
|
- nfs-storage-class.yaml
|
||||||
- namespace.yaml
|
- namespace.yaml
|
||||||
- controller-deployment.yaml
|
- controller-service-account.yaml
|
||||||
- controller-cluster-role.yaml
|
- controller-cluster-role.yaml
|
||||||
|
- node-cluster-role.yaml
|
||||||
|
- node-deamonset.yaml
|
||||||
|
- config.yaml
|
||||||
|
- iscsi-storage-class.yaml
|
||||||
|
- controller-deployment.yaml
|
||||||
- controller-binding.yaml
|
- controller-binding.yaml
|
||||||
- node-service-account.yaml
|
- node-service-account.yaml
|
||||||
- node-cluster-role.yaml
|
|
||||||
- controller-service-account.yaml
|
|
||||||
- node-binding.yaml
|
- node-binding.yaml
|
||||||
- node-deamonset.yaml
|
|
||||||
- CSIDriver.yaml
|
|
||||||
- config.yaml
|
|
||||||
|
|||||||
11
infrastructure/hydra/truenas-csi/nfs-storage-class.yaml
Normal file
11
infrastructure/hydra/truenas-csi/nfs-storage-class.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
allowVolumeExpansion: true
|
||||||
|
apiVersion: storage.k8s.io/v1
|
||||||
|
kind: StorageClass
|
||||||
|
metadata:
|
||||||
|
name: truenas-nfs
|
||||||
|
parameters:
|
||||||
|
compression: LZ4
|
||||||
|
protocol: nfs
|
||||||
|
provisioner: cis.truenas.io
|
||||||
|
reclaimPolicy: Retain
|
||||||
|
volumeBindingMode: Immediate
|
||||||
@@ -17,8 +17,14 @@ var Linkding = Service{
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
Longhorn = "longhorn"
|
Longhorn = "longhorn"
|
||||||
Monitoring = "monitoring"
|
Monitoring = "monitoring"
|
||||||
TrueNAS_CSI = "truenas-csi"
|
)
|
||||||
TrueNASURL = "apex-truenas.orca-uaru.ts.net"
|
|
||||||
|
var (
|
||||||
|
TrueNAS_CSI = "truenas-csi"
|
||||||
|
TrueNASURL = "apex-truenas.orca-uaru.ts.net"
|
||||||
|
TrueNASProvisioner = "cis.truenas.io"
|
||||||
|
TrueNASSTorageClassNFS = "truenas-nfs"
|
||||||
|
TrueNASSTorageClass_iSCSI = "truenas-iscsi"
|
||||||
)
|
)
|
||||||
|
|||||||
56
pkg/truenas/storageclass.go
Normal file
56
pkg/truenas/storageclass.go
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
package truenas
|
||||||
|
|
||||||
|
import (
|
||||||
|
"danicos.dev/daniel/go-kube/pkg/kube"
|
||||||
|
"danicos.dev/daniel/homelab/pkg/root"
|
||||||
|
core "k8s.io/api/core/v1"
|
||||||
|
storage "k8s.io/api/storage/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
var NFSStorageClass storage.StorageClass
|
||||||
|
var iSCSIStorageClass storage.StorageClass
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
/*
|
||||||
|
From: https://github.com/truenas/truenas-csi
|
||||||
|
*/
|
||||||
|
NFSStorageClass = storage.StorageClass{
|
||||||
|
TypeMeta: kube.StorageClassMeta,
|
||||||
|
ObjectMeta: kube.ObjectMeta(root.TrueNASSTorageClassNFS, ""),
|
||||||
|
Provisioner: root.TrueNASProvisioner,
|
||||||
|
Parameters: map[string]string{
|
||||||
|
"protocol": "nfs",
|
||||||
|
"compression": "LZ4",
|
||||||
|
// Custom NFS mount options passed to clients
|
||||||
|
// "nfs.mountOptions": "hard,nfsvers=4.1",
|
||||||
|
},
|
||||||
|
ReclaimPolicy: new(core.PersistentVolumeReclaimRetain),
|
||||||
|
VolumeBindingMode: new(storage.VolumeBindingImmediate),
|
||||||
|
AllowVolumeExpansion: new(true),
|
||||||
|
}
|
||||||
|
iSCSIStorageClass = storage.StorageClass{
|
||||||
|
TypeMeta: kube.StorageClassMeta,
|
||||||
|
ObjectMeta: kube.ObjectMeta(root.TrueNASSTorageClass_iSCSI, ""),
|
||||||
|
Provisioner: root.TrueNASProvisioner,
|
||||||
|
Parameters: map[string]string{
|
||||||
|
"protocol": "iscsi",
|
||||||
|
"compression": "LZ4",
|
||||||
|
"volblocksize": "16K",
|
||||||
|
"iscsi.blocksize": "4096",
|
||||||
|
},
|
||||||
|
ReclaimPolicy: new(core.PersistentVolumeReclaimDelete),
|
||||||
|
VolumeBindingMode: new(storage.VolumeBindingImmediate),
|
||||||
|
AllowVolumeExpansion: new(true),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
NFS Parameters
|
||||||
|
Parameter Description Example
|
||||||
|
|
||||||
|
nfs.hosts Allowed hosts 10.0.0.0/8,192.168.1.0/24
|
||||||
|
nfs.networks Allowed networks 10.0.0.0/8
|
||||||
|
nfs.mountOptions Client mount options hard,nfsvers=4.1
|
||||||
|
nfs.mapAllUser NFS user mapping (default: root) postgres
|
||||||
|
nfs.mapAllGroup NFS group mapping (default: wheel) postgres
|
||||||
|
*/
|
||||||
@@ -83,8 +83,10 @@ func Stack() stack.Stack {
|
|||||||
"node-cluster-role": nodeRole,
|
"node-cluster-role": nodeRole,
|
||||||
"node-binding": kube.ClusterRoleBinding(nodeRole.Name+"-binding", nodeSA, nodeRole),
|
"node-binding": kube.ClusterRoleBinding(nodeRole.Name+"-binding", nodeSA, nodeRole),
|
||||||
"node-deamonset": nodeCSI(),
|
"node-deamonset": nodeCSI(),
|
||||||
"CSIDriver": CSIDriver("csi.truenas.io"),
|
"CSIDriver": CSIDriver(root.TrueNASProvisioner),
|
||||||
"config": config,
|
"config": config,
|
||||||
|
"nfs-storage-class": NFSStorageClass,
|
||||||
|
"iscsi-storage-class": iSCSIStorageClass,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
return kz.Stack(root.TrueNAS_CSI)
|
return kz.Stack(root.TrueNAS_CSI)
|
||||||
|
|||||||
Reference in New Issue
Block a user