From c12b053390c21e7791d6d46ccf6ab4f7d09aa2db Mon Sep 17 00:00:00 2001 From: Tim Allclair Date: Mon, 22 Apr 2019 15:43:45 -0700 Subject: [PATCH] Reregister cAdvisor cloud info providers in Kubelet --- pkg/kubelet/cadvisor/BUILD | 3 + pkg/kubelet/cadvisor/cadvisor_linux.go | 7 ++ .../google/cadvisor/utils/cloudinfo/BUILD | 7 +- .../google/cadvisor/utils/cloudinfo/aws/BUILD | 30 +++++++ .../cadvisor/utils/cloudinfo/aws/aws.go | 79 +++++++++++++++++++ .../cadvisor/utils/cloudinfo/azure/BUILD | 27 +++++++ .../cadvisor/utils/cloudinfo/azure/azure.go | 58 ++++++++++++++ .../google/cadvisor/utils/cloudinfo/gce/BUILD | 29 +++++++ .../cadvisor/utils/cloudinfo/gce/gce.go | 66 ++++++++++++++++ vendor/modules.txt | 3 + 10 files changed, 308 insertions(+), 1 deletion(-) create mode 100644 vendor/github.com/google/cadvisor/utils/cloudinfo/aws/BUILD create mode 100644 vendor/github.com/google/cadvisor/utils/cloudinfo/aws/aws.go create mode 100644 vendor/github.com/google/cadvisor/utils/cloudinfo/azure/BUILD create mode 100644 vendor/github.com/google/cadvisor/utils/cloudinfo/azure/azure.go create mode 100644 vendor/github.com/google/cadvisor/utils/cloudinfo/gce/BUILD create mode 100644 vendor/github.com/google/cadvisor/utils/cloudinfo/gce/gce.go diff --git a/pkg/kubelet/cadvisor/BUILD b/pkg/kubelet/cadvisor/BUILD index 6fb9c51ab20..8e0d150eeb0 100644 --- a/pkg/kubelet/cadvisor/BUILD +++ b/pkg/kubelet/cadvisor/BUILD @@ -37,6 +37,9 @@ go_library( "//vendor/github.com/google/cadvisor/container/systemd/install:go_default_library", "//vendor/github.com/google/cadvisor/fs:go_default_library", "//vendor/github.com/google/cadvisor/manager:go_default_library", + "//vendor/github.com/google/cadvisor/utils/cloudinfo/aws:go_default_library", + "//vendor/github.com/google/cadvisor/utils/cloudinfo/azure:go_default_library", + "//vendor/github.com/google/cadvisor/utils/cloudinfo/gce:go_default_library", "//vendor/github.com/google/cadvisor/utils/sysfs:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], diff --git a/pkg/kubelet/cadvisor/cadvisor_linux.go b/pkg/kubelet/cadvisor/cadvisor_linux.go index 917ba296748..4ab52f0a206 100644 --- a/pkg/kubelet/cadvisor/cadvisor_linux.go +++ b/pkg/kubelet/cadvisor/cadvisor_linux.go @@ -26,11 +26,18 @@ import ( "path" "time" + // Register supported container handlers. _ "github.com/google/cadvisor/container/containerd/install" _ "github.com/google/cadvisor/container/crio/install" _ "github.com/google/cadvisor/container/docker/install" _ "github.com/google/cadvisor/container/systemd/install" + // Register cloud info providers. + // TODO(#76660): Remove this once the cAdvisor endpoints are removed. + _ "github.com/google/cadvisor/utils/cloudinfo/aws" + _ "github.com/google/cadvisor/utils/cloudinfo/azure" + _ "github.com/google/cadvisor/utils/cloudinfo/gce" + "github.com/google/cadvisor/cache/memory" cadvisormetrics "github.com/google/cadvisor/container" "github.com/google/cadvisor/events" diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/BUILD b/vendor/github.com/google/cadvisor/utils/cloudinfo/BUILD index 36684363006..e6e54ad3f97 100644 --- a/vendor/github.com/google/cadvisor/utils/cloudinfo/BUILD +++ b/vendor/github.com/google/cadvisor/utils/cloudinfo/BUILD @@ -21,7 +21,12 @@ filegroup( filegroup( name = "all-srcs", - srcs = [":package-srcs"], + srcs = [ + ":package-srcs", + "//vendor/github.com/google/cadvisor/utils/cloudinfo/aws:all-srcs", + "//vendor/github.com/google/cadvisor/utils/cloudinfo/azure:all-srcs", + "//vendor/github.com/google/cadvisor/utils/cloudinfo/gce:all-srcs", + ], tags = ["automanaged"], visibility = ["//visibility:public"], ) diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/aws/BUILD b/vendor/github.com/google/cadvisor/utils/cloudinfo/aws/BUILD new file mode 100644 index 00000000000..7820dd54673 --- /dev/null +++ b/vendor/github.com/google/cadvisor/utils/cloudinfo/aws/BUILD @@ -0,0 +1,30 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["aws.go"], + importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils/cloudinfo/aws", + importpath = "github.com/google/cadvisor/utils/cloudinfo/aws", + visibility = ["//visibility:public"], + deps = [ + "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", + "//vendor/github.com/aws/aws-sdk-go/aws/ec2metadata:go_default_library", + "//vendor/github.com/aws/aws-sdk-go/aws/session:go_default_library", + "//vendor/github.com/google/cadvisor/info/v1:go_default_library", + "//vendor/github.com/google/cadvisor/utils/cloudinfo:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/aws/aws.go b/vendor/github.com/google/cadvisor/utils/cloudinfo/aws/aws.go new file mode 100644 index 00000000000..3b699516599 --- /dev/null +++ b/vendor/github.com/google/cadvisor/utils/cloudinfo/aws/aws.go @@ -0,0 +1,79 @@ +// Copyright 2015 Google Inc. All Rights Reserved. +// +// 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 cloudinfo + +import ( + "io/ioutil" + "os" + "strings" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/ec2metadata" + "github.com/aws/aws-sdk-go/aws/session" + + info "github.com/google/cadvisor/info/v1" + "github.com/google/cadvisor/utils/cloudinfo" +) + +const ( + productVerFileName = "/sys/class/dmi/id/product_version" + biosVerFileName = "/sys/class/dmi/id/bios_vendor" + amazon = "amazon" +) + +func init() { + cloudinfo.RegisterCloudProvider(info.AWS, &provider{}) +} + +type provider struct{} + +var _ cloudinfo.CloudProvider = provider{} + +func (provider) IsActiveProvider() bool { + var dataProduct []byte + var dataBios []byte + if _, err := os.Stat(productVerFileName); err == nil { + dataProduct, err = ioutil.ReadFile(productVerFileName) + if err != nil { + return false + } + } + + if _, err := os.Stat(biosVerFileName); err == nil { + dataBios, err = ioutil.ReadFile(biosVerFileName) + if err != nil { + return false + } + } + + return strings.Contains(string(dataProduct), amazon) || strings.Contains(strings.ToLower(string(dataBios)), amazon) +} + +func getAwsMetadata(name string) string { + client := ec2metadata.New(session.New(&aws.Config{})) + data, err := client.GetMetadata(name) + if err != nil { + return info.UnknownInstance + } + return data +} + +func (provider) GetInstanceType() info.InstanceType { + return info.InstanceType(getAwsMetadata("instance-type")) +} + +func (provider) GetInstanceID() info.InstanceID { + return info.InstanceID(getAwsMetadata("instance-id")) +} diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/BUILD b/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/BUILD new file mode 100644 index 00000000000..7fd77033440 --- /dev/null +++ b/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/BUILD @@ -0,0 +1,27 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["azure.go"], + importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils/cloudinfo/azure", + importpath = "github.com/google/cadvisor/utils/cloudinfo/azure", + visibility = ["//visibility:public"], + deps = [ + "//vendor/github.com/google/cadvisor/info/v1:go_default_library", + "//vendor/github.com/google/cadvisor/utils/cloudinfo:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/azure.go b/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/azure.go new file mode 100644 index 00000000000..d04b0e2b404 --- /dev/null +++ b/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/azure.go @@ -0,0 +1,58 @@ +// Copyright 2015 Google Inc. All Rights Reserved. +// +// 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 cloudinfo + +import ( + "io/ioutil" + "strings" + + info "github.com/google/cadvisor/info/v1" + "github.com/google/cadvisor/utils/cloudinfo" +) + +const ( + sysVendorFileName = "/sys/class/dmi/id/sys_vendor" + biosUUIDFileName = "/sys/class/dmi/id/product_uuid" + microsoftCorporation = "Microsoft Corporation" +) + +func init() { + cloudinfo.RegisterCloudProvider(info.Azure, &provider{}) +} + +type provider struct{} + +var _ cloudinfo.CloudProvider = provider{} + +func (provider) IsActiveProvider() bool { + data, err := ioutil.ReadFile(sysVendorFileName) + if err != nil { + return false + } + return strings.Contains(string(data), microsoftCorporation) +} + +// TODO: Implement method. +func (provider) GetInstanceType() info.InstanceType { + return info.UnknownInstance +} + +func (provider) GetInstanceID() info.InstanceID { + data, err := ioutil.ReadFile(biosUUIDFileName) + if err != nil { + return info.UnNamedInstance + } + return info.InstanceID(strings.TrimSuffix(string(data), "\n")) +} diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/BUILD b/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/BUILD new file mode 100644 index 00000000000..8496b355d6d --- /dev/null +++ b/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/BUILD @@ -0,0 +1,29 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["gce.go"], + importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils/cloudinfo/gce", + importpath = "github.com/google/cadvisor/utils/cloudinfo/gce", + visibility = ["//visibility:public"], + deps = [ + "//vendor/cloud.google.com/go/compute/metadata:go_default_library", + "//vendor/github.com/google/cadvisor/info/v1:go_default_library", + "//vendor/github.com/google/cadvisor/utils/cloudinfo:go_default_library", + "//vendor/k8s.io/klog:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/gce.go b/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/gce.go new file mode 100644 index 00000000000..f4111c7a9f7 --- /dev/null +++ b/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/gce.go @@ -0,0 +1,66 @@ +// Copyright 2015 Google Inc. All Rights Reserved. +// +// 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 gce + +import ( + "io/ioutil" + "strings" + + info "github.com/google/cadvisor/info/v1" + "github.com/google/cadvisor/utils/cloudinfo" + + "cloud.google.com/go/compute/metadata" + "k8s.io/klog" +) + +const ( + gceProductName = "/sys/class/dmi/id/product_name" + google = "Google" +) + +func init() { + cloudinfo.RegisterCloudProvider(info.GCE, &provider{}) +} + +type provider struct{} + +var _ cloudinfo.CloudProvider = provider{} + +func (provider) IsActiveProvider() bool { + data, err := ioutil.ReadFile(gceProductName) + if err != nil { + klog.V(2).Infof("Error while reading product_name: %v", err) + return false + } + return strings.Contains(string(data), google) +} + +func (provider) GetInstanceType() info.InstanceType { + machineType, err := metadata.Get("instance/machine-type") + if err != nil { + return info.UnknownInstance + } + + responseParts := strings.Split(machineType, "/") // Extract the instance name from the machine type. + return info.InstanceType(responseParts[len(responseParts)-1]) +} + +func (provider) GetInstanceID() info.InstanceID { + instanceID, err := metadata.Get("instance/id") + if err != nil { + return info.UnknownInstance + } + return info.InstanceID(info.InstanceType(instanceID)) +} diff --git a/vendor/modules.txt b/vendor/modules.txt index c25e60016d9..9ad4f1f614d 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -445,6 +445,9 @@ github.com/google/cadvisor/storage github.com/google/cadvisor/summary github.com/google/cadvisor/utils github.com/google/cadvisor/utils/cloudinfo +github.com/google/cadvisor/utils/cloudinfo/aws +github.com/google/cadvisor/utils/cloudinfo/azure +github.com/google/cadvisor/utils/cloudinfo/gce github.com/google/cadvisor/utils/cpuload github.com/google/cadvisor/utils/cpuload/netlink github.com/google/cadvisor/utils/docker