From c050826fea089b478084db91a1314a44133bf3ac Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Mon, 19 Dec 2016 20:59:46 -0800 Subject: [PATCH] Set MemorySwap to zero on Windows --- .../kubeadm/v1alpha1/zz_generated.defaults.go | 2 +- .../v1beta1/zz_generated.conversion.go | 2 +- .../federation/v1beta1/zz_generated.deepcopy.go | 2 +- .../apis/federation/zz_generated.deepcopy.go | 2 +- pkg/api/v1/zz_generated.conversion.go | 2 +- pkg/api/zz_generated.deepcopy.go | 2 +- pkg/apis/apps/v1beta1/zz_generated.conversion.go | 2 +- pkg/apis/apps/v1beta1/zz_generated.deepcopy.go | 2 +- pkg/apis/apps/v1beta1/zz_generated.defaults.go | 2 +- pkg/apis/apps/zz_generated.deepcopy.go | 2 +- pkg/generated/openapi/zz_generated.openapi.go | 2 +- pkg/kubelet/dockershim/docker_container.go | 2 +- pkg/kubelet/dockershim/docker_sandbox.go | 3 ++- pkg/kubelet/dockertools/docker_manager.go | 7 +------ pkg/kubelet/dockertools/docker_manager_linux.go | 11 +++++++++++ .../dockertools/docker_manager_unsupported.go | 8 ++++++++ .../dockertools/docker_manager_windows.go | 16 ++++++++++++++++ 17 files changed, 50 insertions(+), 19 deletions(-) diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/zz_generated.defaults.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/zz_generated.defaults.go index 184f6f9e96c..8ae05da1a7e 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/zz_generated.defaults.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/zz_generated.defaults.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors. +Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/federation/apis/federation/v1beta1/zz_generated.conversion.go b/federation/apis/federation/v1beta1/zz_generated.conversion.go index a20a758d51a..6625707db11 100644 --- a/federation/apis/federation/v1beta1/zz_generated.conversion.go +++ b/federation/apis/federation/v1beta1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors. +Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/federation/apis/federation/v1beta1/zz_generated.deepcopy.go b/federation/apis/federation/v1beta1/zz_generated.deepcopy.go index fbe4374567a..d85fc68d59d 100644 --- a/federation/apis/federation/v1beta1/zz_generated.deepcopy.go +++ b/federation/apis/federation/v1beta1/zz_generated.deepcopy.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors. +Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/federation/apis/federation/zz_generated.deepcopy.go b/federation/apis/federation/zz_generated.deepcopy.go index 5126feb89cb..8a0ec8444bc 100644 --- a/federation/apis/federation/zz_generated.deepcopy.go +++ b/federation/apis/federation/zz_generated.deepcopy.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors. +Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/api/v1/zz_generated.conversion.go b/pkg/api/v1/zz_generated.conversion.go index df77700c688..f2c057fd610 100644 --- a/pkg/api/v1/zz_generated.conversion.go +++ b/pkg/api/v1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors. +Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/api/zz_generated.deepcopy.go b/pkg/api/zz_generated.deepcopy.go index e1358e98c39..4fefb8c7d80 100644 --- a/pkg/api/zz_generated.deepcopy.go +++ b/pkg/api/zz_generated.deepcopy.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors. +Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/apis/apps/v1beta1/zz_generated.conversion.go b/pkg/apis/apps/v1beta1/zz_generated.conversion.go index 57bd7ac6784..1112dc4929b 100644 --- a/pkg/apis/apps/v1beta1/zz_generated.conversion.go +++ b/pkg/apis/apps/v1beta1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors. +Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/apis/apps/v1beta1/zz_generated.deepcopy.go b/pkg/apis/apps/v1beta1/zz_generated.deepcopy.go index 005ba44c5aa..988438a455d 100644 --- a/pkg/apis/apps/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/apps/v1beta1/zz_generated.deepcopy.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors. +Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/apis/apps/v1beta1/zz_generated.defaults.go b/pkg/apis/apps/v1beta1/zz_generated.defaults.go index 8493cd3a644..3890c40a034 100644 --- a/pkg/apis/apps/v1beta1/zz_generated.defaults.go +++ b/pkg/apis/apps/v1beta1/zz_generated.defaults.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors. +Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/apis/apps/zz_generated.deepcopy.go b/pkg/apis/apps/zz_generated.deepcopy.go index 14acc56d8b7..0ab9929618e 100644 --- a/pkg/apis/apps/zz_generated.deepcopy.go +++ b/pkg/apis/apps/zz_generated.deepcopy.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors. +Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 9cb6d540cf3..d0616c5c00e 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors. +Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/kubelet/dockershim/docker_container.go b/pkg/kubelet/dockershim/docker_container.go index 9f2a153d133..d53b261ba65 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 1c0014da92b..d8e1365cdf5 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" ) @@ -370,7 +371,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 9b9abb6076b..f0c2d1f399e 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" @@ -705,11 +704,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 {