docker podman drivers: warn if memory is above limit

pull/8718/head
Medya Gh 2020-07-13 16:59:11 -07:00
parent 380820bb42
commit b45fd2df8b
2 changed files with 31 additions and 0 deletions

View File

@ -757,10 +757,38 @@ func memoryLimits(drvName string) (int, int, error) {
return -1, -1, err
}
containerLimit = int(s.TotalMemory / 1024 / 1024)
myabeAdviceDockerResources(containerLimit, sysLimit, s.CPUs, drvName)
}
return sysLimit, containerLimit, nil
}
func myabeAdviceDockerResources(containerLimit int, sysLimit int, CPUs int, drvName string) {
if drvName == oci.Docker && runtime.GOOS != "linux" {
if containerLimit < 2492 {
out.T(out.Conflict, `Your Docker Desktop has only {{.container_limit}} memory. Increase memory to at least 2.5 GB or more:
Docker Icon > Settings > Resources > Memory
`, out.V{"container_limit": containerLimit})
// for users with more than 8 GB advice 3 GB
} else if containerLimit < 2997 && sysLimit > 8000 {
out.T(out.Tip, `Your system has {{.system_limit}}mb memory but Docker has only {{.container_limit}}mb. For a better performance increase to at least 3 GB.
Docker Icon > Settings > Resources > Memory
`, out.V{"container_limit": containerLimit, "system_limit": sysLimit})
}
if CPUs < 2 {
out.T(out.Conflict, `Your Docker Desktop has less than 2 CPUs. Increase CPUs for Docker Desktop:
Docker icon > Settings > Resources > CPUs
`, out.V{"container_limit": containerLimit})
}
}
}
// suggestMemoryAllocation calculates the default memory footprint in MB
func suggestMemoryAllocation(sysLimit int, containerLimit int, nodes int) int {
if mem := viper.GetInt(memory); mem != 0 {

View File

@ -232,6 +232,9 @@ func generateClusterConfig(cmd *cobra.Command, existing *config.ClusterConfig, k
if err != nil {
exit.WithCodeT(exit.Config, "Generate unable to parse memory '{{.memory}}': {{.error}}", out.V{"memory": viper.GetString(memory), "error": err})
}
if driver.IsKIC(drvName) && mem > containerLimit {
exit.UsageT("{{.driver_name}} service has only {{.container_limit}}mb memory but you specified {{.specified_memory}}mb", out.V{"container_limit": containerLimit, "specified_memory": mem, "driver_name": drvName})
}
} else {
glog.Infof("Using suggested %dMB memory alloc based on sys=%dMB, container=%dMB", mem, sysLimit, containerLimit)