Implement CSI node plugin
This implements a CSI node plugin with registration support
backed by bind mounts from our XFS data partition.
It supports online volume expansion (and technically shrinking,
but K8s does not support shrinking) and CSI statistics backed by fsquota
Test Plan: TBD
X-Origin-Diff: phab/D471
GitOrigin-RevId: 6bc37dac3726b39bd5d71cfddb2d53aeee0c8b4d
diff --git a/core/internal/kubernetes/service.go b/core/internal/kubernetes/service.go
index ae93f4e..f3dc4f7 100644
--- a/core/internal/kubernetes/service.go
+++ b/core/internal/kubernetes/service.go
@@ -30,6 +30,7 @@
schema "git.monogon.dev/source/nexantic.git/core/generated/api"
"git.monogon.dev/source/nexantic.git/core/internal/common/supervisor"
"git.monogon.dev/source/nexantic.git/core/internal/consensus"
+ "git.monogon.dev/source/nexantic.git/core/internal/storage"
"git.monogon.dev/source/nexantic.git/core/pkg/logbuffer"
)
@@ -41,6 +42,7 @@
type Service struct {
consensusService *consensus.Service
+ storageService *storage.Manager
logger *zap.Logger
apiserverLogs *logbuffer.LogBuffer
controllerManagerLogs *logbuffer.LogBuffer
@@ -48,9 +50,10 @@
kubeletLogs *logbuffer.LogBuffer
}
-func New(logger *zap.Logger, consensusService *consensus.Service) *Service {
+func New(logger *zap.Logger, consensusService *consensus.Service, storageService *storage.Manager) *Service {
s := &Service{
consensusService: consensusService,
+ storageService: storageService,
logger: logger,
apiserverLogs: logbuffer.New(5000, 16384),
controllerManagerLogs: logbuffer.New(5000, 16384),
@@ -153,13 +156,15 @@
if err := supervisor.Run(ctx, "scheduler", runScheduler(*schedulerConfig, s.schedulerLogs)); err != nil {
return err
}
-
if err := supervisor.Run(ctx, "kubelet", runKubelet(&KubeletSpec{}, s.kubeletLogs)); err != nil {
return err
}
if err := supervisor.Run(ctx, "reconciler", runReconciler(masterKubeconfig)); err != nil {
return err
}
+ if err := supervisor.Run(ctx, "csi-plugin", runCSIPlugin(s.storageService)); err != nil {
+ return err
+ }
supervisor.Signal(ctx, supervisor.SignalHealthy)
supervisor.Signal(ctx, supervisor.SignalDone)
return nil