auto set LocalStorageCapacityIsolation for BTRFS

pull/12990/head
Steven Powell 2021-11-30 14:34:57 -08:00
parent e1cecc0fa0
commit 592e2b01ca
2 changed files with 30 additions and 0 deletions

View File

@ -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 return cc
} }

View File

@ -19,6 +19,7 @@ package driver
import ( import (
"fmt" "fmt"
"os" "os"
"os/exec"
"runtime" "runtime"
"sort" "sort"
"strconv" "strconv"
@ -144,6 +145,24 @@ func IsDockerDesktop(name string) bool {
return false 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 // IsMock checks if the driver is a mock
func IsMock(name string) bool { func IsMock(name string) bool {
return name == Mock return name == Mock