diff --git a/pkg/kubelet/dockershim/docker_container.go b/pkg/kubelet/dockershim/docker_container.go index 51379b9c66f..a990a300117 100644 --- a/pkg/kubelet/dockershim/docker_container.go +++ b/pkg/kubelet/dockershim/docker_container.go @@ -133,7 +133,7 @@ func (ds *dockerService) CreateContainer(podSandboxID string, config *runtimeapi if rOpts != nil { hc.Resources = dockercontainer.Resources{ Memory: rOpts.GetMemoryLimitInBytes(), - MemorySwap: -1, + MemorySwap: dockertools.DefaultMemorySwap(), CPUShares: rOpts.GetCpuShares(), CPUQuota: rOpts.GetCpuQuota(), CPUPeriod: rOpts.GetCpuPeriod(), diff --git a/pkg/kubelet/dockershim/docker_sandbox.go b/pkg/kubelet/dockershim/docker_sandbox.go index 1e4d4ce3af0..8074539c78a 100644 --- a/pkg/kubelet/dockershim/docker_sandbox.go +++ b/pkg/kubelet/dockershim/docker_sandbox.go @@ -26,6 +26,7 @@ import ( runtimeapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" + "k8s.io/kubernetes/pkg/kubelet/dockertools" "k8s.io/kubernetes/pkg/kubelet/qos" "k8s.io/kubernetes/pkg/kubelet/types" ) @@ -373,7 +374,7 @@ func sharesHostNetwork(container *dockertypes.ContainerJSON) bool { func setSandboxResources(hc *dockercontainer.HostConfig) { hc.Resources = dockercontainer.Resources{ - MemorySwap: -1, + MemorySwap: dockertools.DefaultMemorySwap(), CPUShares: defaultSandboxCPUshares, // Use docker's default cpu quota/period. } diff --git a/pkg/kubelet/dockertools/docker_manager.go b/pkg/kubelet/dockertools/docker_manager.go index cb8211fc72e..f48abb33035 100644 --- a/pkg/kubelet/dockertools/docker_manager.go +++ b/pkg/kubelet/dockertools/docker_manager.go @@ -28,7 +28,6 @@ import ( "os/exec" "path" "path/filepath" - "runtime" "strconv" "strings" "sync" @@ -710,11 +709,7 @@ func (dm *DockerManager) runContainer( SecurityOpt: fmtSecurityOpts, } - // There is no /etc/resolv.conf in Windows, DNS and DNSSearch options would have to be passed to Docker runtime instead - if runtime.GOOS == "windows" { - hc.DNS = opts.DNS - hc.DNSSearch = opts.DNSSearch - } + updateHostConfig(hc) // Set sysctls if requested if container.Name == PodInfraContainerName { diff --git a/pkg/kubelet/dockertools/docker_manager_linux.go b/pkg/kubelet/dockertools/docker_manager_linux.go index c806436c653..920c58ae990 100644 --- a/pkg/kubelet/dockertools/docker_manager_linux.go +++ b/pkg/kubelet/dockertools/docker_manager_linux.go @@ -20,9 +20,20 @@ package dockertools import ( dockertypes "github.com/docker/engine-api/types" + dockercontainer "github.com/docker/engine-api/types/container" + "k8s.io/kubernetes/pkg/api/v1" ) +// These two functions are OS specific (for now at least) +func updateHostConfig(config *dockercontainer.HostConfig) { + // no-op, there is a windows implementation that is different. +} + +func DefaultMemorySwap() int64 { + return -1 +} + func getContainerIP(container *dockertypes.ContainerJSON) string { result := "" if container.NetworkSettings != nil { diff --git a/pkg/kubelet/dockertools/docker_manager_unsupported.go b/pkg/kubelet/dockertools/docker_manager_unsupported.go index be8e48f24d7..1b2c3d8dfba 100644 --- a/pkg/kubelet/dockertools/docker_manager_unsupported.go +++ b/pkg/kubelet/dockertools/docker_manager_unsupported.go @@ -24,6 +24,14 @@ import ( dockertypes "github.com/docker/engine-api/types" ) +// These two functions are OS specific (for now at least) +func updateHostConfig(config *dockercontainer.HostConfig) { +} + +func DefaultMemorySwap() int64 { + return -1 +} + func getContainerIP(container *dockertypes.ContainerJSON) string { return "" } diff --git a/pkg/kubelet/dockertools/docker_manager_windows.go b/pkg/kubelet/dockertools/docker_manager_windows.go index 5e1842302af..31ba2d6f812 100644 --- a/pkg/kubelet/dockertools/docker_manager_windows.go +++ b/pkg/kubelet/dockertools/docker_manager_windows.go @@ -24,8 +24,24 @@ import ( "k8s.io/kubernetes/pkg/api/v1" dockertypes "github.com/docker/engine-api/types" + dockercontainer "github.com/docker/engine-api/types/container" ) +// These two functions are OS specific (for now at least) +func updateHostConfig(config *dockercontainer.HostConfig) { + // There is no /etc/resolv.conf in Windows, DNS and DNSSearch options would have to be passed to Docker runtime instead + hc.DNS = opts.DNS + hc.DNSSearch = opts.DNSSearch + + // MemorySwap == -1 is not currently supported in Docker 1.14 on Windows + // https://github.com/docker/docker/blob/master/daemon/daemon_windows.go#L175 + hc.Resources.MemorySwap = 0 +} + +func DefaultMemorySwap() int64 { + return 0 +} + func getContainerIP(container *dockertypes.ContainerJSON) string { if container.NetworkSettings != nil { for _, network := range container.NetworkSettings.Networks {