diff --git a/cmd/minikube/cmd/start_flags.go b/cmd/minikube/cmd/start_flags.go index 9f79c9861a..a7c1f51113 100644 --- a/cmd/minikube/cmd/start_flags.go +++ b/cmd/minikube/cmd/start_flags.go @@ -518,6 +518,17 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, drvName s } } + if driver.IsDockerBTRFS(drvName) { + fg := "LocalStorageCapacityIsolation=false" + if !strings.Contains(cc.KubernetesConfig.FeatureGates, fg) { + klog.Info("auto-setting LocalStorageCapacityIsolation to false") + if len(cc.KubernetesConfig.FeatureGates) != 0 { + fg = "," + fg + } + cc.KubernetesConfig.FeatureGates += fg + } + } + return cc } diff --git a/pkg/minikube/driver/driver.go b/pkg/minikube/driver/driver.go index 3a76001a00..5b0d6d50c2 100644 --- a/pkg/minikube/driver/driver.go +++ b/pkg/minikube/driver/driver.go @@ -19,6 +19,7 @@ package driver import ( "fmt" "os" + "os/exec" "runtime" "sort" "strconv" @@ -144,6 +145,24 @@ func IsDockerDesktop(name string) bool { return false } +// IsDockerBTRFS checks if Docker is using btrfs storage driver +func IsDockerBTRFS(name string) bool { + if !IsDocker(name) { + return false + } + cmd := exec.Command("docker", "info", "-f", "{{.Driver}}") + if err := cmd.Run(); err != nil { + klog.Warning("failed to get Docker storage driver: %v", err) + return false + } + output, err := cmd.Output() + if err != nil { + klog.Warning("failed to get command output: %v", err) + return false + } + return strings.Contains(string(output), "btrfs") +} + // IsMock checks if the driver is a mock func IsMock(name string) bool { return name == Mock