33 lines
1.4 KiB
YAML
33 lines
1.4 KiB
YAML
# Dedicated StorageClass for the macOS VM disk.
|
|||
|
|
#
|
||
|
|
# The default `longhorn` class does not work here, for two independent reasons:
|
||
|
|
#
|
||
|
|
# 1. Replica count. Default is 3, and Longhorn schedules against
|
||
|
|
# storageMaximum - storageScheduled with over-provisioning at 100%. Free
|
||
|
|
# space is cp-1 146Gi / cp-2 8Gi / cp-3 146Gi / worker-1 292Gi, so a 200Gi
|
||
|
|
# volume has only one node that can hold even a single replica — a 3-replica
|
||
|
|
# volume fails outright with ReplicaSchedulingFailure.
|
||
|
|
# 2. Binding mode. `Immediate` provisions the volume the moment the PVC is
|
||
|
|
# created, before any pod is scheduled. Combined with strict-local that
|
||
|
|
# pins the data to an arbitrary node, not the one the VM runs on.
|
||
|
|
#
|
||
|
|
# So: one replica, kept local to the VM, bound only once the pod has a node.
|
||
|
|
apiVersion: storage.k8s.io/v1
|
||
|
|
kind: StorageClass
|
||
|
|
metadata:
|
||
|
|
name: longhorn-imessage-local
|
||
|
|
provisioner: driver.longhorn.io
|
||
|
|
allowVolumeExpansion: true
|
||
|
|
reclaimPolicy: Delete
|
||
|
|
# The pod is pinned to worker-2 by nodeSelector; wait for it to be scheduled so
|
||
|
|
# the replica is placed on that node and not somewhere else.
|
||
|
|
volumeBindingMode: WaitForFirstConsumer
|
||
|
|
parameters:
|
||
|
|
# A qcow2 backing a live VM is latency-sensitive and rewritten constantly.
|
||
|
|
# Serving it over the network from another node's disk would be the single
|
||
|
|
# worst thing for guest responsiveness, so force it local.
|
||
|
|
numberOfReplicas: "1"
|
||
|
|
dataLocality: "strict-local"
|
||
|
|
staleReplicaTimeout: "30"
|
||
|
|
fsType: "ext4"
|