From 7955fdadbdc7ca0b947d2d9df6a046cb6bb66332 Mon Sep 17 00:00:00 2001 From: Seth Jennings Date: Tue, 19 Sep 2017 12:17:14 -0500 Subject: [PATCH 1/3] UPSTREAM: 51728: Enable CRI-O stats from cAdvisor --- .../kubernetes/cmd/kubelet/app/server.go | 3 +- .../kubernetes/pkg/kubelet/cadvisor/BUILD | 24 +++++++------- .../pkg/kubelet/cadvisor/cadvisor_linux.go | 26 ++++++--------- .../kubelet/cadvisor/cadvisor_unsupported.go | 2 +- .../pkg/kubelet/cadvisor/cadvisor_windows.go | 2 +- .../kubernetes/pkg/kubelet/cadvisor/types.go | 8 ++++- .../kubernetes/pkg/kubelet/cadvisor/util.go | 32 +++++++++++++++++++ .../test/e2e_node/environment/conformance.go | 2 +- 8 files changed, 65 insertions(+), 34 deletions(-) diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go b/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go index b6045ab6f1cd..223ef46bed9a 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go @@ -514,7 +514,8 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.KubeletDeps) (err error) { } if kubeDeps.CAdvisorInterface == nil { - kubeDeps.CAdvisorInterface, err = cadvisor.New(uint(s.CAdvisorPort), s.ContainerRuntime, s.RootDirectory) + imageFsInfoProvider := cadvisor.NewImageFsInfoProvider(s.ContainerRuntime, s.RemoteRuntimeEndpoint) + kubeDeps.CAdvisorInterface, err = cadvisor.New(uint(s.CAdvisorPort), imageFsInfoProvider, s.RootDirectory) if err != nil { return err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/BUILD index 49f641ab36df..9f4753b2229d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/BUILD @@ -8,6 +8,18 @@ load( "go_test", ) +go_test( + name = "go_default_test", + srcs = ["cadvisor_linux_test.go"], + library = ":go_default_library", + tags = ["automanaged"], + deps = [ + "//pkg/kubelet/types:go_default_library", + "//vendor/github.com/google/cadvisor/info/v1:go_default_library", + "//vendor/github.com/google/cadvisor/metrics:go_default_library", + ], +) + go_library( name = "go_default_library", srcs = [ @@ -36,18 +48,6 @@ go_library( ], ) -go_test( - name = "go_default_test", - srcs = ["cadvisor_linux_test.go"], - library = ":go_default_library", - tags = ["automanaged"], - deps = [ - "//pkg/kubelet/types:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/metrics:go_default_library", - ], -) - filegroup( name = "package-srcs", srcs = glob(["**"]), diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_linux.go index 8f8b3e8f877a..a8020a503c5c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_linux.go @@ -28,7 +28,6 @@ import ( "github.com/google/cadvisor/cache/memory" cadvisormetrics "github.com/google/cadvisor/container" "github.com/google/cadvisor/events" - cadvisorfs "github.com/google/cadvisor/fs" cadvisorhttp "github.com/google/cadvisor/http" cadvisorapi "github.com/google/cadvisor/info/v1" cadvisorapiv2 "github.com/google/cadvisor/info/v2" @@ -40,8 +39,8 @@ import ( ) type cadvisorClient struct { - runtime string - rootPath string + imageFsInfoProvider ImageFsInfoProvider + rootPath string manager.Manager } @@ -102,7 +101,7 @@ func containerLabels(c *cadvisorapi.ContainerInfo) map[string]string { } // New creates a cAdvisor and exports its API on the specified port if port > 0. -func New(port uint, runtime string, rootPath string) (Interface, error) { +func New(port uint, imageFsInfoProvider ImageFsInfoProvider, rootPath string) (Interface, error) { sysFs := sysfs.NewRealSysFs() // Create and start the cAdvisor container manager. @@ -112,9 +111,9 @@ func New(port uint, runtime string, rootPath string) (Interface, error) { } cadvisorClient := &cadvisorClient{ - runtime: runtime, - rootPath: rootPath, - Manager: m, + imageFsInfoProvider: imageFsInfoProvider, + rootPath: rootPath, + Manager: m, } err = cadvisorClient.exportHTTP(port) @@ -194,17 +193,10 @@ func (cc *cadvisorClient) MachineInfo() (*cadvisorapi.MachineInfo, error) { } func (cc *cadvisorClient) ImagesFsInfo() (cadvisorapiv2.FsInfo, error) { - var label string - - switch cc.runtime { - case "docker": - label = cadvisorfs.LabelDockerImages - case "rkt": - label = cadvisorfs.LabelRktImages - default: - return cadvisorapiv2.FsInfo{}, fmt.Errorf("ImagesFsInfo: unknown runtime: %v", cc.runtime) + label, err := cc.imageFsInfoProvider.ImageFsInfoLabel() + if err != nil { + return cadvisorapiv2.FsInfo{}, err } - return cc.getFsInfo(label) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_unsupported.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_unsupported.go index d28d71ffa001..7dbbde83ffd0 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_unsupported.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_unsupported.go @@ -31,7 +31,7 @@ type cadvisorUnsupported struct { var _ Interface = new(cadvisorUnsupported) -func New(port uint, runtime string, rootPath string) (Interface, error) { +func New(port uint, imageFsInfoProvider ImageFsInfoProvider, rootPath string) (Interface, error) { return &cadvisorUnsupported{}, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_windows.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_windows.go index 4de44d7fbaab..0033f92314ae 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_windows.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_windows.go @@ -30,7 +30,7 @@ type cadvisorClient struct { var _ Interface = new(cadvisorClient) // New creates a cAdvisor and exports its API on the specified port if port > 0. -func New(port uint, runtime string, rootPath string) (Interface, error) { +func New(port uint, imageFsInfoProvider ImageFsInfoProvider, rootPath string) (Interface, error) { return &cadvisorClient{}, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/types.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/types.go index 2a97ba352371..9ad6267ec211 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/types.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/types.go @@ -33,7 +33,7 @@ type Interface interface { VersionInfo() (*cadvisorapi.VersionInfo, error) - // Returns usage information about the filesystem holding Docker images. + // Returns usage information about the filesystem holding container images. ImagesFsInfo() (cadvisorapiv2.FsInfo, error) // Returns usage information about the root filesystem. @@ -45,3 +45,9 @@ type Interface interface { // HasDedicatedImageFs returns true iff a dedicated image filesystem exists for storing images. HasDedicatedImageFs() (bool, error) } + +// ImageFsInfoProvider informs cAdvisor how to find imagefs for container images. +type ImageFsInfoProvider interface { + // ImageFsInfoLabel returns the label cAdvisor should use to find the filesystem holding container images. + ImageFsInfoLabel() (string, error) +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/util.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/util.go index bd30c6653020..42248f6695b2 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/util.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/util.go @@ -17,12 +17,44 @@ limitations under the License. package cadvisor import ( + "fmt" + + cadvisorfs "github.com/google/cadvisor/fs" cadvisorapi "github.com/google/cadvisor/info/v1" cadvisorapi2 "github.com/google/cadvisor/info/v2" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/kubernetes/pkg/api/v1" ) +// imageFsInfoProvider knows how to translate the configured runtime +// to its file system label for images. +type imageFsInfoProvider struct { + runtime string + runtimeEndpoint string +} + +// ImageFsInfoLabel returns the image fs label for the configured runtime. +// For remote runtimes, it handles additional runtimes natively understood by cAdvisor. +func (i *imageFsInfoProvider) ImageFsInfoLabel() (string, error) { + switch i.runtime { + case "docker": + return cadvisorfs.LabelDockerImages, nil + case "rkt": + return cadvisorfs.LabelRktImages, nil + case "remote": + // TODO: pending rebase including https://github.com/google/cadvisor/pull/1741 + if i.runtimeEndpoint == "/var/run/crio.sock" { + return "crio-images", nil + } + } + return "", fmt.Errorf("no imagefs label for configured runtime") +} + +// NewImageFsInfoProvider returns a provider for the specified runtime configuration. +func NewImageFsInfoProvider(runtime, runtimeEndpoint string) ImageFsInfoProvider { + return &imageFsInfoProvider{runtime: runtime, runtimeEndpoint: runtimeEndpoint} +} + func CapacityFromMachineInfo(info *cadvisorapi.MachineInfo) v1.ResourceList { c := v1.ResourceList{ v1.ResourceCPU: *resource.NewMilliQuantity( diff --git a/vendor/k8s.io/kubernetes/test/e2e_node/environment/conformance.go b/vendor/k8s.io/kubernetes/test/e2e_node/environment/conformance.go index ce50a109f0bc..32f3f6a9e3b3 100644 --- a/vendor/k8s.io/kubernetes/test/e2e_node/environment/conformance.go +++ b/vendor/k8s.io/kubernetes/test/e2e_node/environment/conformance.go @@ -99,7 +99,7 @@ func containerRuntime() error { } // Setup cadvisor to check the container environment - c, err := cadvisor.New(0 /*don't start the http server*/, "docker", "/var/lib/kubelet") + c, err := cadvisor.New(0 /*don't start the http server*/, cadvisor.NewImageFsInfoProvider("docker", ""), "/var/lib/kubelet") if err != nil { return printError("Container Runtime Check: %s Could not start cadvisor %v", failed, err) } From 75a0abec0d93fb08163879f898e337aca0ed81f8 Mon Sep 17 00:00:00 2001 From: Seth Jennings Date: Tue, 19 Sep 2017 12:18:02 -0500 Subject: [PATCH 2/3] UPSTREAM: 52073: Fix cross-build --- .../kubernetes/pkg/kubelet/cadvisor/BUILD | 1 + .../kubelet/cadvisor/cadvisor_unsupported.go | 4 ++ .../pkg/kubelet/cadvisor/cadvisor_windows.go | 4 ++ .../pkg/kubelet/cadvisor/helpers_linux.go | 54 +++++++++++++++++++ .../kubelet/cadvisor/helpers_unsupported.go | 34 ++++++++++++ .../kubernetes/pkg/kubelet/cadvisor/util.go | 32 ----------- 6 files changed, 97 insertions(+), 32 deletions(-) create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_unsupported.go diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/BUILD index 9f4753b2229d..c5de9dad141f 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/BUILD @@ -25,6 +25,7 @@ go_library( srcs = [ "cadvisor_linux.go", "doc.go", + "helpers_linux.go", "types.go", "util.go", ], diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_unsupported.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_unsupported.go index 7dbbde83ffd0..be42d39e363b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_unsupported.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_unsupported.go @@ -80,3 +80,7 @@ func (cu *cadvisorUnsupported) WatchEvents(request *events.Request) (*events.Eve func (cu *cadvisorUnsupported) HasDedicatedImageFs() (bool, error) { return false, unsupportedErr } + +func (c *cadvisorUnsupported) GetFsInfoByFsUUID(uuid string) (cadvisorapiv2.FsInfo, error) { + return cadvisorapiv2.FsInfo{}, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_windows.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_windows.go index 0033f92314ae..404dd05c7519 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_windows.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/cadvisor_windows.go @@ -77,3 +77,7 @@ func (cu *cadvisorClient) WatchEvents(request *events.Request) (*events.EventCha func (cu *cadvisorClient) HasDedicatedImageFs() (bool, error) { return false, nil } + +func (c *cadvisorClient) GetFsInfoByFsUUID(uuid string) (cadvisorapiv2.FsInfo, error) { + return cadvisorapiv2.FsInfo{}, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go new file mode 100644 index 000000000000..a9e88b5bf8a1 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go @@ -0,0 +1,54 @@ +// +build cgo,linux + +/* +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. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cadvisor + +import ( + "fmt" + + cadvisorfs "github.com/google/cadvisor/fs" +) + +// imageFsInfoProvider knows how to translate the configured runtime +// to its file system label for images. +type imageFsInfoProvider struct { + runtime string + runtimeEndpoint string +} + +// ImageFsInfoLabel returns the image fs label for the configured runtime. +// For remote runtimes, it handles additional runtimes natively understood by cAdvisor. +func (i *imageFsInfoProvider) ImageFsInfoLabel() (string, error) { + switch i.runtime { + case "docker": + return cadvisorfs.LabelDockerImages, nil + case "rkt": + return cadvisorfs.LabelRktImages, nil + case "remote": + // TODO: pending rebase including https://github.com/google/cadvisor/pull/1741 + if i.runtimeEndpoint == "/var/run/crio.sock" { + return "crio-images", nil + } + } + return "", fmt.Errorf("no imagefs label for configured runtime") +} + +// NewImageFsInfoProvider returns a provider for the specified runtime configuration. +func NewImageFsInfoProvider(runtime, runtimeEndpoint string) ImageFsInfoProvider { + return &imageFsInfoProvider{runtime: runtime, runtimeEndpoint: runtimeEndpoint} +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_unsupported.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_unsupported.go new file mode 100644 index 000000000000..af90f150c16a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_unsupported.go @@ -0,0 +1,34 @@ +// +build !linux linux,!cgo + +/* +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. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cadvisor + +import "errors" + +type unsupportedImageFsInfoProvider struct{} + +// ImageFsInfoLabel returns the image fs label for the configured runtime. +// For remote runtimes, it handles additional runtimes natively understood by cAdvisor. +func (i *unsupportedImageFsInfoProvider) ImageFsInfoLabel() (string, error) { + return "", errors.New("unsupported") +} + +// NewImageFsInfoProvider returns a provider for the specified runtime configuration. +func NewImageFsInfoProvider(runtime, runtimeEndpoint string) ImageFsInfoProvider { + return &unsupportedImageFsInfoProvider{} +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/util.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/util.go index 42248f6695b2..bd30c6653020 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/util.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/util.go @@ -17,44 +17,12 @@ limitations under the License. package cadvisor import ( - "fmt" - - cadvisorfs "github.com/google/cadvisor/fs" cadvisorapi "github.com/google/cadvisor/info/v1" cadvisorapi2 "github.com/google/cadvisor/info/v2" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/kubernetes/pkg/api/v1" ) -// imageFsInfoProvider knows how to translate the configured runtime -// to its file system label for images. -type imageFsInfoProvider struct { - runtime string - runtimeEndpoint string -} - -// ImageFsInfoLabel returns the image fs label for the configured runtime. -// For remote runtimes, it handles additional runtimes natively understood by cAdvisor. -func (i *imageFsInfoProvider) ImageFsInfoLabel() (string, error) { - switch i.runtime { - case "docker": - return cadvisorfs.LabelDockerImages, nil - case "rkt": - return cadvisorfs.LabelRktImages, nil - case "remote": - // TODO: pending rebase including https://github.com/google/cadvisor/pull/1741 - if i.runtimeEndpoint == "/var/run/crio.sock" { - return "crio-images", nil - } - } - return "", fmt.Errorf("no imagefs label for configured runtime") -} - -// NewImageFsInfoProvider returns a provider for the specified runtime configuration. -func NewImageFsInfoProvider(runtime, runtimeEndpoint string) ImageFsInfoProvider { - return &imageFsInfoProvider{runtime: runtime, runtimeEndpoint: runtimeEndpoint} -} - func CapacityFromMachineInfo(info *cadvisorapi.MachineInfo) v1.ResourceList { c := v1.ResourceList{ v1.ResourceCPU: *resource.NewMilliQuantity( From 34e0a3cf33723a3cdd49fd3349f6baa7e7d83971 Mon Sep 17 00:00:00 2001 From: Seth Jennings Date: Tue, 19 Sep 2017 12:18:44 -0500 Subject: [PATCH 3/3] UPSTREAM: 52297: Use cAdvisor constant for crio imagefs --- vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go index a9e88b5bf8a1..94af5d39debe 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cadvisor/helpers_linux.go @@ -40,9 +40,8 @@ func (i *imageFsInfoProvider) ImageFsInfoLabel() (string, error) { case "rkt": return cadvisorfs.LabelRktImages, nil case "remote": - // TODO: pending rebase including https://github.com/google/cadvisor/pull/1741 if i.runtimeEndpoint == "/var/run/crio.sock" { - return "crio-images", nil + return cadvisorfs.LabelCrioImages, nil } } return "", fmt.Errorf("no imagefs label for configured runtime")