diff --git a/go.mod b/go.mod index c5902bdb599..dde8f236b1c 100644 --- a/go.mod +++ b/go.mod @@ -35,7 +35,7 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.3 - github.com/google/cadvisor v0.48.1 + github.com/google/cadvisor v0.49.0 github.com/google/cel-go v0.17.8 github.com/google/gnostic-models v0.6.8 github.com/google/go-cmp v0.6.0 diff --git a/go.sum b/go.sum index 42e2547abac..cfa9073f11f 100644 --- a/go.sum +++ b/go.sum @@ -294,8 +294,8 @@ github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE= -github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.27+incompatible h1:Id/ZooynV4ZlD6xX20RCd3SR0Ikn7r4QZDa2ECK2TgA= +github.com/docker/docker v20.10.27+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= @@ -428,8 +428,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cadvisor v0.48.1 h1:eyYTxKBd+KxI1kh6rst4JSTLUhfHQM34qGpp+0AMlSg= -github.com/google/cadvisor v0.48.1/go.mod h1:ZkYbiiVdyoqBmI2ahZI8GlmirT78OAOER0z4EQugkxQ= +github.com/google/cadvisor v0.49.0 h1:1PYeiORXmcFYi609M4Qvq5IzcvcVaWgYxDt78uH8jYA= +github.com/google/cadvisor v0.49.0/go.mod h1:s6Fqwb2KiWG6leCegVhw4KW40tf9f7m+SF1aXiE8Wsk= github.com/google/cel-go v0.17.8 h1:j9m730pMZt1Fc4oKhCLUHfjj6527LuhYcYw0Rl8gqto= github.com/google/cel-go v0.17.8/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= diff --git a/vendor/github.com/google/cadvisor/container/crio/client.go b/vendor/github.com/google/cadvisor/container/crio/client.go index 0f51b3d1ced..fad9a5152c9 100644 --- a/vendor/github.com/google/cadvisor/container/crio/client.go +++ b/vendor/github.com/google/cadvisor/container/crio/client.go @@ -44,6 +44,7 @@ var ( type Info struct { StorageDriver string `json:"storage_driver"` StorageRoot string `json:"storage_root"` + StorageImage string `json:"storage_image"` } // ContainerInfo represents a given container information diff --git a/vendor/github.com/google/cadvisor/container/crio/factory.go b/vendor/github.com/google/cadvisor/container/crio/factory.go index e16b68a2a0a..e9c24f0a72a 100644 --- a/vendor/github.com/google/cadvisor/container/crio/factory.go +++ b/vendor/github.com/google/cadvisor/container/crio/factory.go @@ -32,6 +32,9 @@ import ( // The namespace under which crio aliases are unique. const CrioNamespace = "crio" +// The namespace suffix under which crio aliases are unique. +const CrioNamespaceSuffix = ".scope" + // The namespace systemd runs components under. const SystemdNamespace = "system-systemd" @@ -114,16 +117,21 @@ func (f *crioFactory) CanHandleAndAccept(name string) (bool, bool, error) { // TODO(runcom): should we include crio-conmon cgroups? return false, false, nil } - if !strings.HasPrefix(path.Base(name), CrioNamespace) { - return false, false, nil - } if strings.HasPrefix(path.Base(name), SystemdNamespace) { return true, false, nil } + if !strings.HasPrefix(path.Base(name), CrioNamespace) { + return false, false, nil + } // if the container is not associated with CRI-O, we can't handle it or accept it. if !isContainerName(name) { return false, false, nil } + + if !strings.HasSuffix(path.Base(name), CrioNamespaceSuffix) { + // this mean it's a sandbox container + return true, false, nil + } return true, true, nil } diff --git a/vendor/github.com/google/cadvisor/container/crio/plugin.go b/vendor/github.com/google/cadvisor/container/crio/plugin.go index 8937d0680a8..9384de3f430 100644 --- a/vendor/github.com/google/cadvisor/container/crio/plugin.go +++ b/vendor/github.com/google/cadvisor/container/crio/plugin.go @@ -40,7 +40,7 @@ func (p *plugin) InitializeFSContext(context *fs.Context) error { if err != nil { klog.V(5).Infof("CRI-O not connected: %v", err) } else { - context.Crio = fs.CrioContext{Root: crioInfo.StorageRoot} + context.Crio = fs.CrioContext{Root: crioInfo.StorageRoot, ImageStore: crioInfo.StorageImage, Driver: crioInfo.StorageDriver} } return nil } diff --git a/vendor/github.com/google/cadvisor/fs/fs.go b/vendor/github.com/google/cadvisor/fs/fs.go index b8eb676f775..d41e543e2bf 100644 --- a/vendor/github.com/google/cadvisor/fs/fs.go +++ b/vendor/github.com/google/cadvisor/fs/fs.go @@ -43,6 +43,7 @@ const ( LabelSystemRoot = "root" LabelDockerImages = "docker-images" LabelCrioImages = "crio-images" + LabelCrioContainers = "crio-containers" DriverStatusPoolName = "Pool Name" DriverStatusDataLoopFile = "Data loop file" ) @@ -295,14 +296,37 @@ func (i *RealFsInfo) addDockerImagesLabel(context Context, mounts []*mount.Info) } func (i *RealFsInfo) addCrioImagesLabel(context Context, mounts []*mount.Info) { + labelCrioImageOrContainers := LabelCrioContainers + // If imagestore is not specified, let's fall back to the original case. + // Everything will be stored in crio-images + if context.Crio.ImageStore == "" { + labelCrioImageOrContainers = LabelCrioImages + } if context.Crio.Root != "" { crioPath := context.Crio.Root crioImagePaths := map[string]struct{}{ "/": {}, } - for _, dir := range []string{"devicemapper", "btrfs", "aufs", "overlay", "zfs"} { - crioImagePaths[path.Join(crioPath, dir+"-images")] = struct{}{} + imageOrContainerPath := context.Crio.Driver + "-containers" + if context.Crio.ImageStore == "" { + // If ImageStore is not specified then we will assume ImageFs is complete separate. + // No need to split the image store. + imageOrContainerPath = context.Crio.Driver + "-images" + } + crioImagePaths[path.Join(crioPath, imageOrContainerPath)] = struct{}{} + for crioPath != "/" && crioPath != "." { + crioImagePaths[crioPath] = struct{}{} + crioPath = filepath.Dir(crioPath) + } + i.updateContainerImagesPath(labelCrioImageOrContainers, mounts, crioImagePaths) + } + if context.Crio.ImageStore != "" { + crioPath := context.Crio.ImageStore + crioImagePaths := map[string]struct{}{ + "/": {}, + } + crioImagePaths[path.Join(crioPath, context.Crio.Driver+"-images")] = struct{}{} for crioPath != "/" && crioPath != "." { crioImagePaths[crioPath] = struct{}{} crioPath = filepath.Dir(crioPath) diff --git a/vendor/github.com/google/cadvisor/fs/types.go b/vendor/github.com/google/cadvisor/fs/types.go index 2fed3265179..6bc91985cbb 100644 --- a/vendor/github.com/google/cadvisor/fs/types.go +++ b/vendor/github.com/google/cadvisor/fs/types.go @@ -38,7 +38,9 @@ type PodmanContext struct { } type CrioContext struct { - Root string + Root string + ImageStore string + Driver string } type DeviceInfo struct { diff --git a/vendor/github.com/google/cadvisor/perf/collector_libpfm.go b/vendor/github.com/google/cadvisor/perf/collector_libpfm.go index 2b38d5d5be8..3c8edf867ba 100644 --- a/vendor/github.com/google/cadvisor/perf/collector_libpfm.go +++ b/vendor/github.com/google/cadvisor/perf/collector_libpfm.go @@ -253,9 +253,9 @@ func (c *collector) createLeaderFileDescriptors(events []Event, cgroupFd int, gr } func readPerfEventAttr(name string, pfmGetOsEventEncoding func(string, unsafe.Pointer) error) (*unix.PerfEventAttr, error) { - perfEventAttrMemory := C.malloc(C.ulong(unsafe.Sizeof(unix.PerfEventAttr{}))) + perfEventAttrMemory := C.malloc(C.size_t(unsafe.Sizeof(unix.PerfEventAttr{}))) // Fill memory with 0 values. - C.memset(perfEventAttrMemory, 0, C.ulong(unsafe.Sizeof(unix.PerfEventAttr{}))) + C.memset(perfEventAttrMemory, 0, C.size_t(unsafe.Sizeof(unix.PerfEventAttr{}))) err := pfmGetOsEventEncoding(name, unsafe.Pointer(perfEventAttrMemory)) if err != nil { return nil, err @@ -269,7 +269,7 @@ func pfmGetOsEventEncoding(name string, perfEventAttrMemory unsafe.Pointer) erro defer C.free(unsafe.Pointer(fstr)) event.fstr = unsafe.Pointer(fstr) event.attr = perfEventAttrMemory - event.size = C.ulong(unsafe.Sizeof(event)) + event.size = C.size_t(unsafe.Sizeof(event)) cSafeName := C.CString(name) defer C.free(unsafe.Pointer(cSafeName)) pErr := C.pfm_get_os_event_encoding(cSafeName, C.PFM_PLM0|C.PFM_PLM3, C.PFM_OS_PERF_EVENT, unsafe.Pointer(&event)) diff --git a/vendor/github.com/google/cadvisor/stats/types.go b/vendor/github.com/google/cadvisor/stats/types.go index 77f54ffa7af..2f555487c03 100644 --- a/vendor/github.com/google/cadvisor/stats/types.go +++ b/vendor/github.com/google/cadvisor/stats/types.go @@ -22,7 +22,7 @@ import info "github.com/google/cadvisor/info/v1" // For each container detected by the cAdvisor manager, it will call // GetCollector() with the devices cgroup path for that container. // GetCollector() is supposed to return an object that can update -// accelerator stats for that container. +// external stats for that container. type Manager interface { Destroy() GetCollector(deviceCgroup string) (Collector, error) diff --git a/vendor/modules.txt b/vendor/modules.txt index 5a9d552643e..dfd42856362 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -266,7 +266,7 @@ github.com/golang/protobuf/ptypes/wrappers # github.com/google/btree v1.0.1 ## explicit; go 1.12 github.com/google/btree -# github.com/google/cadvisor v0.48.1 +# github.com/google/cadvisor v0.49.0 ## explicit; go 1.19 github.com/google/cadvisor/cache/memory github.com/google/cadvisor/client/v2