From c6172e58cf52888d53bb0d3d87c17a3d0760d960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20K=C3=A4ldstr=C3=B6m?= Date: Fri, 25 Mar 2016 23:45:59 +0200 Subject: [PATCH] Make kubelet use an arch-specific pause image depending on GOARCH --- cmd/kubelet/app/options/options.go | 15 ++++++++++++++- cmd/kubelet/app/server.go | 2 +- pkg/kubelet/dockertools/docker_test.go | 4 ++-- pkg/kubelet/dockertools/manager_test.go | 6 +++--- pkg/kubelet/network/cni/cni_test.go | 4 ++-- pkg/kubelet/types/constants.go | 1 - 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/cmd/kubelet/app/options/options.go b/cmd/kubelet/app/options/options.go index 81bc772bc83..18ad73052ef 100644 --- a/cmd/kubelet/app/options/options.go +++ b/cmd/kubelet/app/options/options.go @@ -19,6 +19,7 @@ package options import ( _ "net/http/pprof" + "runtime" "time" "k8s.io/kubernetes/pkg/api" @@ -36,8 +37,20 @@ import ( const ( defaultRootDir = "/var/lib/kubelet" experimentalFlannelOverlay = false + + defaultPodInfraContainerImageName = "gcr.io/google_containers/pause" + defaultPodInfraContainerImageVersion = "2.0" ) +// Returns the arch-specific pause image that kubelet should use as the default +func GetDefaultPodInfraContainerImage() string { + if runtime.GOARCH == "amd64" { + return defaultPodInfraContainerImageName + ":" + defaultPodInfraContainerImageVersion + } else { + return defaultPodInfraContainerImageName + "-" + runtime.GOARCH + ":" + defaultPodInfraContainerImageVersion + } +} + // KubeletServer encapsulates all of the parameters necessary for starting up // a kubelet. These can either be set via command line or directly. type KubeletServer struct { @@ -105,7 +118,7 @@ func NewKubeletServer() *KubeletServer { NodeLabels: make(map[string]string), OOMScoreAdj: qos.KubeletOOMScoreAdj, LockFilePath: "", - PodInfraContainerImage: kubetypes.PodInfraContainerImage, + PodInfraContainerImage: GetDefaultPodInfraContainerImage(), Port: ports.KubeletPort, ReadOnlyPort: ports.KubeletReadOnlyPort, RegisterNode: true, // will be ignored if no apiserver is configured diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 848c5d89ea9..2e90b29bc58 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -553,7 +553,7 @@ func SimpleKubelet(client *clientset.Clientset, NodeStatusUpdateFrequency: nodeStatusUpdateFrequency, OOMAdjuster: oom.NewFakeOOMAdjuster(), OSInterface: osInterface, - PodInfraContainerImage: kubetypes.PodInfraContainerImage, + PodInfraContainerImage: options.GetDefaultPodInfraContainerImage(), Port: port, ReadOnlyPort: readOnlyPort, RegisterNode: true, diff --git a/pkg/kubelet/dockertools/docker_test.go b/pkg/kubelet/dockertools/docker_test.go index 1a7366560ec..8792f24b0a2 100644 --- a/pkg/kubelet/dockertools/docker_test.go +++ b/pkg/kubelet/dockertools/docker_test.go @@ -29,6 +29,7 @@ import ( "github.com/docker/docker/pkg/jsonmessage" docker "github.com/fsouza/go-dockerclient" cadvisorapi "github.com/google/cadvisor/info/v1" + "k8s.io/kubernetes/cmd/kubelet/app/options" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/credentialprovider" @@ -36,7 +37,6 @@ import ( containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" "k8s.io/kubernetes/pkg/kubelet/network" nettest "k8s.io/kubernetes/pkg/kubelet/network/testing" - kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/types" hashutil "k8s.io/kubernetes/pkg/util/hash" "k8s.io/kubernetes/pkg/util/parsers" @@ -707,7 +707,7 @@ func TestFindContainersByPod(t *testing.T) { fakeClient := &FakeDockerClient{} np, _ := network.InitNetworkPlugin([]network.NetworkPlugin{}, "", nettest.NewFakeHost(nil)) // image back-off is set to nil, this test should not pull images - containerManager := NewFakeDockerManager(fakeClient, &record.FakeRecorder{}, nil, nil, &cadvisorapi.MachineInfo{}, kubetypes.PodInfraContainerImage, 0, 0, "", containertest.FakeOS{}, np, nil, nil, nil) + containerManager := NewFakeDockerManager(fakeClient, &record.FakeRecorder{}, nil, nil, &cadvisorapi.MachineInfo{}, options.GetDefaultPodInfraContainerImage(), 0, 0, "", containertest.FakeOS{}, np, nil, nil, nil) for i, test := range tests { fakeClient.ContainerList = test.containerList fakeClient.ExitedContainerList = test.exitedContainerList diff --git a/pkg/kubelet/dockertools/manager_test.go b/pkg/kubelet/dockertools/manager_test.go index c5a6274157a..70c4dac1246 100644 --- a/pkg/kubelet/dockertools/manager_test.go +++ b/pkg/kubelet/dockertools/manager_test.go @@ -32,6 +32,7 @@ import ( docker "github.com/fsouza/go-dockerclient" cadvisorapi "github.com/google/cadvisor/info/v1" "github.com/stretchr/testify/assert" + "k8s.io/kubernetes/cmd/kubelet/app/options" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/client/record" @@ -40,7 +41,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/network" nettest "k8s.io/kubernetes/pkg/kubelet/network/testing" proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" - kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/util" @@ -95,7 +95,7 @@ func newTestDockerManagerWithHTTPClientWithVersion(fakeHTTPClient *fakeHTTP, ver proberesults.NewManager(), containerRefManager, &cadvisorapi.MachineInfo{}, - kubetypes.PodInfraContainerImage, + options.GetDefaultPodInfraContainerImage(), 0, 0, "", containertest.FakeOS{}, networkPlugin, @@ -572,7 +572,7 @@ func generatePodInfraContainerHash(pod *api.Pod) uint64 { container := &api.Container{ Name: PodInfraContainerName, - Image: kubetypes.PodInfraContainerImage, + Image: options.GetDefaultPodInfraContainerImage(), Ports: ports, ImagePullPolicy: podInfraContainerImagePullPolicy, } diff --git a/pkg/kubelet/network/cni/cni_test.go b/pkg/kubelet/network/cni/cni_test.go index 4e92e5d288f..3d2179a0d96 100644 --- a/pkg/kubelet/network/cni/cni_test.go +++ b/pkg/kubelet/network/cni/cni_test.go @@ -33,6 +33,7 @@ import ( docker "github.com/fsouza/go-dockerclient" cadvisorapi "github.com/google/cadvisor/info/v1" + "k8s.io/kubernetes/cmd/kubelet/app/options" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" @@ -41,7 +42,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/network" nettest "k8s.io/kubernetes/pkg/kubelet/network/testing" proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" - kubetypes "k8s.io/kubernetes/pkg/kubelet/types" utiltesting "k8s.io/kubernetes/pkg/util/testing" ) @@ -152,7 +152,7 @@ func newTestDockerManager() (*dockertools.DockerManager, *dockertools.FakeDocker proberesults.NewManager(), containerRefManager, &cadvisorapi.MachineInfo{}, - kubetypes.PodInfraContainerImage, + options.GetDefaultPodInfraContainerImage(), 0, 0, "", containertest.FakeOS{}, networkPlugin, diff --git a/pkg/kubelet/types/constants.go b/pkg/kubelet/types/constants.go index 44958feadcd..060fec752ab 100644 --- a/pkg/kubelet/types/constants.go +++ b/pkg/kubelet/types/constants.go @@ -17,7 +17,6 @@ limitations under the License. package types const ( - PodInfraContainerImage = "gcr.io/google_containers/pause:2.0" // system default DNS resolver configuration ResolvConfDefault = "/etc/resolv.conf" )