diff --git a/third_party/go/patches/cadvisor-build.patch b/third_party/go/patches/cadvisor-build.patch
deleted file mode 100644
index 5e7a11f..0000000
--- a/third_party/go/patches/cadvisor-build.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-Copyright 2020 The Monogon Project 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.
-
-
-This patch updates BUILD files to reflect changes in Go sources. This only needs to be applied because Gazelle applies patches after BUILDfile generation.
-
-diff -ur com_github_google_cadvisor.orig/fs/fs.go com_github_google_cadvisor/fs/fs.go
---- com_github_google_cadvisor.orig/fs/BUILD.bazel	2020-04-15 17:54:23.086143468 +0200
-+++ com_github_google_cadvisor/fs/BUILD.bazel	2020-04-15 17:56:17.098546899 +0200
-@@ -12,14 +12,12 @@
-         "@io_bazel_rules_go//go/platform:android": [
-             "//devicemapper:go_default_library",
-             "//utils:go_default_library",
--            "@com_github_mistifyio_go_zfs//:go_default_library",
-             "@io_k8s_klog//:go_default_library",
-             "@io_k8s_utils//mount:go_default_library",
-         ],
-         "@io_bazel_rules_go//go/platform:linux": [
-             "//devicemapper:go_default_library",
-             "//utils:go_default_library",
--            "@com_github_mistifyio_go_zfs//:go_default_library",
-             "@io_k8s_klog//:go_default_library",
-             "@io_k8s_utils//mount:go_default_library",
-         ],
-diff -ur com_github_google_cadvisor.orig/fs/fs.go com_github_google_cadvisor/fs/fs.go
---- com_github_google_cadvisor.orig/container/docker/BUILD.bazel	2020-04-15 17:54:23.086143468 +0200
-+++ com_github_google_cadvisor/container/docker/BUILD.bazel	2020-04-15 17:56:17.098546899 +0200
-@@ -21,7 +21,6 @@
-         "//info/v1:go_default_library",
-         "//machine:go_default_library",
-         "//watcher:go_default_library",
--        "//zfs:go_default_library",
-         "@com_github_blang_semver//:go_default_library",
-         "@com_github_docker_docker//api/types:go_default_library",
-         "@com_github_docker_docker//api/types/container:go_default_library",
-
diff --git a/third_party/go/patches/cadvisor.patch b/third_party/go/patches/cadvisor.patch
deleted file mode 100644
index 9761dee..0000000
--- a/third_party/go/patches/cadvisor.patch
+++ /dev/null
@@ -1,415 +0,0 @@
-Copyright 2020 The Monogon Project 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.
-
-
-This rips out ZFS support from cadvisor. This should be turned into an upstream change for allowing zfs to be disabled via a build tag.
-
-diff -ur com_github_google_cadvisor.orig/container/docker/factory.go com_github_google_cadvisor/container/docker/factory.go
---- com_github_google_cadvisor.orig/container/docker/factory.go	2020-04-15 17:54:23.082143453 +0200
-+++ com_github_google_cadvisor/container/docker/factory.go	2020-04-16 15:08:47.394501543 +0200
-@@ -34,7 +34,6 @@
- 	info "github.com/google/cadvisor/info/v1"
- 	"github.com/google/cadvisor/machine"
- 	"github.com/google/cadvisor/watcher"
--	"github.com/google/cadvisor/zfs"
- 
- 	docker "github.com/docker/docker/client"
- 	"golang.org/x/net/context"
-@@ -102,7 +101,6 @@
- 	aufsStorageDriver         storageDriver = "aufs"
- 	overlayStorageDriver      storageDriver = "overlay"
- 	overlay2StorageDriver     storageDriver = "overlay2"
--	zfsStorageDriver          storageDriver = "zfs"
- )
- 
- type dockerFactory struct {
-@@ -127,8 +125,6 @@
- 
- 	thinPoolName    string
- 	thinPoolWatcher *devicemapper.ThinPoolWatcher
--
--	zfsWatcher *zfs.ZfsWatcher
- }
- 
- func (self *dockerFactory) String() string {
-@@ -157,7 +153,6 @@
- 		self.includedMetrics,
- 		self.thinPoolName,
- 		self.thinPoolWatcher,
--		self.zfsWatcher,
- 	)
- 	return
- }
-@@ -246,21 +241,6 @@
- 	return thinPoolWatcher, nil
- }
- 
--func startZfsWatcher(dockerInfo *dockertypes.Info) (*zfs.ZfsWatcher, error) {
--	filesystem, err := dockerutil.DockerZfsFilesystem(*dockerInfo)
--	if err != nil {
--		return nil, err
--	}
--
--	zfsWatcher, err := zfs.NewZfsWatcher(filesystem)
--	if err != nil {
--		return nil, err
--	}
--
--	go zfsWatcher.Start()
--	return zfsWatcher, nil
--}
--
- func ensureThinLsKernelVersion(kernelVersion string) error {
- 	// kernel 4.4.0 has the proper bug fixes to allow thin_ls to work without corrupting the thin pool
- 	minKernelVersion := semver.MustParse("4.4.0")
-@@ -358,14 +338,6 @@
- 		thinPoolName = status.DriverStatus[dockerutil.DriverStatusPoolName]
- 	}
- 
--	var zfsWatcher *zfs.ZfsWatcher
--	if storageDriver(dockerInfo.Driver) == zfsStorageDriver {
--		zfsWatcher, err = startZfsWatcher(dockerInfo)
--		if err != nil {
--			klog.Errorf("zfs filesystem stats will not be reported: %v", err)
--		}
--	}
--
- 	klog.V(1).Infof("Registering Docker factory")
- 	f := &dockerFactory{
- 		cgroupSubsystems:   cgroupSubsystems,
-@@ -379,7 +351,6 @@
- 		includedMetrics:    includedMetrics,
- 		thinPoolName:       thinPoolName,
- 		thinPoolWatcher:    thinPoolWatcher,
--		zfsWatcher:         zfsWatcher,
- 	}
- 
- 	container.RegisterContainerHandlerFactory(f, []watcher.ContainerWatchSource{watcher.Raw})
-diff -ur com_github_google_cadvisor.orig/container/docker/handler.go com_github_google_cadvisor/container/docker/handler.go
---- com_github_google_cadvisor.orig/container/docker/handler.go	2020-04-15 17:54:23.082143453 +0200
-+++ com_github_google_cadvisor/container/docker/handler.go	2020-04-16 15:45:56.432489633 +0200
-@@ -25,12 +25,10 @@
- 
- 	"github.com/google/cadvisor/container"
- 	"github.com/google/cadvisor/container/common"
--	dockerutil "github.com/google/cadvisor/container/docker/utils"
- 	containerlibcontainer "github.com/google/cadvisor/container/libcontainer"
- 	"github.com/google/cadvisor/devicemapper"
- 	"github.com/google/cadvisor/fs"
- 	info "github.com/google/cadvisor/info/v1"
--	"github.com/google/cadvisor/zfs"
- 
- 	dockercontainer "github.com/docker/docker/api/types/container"
- 	docker "github.com/docker/docker/client"
-@@ -87,9 +85,6 @@
- 	// the devicemapper poolname
- 	poolName string
- 
--	// zfsParent is the parent for docker zfs
--	zfsParent string
--
- 	// Reference to the container
- 	reference info.ContainerReference
- 
-@@ -130,7 +125,6 @@
- 	includedMetrics container.MetricSet,
- 	thinPoolName string,
- 	thinPoolWatcher *devicemapper.ThinPoolWatcher,
--	zfsWatcher *zfs.ZfsWatcher,
- ) (container.ContainerHandler, error) {
- 	// Create the cgroup paths.
- 	cgroupPaths := common.MakeCgroupPaths(cgroupSubsystems.MountPoints, name)
-@@ -164,8 +158,6 @@
- 	// For devicemapper, we only need the thin pool name, and that is passed in to this call
- 	var (
- 		rootfsStorageDir string
--		zfsFilesystem    string
--		zfsParent        string
- 	)
- 	switch storageDriver {
- 	case aufsStorageDriver:
-@@ -174,13 +166,6 @@
- 		rootfsStorageDir = path.Join(storageDir, string(storageDriver), rwLayerID, overlayRWLayer)
- 	case overlay2StorageDriver:
- 		rootfsStorageDir = path.Join(storageDir, string(storageDriver), rwLayerID, overlay2RWLayer)
--	case zfsStorageDriver:
--		status, err := Status()
--		if err != nil {
--			return nil, fmt.Errorf("unable to determine docker status: %v", err)
--		}
--		zfsParent = status.DriverStatus[dockerutil.DriverStatusParentDataset]
--		zfsFilesystem = path.Join(zfsParent, rwLayerID)
- 	}
- 
- 	// We assume that if Inspect fails then the container is not known to docker.
-@@ -200,7 +185,6 @@
- 		envs:               make(map[string]string),
- 		labels:             ctnr.Config.Labels,
- 		includedMetrics:    includedMetrics,
--		zfsParent:          zfsParent,
- 	}
- 	// Timestamp returned by Docker is in time.RFC3339Nano format.
- 	handler.creationTime, err = time.Parse(time.RFC3339Nano, ctnr.Created)
-@@ -244,9 +228,6 @@
- 		handler.fsHandler = &dockerFsHandler{
- 			fsHandler:       common.NewFsHandler(common.DefaultPeriod, rootfsStorageDir, otherStorageDir, fsInfo),
- 			thinPoolWatcher: thinPoolWatcher,
--			zfsWatcher:      zfsWatcher,
--			deviceID:        ctnr.GraphDriver.Data["DeviceId"],
--			zfsFilesystem:   zfsFilesystem,
- 		}
- 	}
- 
-@@ -271,7 +252,7 @@
- }
- 
- // dockerFsHandler is a composite FsHandler implementation the incorporates
--// the common fs handler, a devicemapper ThinPoolWatcher, and a zfsWatcher
-+// the common fs handler and a devicemapper ThinPoolWatcher
- type dockerFsHandler struct {
- 	fsHandler common.FsHandler
- 
-@@ -279,11 +260,6 @@
- 	thinPoolWatcher *devicemapper.ThinPoolWatcher
- 	// deviceID is the id of the container's fs device
- 	deviceID string
--
--	// zfsWatcher is the zfs filesystem watcher
--	zfsWatcher *zfs.ZfsWatcher
--	// zfsFilesystem is the docker zfs filesystem
--	zfsFilesystem string
- }
- 
- var _ common.FsHandler = &dockerFsHandler{}
-@@ -316,16 +292,6 @@
- 			usage.TotalUsageBytes += thinPoolUsage
- 		}
- 	}
--
--	if h.zfsWatcher != nil {
--		zfsUsage, err := h.zfsWatcher.GetUsage(h.zfsFilesystem)
--		if err != nil {
--			klog.V(5).Infof("unable to get fs usage from zfs for filesystem %s: %v", h.zfsFilesystem, err)
--		} else {
--			usage.BaseUsageBytes = zfsUsage
--			usage.TotalUsageBytes += zfsUsage
--		}
--	}
- 	return usage
- }
- 
-@@ -389,8 +355,6 @@
- 			return fmt.Errorf("unable to determine device info for dir: %v: %v", self.rootfsStorageDir, err)
- 		}
- 		device = deviceInfo.Device
--	case zfsStorageDriver:
--		device = self.zfsParent
- 	default:
- 		return nil
- 	}
-diff -ur com_github_google_cadvisor.orig/container/docker/utils/docker.go com_github_google_cadvisor/container/docker/utils/docker.go
---- com_github_google_cadvisor.orig/container/docker/utils/docker.go	2020-04-15 17:54:23.082143453 +0200
-+++ com_github_google_cadvisor/container/docker/utils/docker.go	2020-04-16 15:10:30.379817831 +0200
-@@ -69,12 +69,3 @@
- 
- 	return metadataDevice, nil
- }
--
--func DockerZfsFilesystem(info dockertypes.Info) (string, error) {
--	filesystem := DriverStatusValue(info.DriverStatus, DriverStatusParentDataset)
--	if len(filesystem) == 0 {
--		return "", fmt.Errorf("Could not get zfs filesystem")
--	}
--
--	return filesystem, nil
--}
-diff -ur com_github_google_cadvisor.orig/fs/fs.go com_github_google_cadvisor/fs/fs.go
---- com_github_google_cadvisor.orig/fs/fs.go	2020-04-15 17:54:23.086143468 +0200
-+++ com_github_google_cadvisor/fs/fs.go	2020-04-16 15:39:57.294333566 +0200
-@@ -32,7 +32,6 @@
- 
- 	"github.com/google/cadvisor/devicemapper"
- 	"github.com/google/cadvisor/utils"
--	zfs "github.com/mistifyio/go-zfs"
- 
- 	"k8s.io/klog"
- 	"k8s.io/utils/mount"
-@@ -167,11 +166,9 @@
- 
- 	supportedFsType := map[string]bool{
- 		// all ext systems are checked through prefix.
--		"btrfs":   true,
- 		"overlay": true,
- 		"tmpfs":   true,
- 		"xfs":     true,
--		"zfs":     true,
- 	}
- 
- 	for _, mount := range mounts {
-@@ -200,17 +197,6 @@
- 		if mount.FsType == "tmpfs" {
- 			mount.Source = mount.MountPoint
- 		}
--		// btrfs fix: following workaround fixes wrong btrfs Major and Minor Ids reported in /proc/self/mountinfo.
--		// instead of using values from /proc/self/mountinfo we use stat to get Ids from btrfs mount point
--		if mount.FsType == "btrfs" && mount.Major == 0 && strings.HasPrefix(mount.Source, "/dev/") {
--			major, minor, err := getBtrfsMajorMinorIds(&mount)
--			if err != nil {
--				klog.Warningf("%s", err)
--			} else {
--				mount.Major = major
--				mount.Minor = minor
--			}
--		}
- 
- 		// overlay fix: Making mount source unique for all overlay mounts, using the mount's major and minor ids.
- 		if mount.FsType == "overlay" {
-@@ -312,7 +298,7 @@
- 
- 	// TODO(rjnagal): Detect docker root and graphdriver directories from docker info.
- 	dockerRoot := context.Docker.Root
--	for _, dir := range []string{"devicemapper", "btrfs", "aufs", "overlay", "overlay2", "zfs"} {
-+	for _, dir := range []string{"devicemapper", "overlay", "overlay2"} {
- 		dockerImagePaths[path.Join(dockerRoot, dir)] = struct{}{}
- 	}
- 	for dockerRoot != "/" && dockerRoot != "." {
-@@ -390,14 +376,6 @@
- 				fs.Capacity, fs.Free, fs.Available, err = getDMStats(device, partition.blockSize)
- 				klog.V(5).Infof("got devicemapper fs capacity stats: capacity: %v free: %v available: %v:", fs.Capacity, fs.Free, fs.Available)
- 				fs.Type = DeviceMapper
--			case ZFS.String():
--				if _, devzfs := os.Stat("/dev/zfs"); os.IsExist(devzfs) {
--					fs.Capacity, fs.Free, fs.Available, err = getZfstats(device)
--					fs.Type = ZFS
--					break
--				}
--				// if /dev/zfs is not present default to VFS
--				fallthrough
- 			default:
- 				var inodes, inodesFree uint64
- 				if utils.FileExists(partition.mountpoint) {
-@@ -521,30 +499,6 @@
- 		}
- 	}
- 
--	mount, found := self.mounts[dir]
--	// try the parent dir if not found until we reach the root dir
--	// this is an issue on btrfs systems where the directory is not
--	// the subvolume
--	for !found {
--		pathdir, _ := filepath.Split(dir)
--		// break when we reach root
--		if pathdir == "/" {
--			break
--		}
--		// trim "/" from the new parent path otherwise the next possible
--		// filepath.Split in the loop will not split the string any further
--		dir = strings.TrimSuffix(pathdir, "/")
--		mount, found = self.mounts[dir]
--	}
--
--	if found && mount.FsType == "btrfs" && mount.Major == 0 && strings.HasPrefix(mount.Source, "/dev/") {
--		major, minor, err := getBtrfsMajorMinorIds(&mount)
--		if err != nil {
--			klog.Warningf("%s", err)
--		} else {
--			return &DeviceInfo{mount.Source, uint(major), uint(minor)}, nil
--		}
--	}
- 	return nil, fmt.Errorf("could not find device with major: %d, minor: %d in cached partitions map", major, minor)
- }
- 
-@@ -715,18 +669,6 @@
- 	return used, total, nil
- }
- 
--// getZfstats returns ZFS mount stats using zfsutils
--func getZfstats(poolName string) (uint64, uint64, uint64, error) {
--	dataset, err := zfs.GetDataset(poolName)
--	if err != nil {
--		return 0, 0, 0, err
--	}
--
--	total := dataset.Used + dataset.Avail + dataset.Usedbydataset
--
--	return total, dataset.Avail, dataset.Avail, nil
--}
--
- // Simple io.Writer implementation that counts how many bytes were written.
- type byteCounter struct{ bytesWritten uint64 }
- 
-@@ -734,33 +676,3 @@
- 	b.bytesWritten += uint64(len(p))
- 	return len(p), nil
- }
--
--// Get major and minor Ids for a mount point using btrfs as filesystem.
--func getBtrfsMajorMinorIds(mount *mount.MountInfo) (int, int, error) {
--	// btrfs fix: following workaround fixes wrong btrfs Major and Minor Ids reported in /proc/self/mountinfo.
--	// instead of using values from /proc/self/mountinfo we use stat to get Ids from btrfs mount point
--
--	buf := new(syscall.Stat_t)
--	err := syscall.Stat(mount.Source, buf)
--	if err != nil {
--		err = fmt.Errorf("stat failed on %s with error: %s", mount.Source, err)
--		return 0, 0, err
--	}
--
--	klog.V(4).Infof("btrfs mount %#v", mount)
--	if buf.Mode&syscall.S_IFMT == syscall.S_IFBLK {
--		err := syscall.Stat(mount.MountPoint, buf)
--		if err != nil {
--			err = fmt.Errorf("stat failed on %s with error: %s", mount.MountPoint, err)
--			return 0, 0, err
--		}
--
--		// The type Dev and Rdev in Stat_t are 32bit on mips.
--		klog.V(4).Infof("btrfs dev major:minor %d:%d\n", int(major(uint64(buf.Dev))), int(minor(uint64(buf.Dev))))    // nolint: unconvert
--		klog.V(4).Infof("btrfs rdev major:minor %d:%d\n", int(major(uint64(buf.Rdev))), int(minor(uint64(buf.Rdev)))) // nolint: unconvert
--
--		return int(major(uint64(buf.Dev))), int(minor(uint64(buf.Dev))), nil // nolint: unconvert
--	} else {
--		return 0, 0, fmt.Errorf("%s is not a block device", mount.Source)
--	}
--}
-diff -ur com_github_google_cadvisor.orig/fs/fs_test.go com_github_google_cadvisor/fs/fs_test.go
---- com_github_google_cadvisor.orig/fs/fs_test.go	2020-04-15 17:54:23.086143468 +0200
-+++ com_github_google_cadvisor/fs/fs_test.go	2020-04-16 15:10:42.829856068 +0200
-@@ -516,7 +516,6 @@
- 				{Root: "/", MountPoint: "/b", Source: "/dev/sdb", FsType: "ext4", Major: 253, Minor: 1},
- 				{Root: "/", MountPoint: "/c", Source: "/dev/sdc", FsType: "btrfs", Major: 253, Minor: 2},
- 				{Root: "/", MountPoint: "/d", Source: "/dev/sdd", FsType: "xfs", Major: 253, Minor: 3},
--				{Root: "/", MountPoint: "/e", Source: "/dev/sde", FsType: "zfs", Major: 253, Minor: 4},
- 				{Root: "/", MountPoint: "/f", Source: "overlay", FsType: "overlay", Major: 253, Minor: 5},
- 				{Root: "/", MountPoint: "/test1", Source: "tmpfs", FsType: "tmpfs", Major: 253, Minor: 4},
- 				{Root: "/", MountPoint: "/test2", Source: "tmpfs", FsType: "tmpfs", Major: 253, Minor: 4},
-@@ -526,7 +525,6 @@
- 				"/dev/sdb":      {fsType: "ext4", mountpoint: "/b", major: 253, minor: 1},
- 				"/dev/sdc":      {fsType: "btrfs", mountpoint: "/c", major: 253, minor: 2},
- 				"/dev/sdd":      {fsType: "xfs", mountpoint: "/d", major: 253, minor: 3},
--				"/dev/sde":      {fsType: "zfs", mountpoint: "/e", major: 253, minor: 4},
- 				"overlay_253-5": {fsType: "overlay", mountpoint: "/f", major: 253, minor: 5},
- 				"/test1":        {fsType: "tmpfs", mountpoint: "/test1", major: 253, minor: 4},
- 				"/test2":        {fsType: "tmpfs", mountpoint: "/test2", major: 253, minor: 4},
-diff -ur com_github_google_cadvisor.orig/fs/types.go com_github_google_cadvisor/fs/types.go
---- com_github_google_cadvisor.orig/fs/types.go	2020-04-15 17:54:23.086143468 +0200
-+++ com_github_google_cadvisor/fs/types.go	2020-04-16 15:10:48.264872763 +0200
-@@ -47,7 +47,6 @@
- }
- 
- const (
--	ZFS          FsType = "zfs"
- 	DeviceMapper FsType = "devicemapper"
- 	VFS          FsType = "vfs"
- )
diff --git a/third_party/go/patches/k8s-kubernetes.patch b/third_party/go/patches/k8s-kubernetes.patch
index 27a1dec..49250e5 100644
--- a/third_party/go/patches/k8s-kubernetes.patch
+++ b/third_party/go/patches/k8s-kubernetes.patch
@@ -209,7 +209,7 @@
 @@ -28,10 +28,6 @@
  	"k8s.io/component-base/logs"
  	"k8s.io/component-base/version/verflag"
- 	"k8s.io/klog"
+ 	"k8s.io/klog/v2"
 -
 -	// ensure libs have a chance to globally register their flags
 -	_ "k8s.io/kubernetes/pkg/credentialprovider/azure"
@@ -303,42 +303,6 @@
  	allPlugins = append(allPlugins, csi.ProbeVolumePlugins()...)
  	return allPlugins, nil
  }
-diff -ur io_k8s_kubernetes.orig/cmd/kubelet/app/plugins_providers.go io_k8s_kubernetes/cmd/kubelet/app/plugins_providers.go
---- io_k8s_kubernetes.orig/cmd/kubelet/app/plugins_providers.go	2020-04-15 13:43:57.827669732 +0200
-+++ io_k8s_kubernetes/cmd/kubelet/app/plugins_providers.go	2020-04-15 16:29:49.402465237 +0200
-@@ -24,13 +24,7 @@
- 	"k8s.io/klog"
- 	"k8s.io/kubernetes/pkg/features"
- 	"k8s.io/kubernetes/pkg/volume"
--	"k8s.io/kubernetes/pkg/volume/awsebs"
--	"k8s.io/kubernetes/pkg/volume/azure_dd"
--	"k8s.io/kubernetes/pkg/volume/azure_file"
--	"k8s.io/kubernetes/pkg/volume/cinder"
- 	"k8s.io/kubernetes/pkg/volume/csimigration"
--	"k8s.io/kubernetes/pkg/volume/gcepd"
--	"k8s.io/kubernetes/pkg/volume/vsphere_volume"
- )
- 
- type probeFn func() []volume.VolumePlugin
-@@ -60,11 +54,6 @@
- 
- func appendLegacyProviderVolumes(allPlugins []volume.VolumePlugin, featureGate featuregate.FeatureGate) ([]volume.VolumePlugin, error) {
- 	pluginMigrationStatus := make(map[string]pluginInfo)
--	pluginMigrationStatus[plugins.AWSEBSInTreePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationAWS, pluginMigrationCompleteFeature: features.CSIMigrationAWSComplete, pluginProbeFunction: awsebs.ProbeVolumePlugins}
--	pluginMigrationStatus[plugins.GCEPDInTreePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationGCE, pluginMigrationCompleteFeature: features.CSIMigrationGCEComplete, pluginProbeFunction: gcepd.ProbeVolumePlugins}
--	pluginMigrationStatus[plugins.CinderInTreePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationOpenStack, pluginMigrationCompleteFeature: features.CSIMigrationOpenStackComplete, pluginProbeFunction: cinder.ProbeVolumePlugins}
--	pluginMigrationStatus[plugins.AzureDiskInTreePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationAzureDisk, pluginMigrationCompleteFeature: features.CSIMigrationAzureDiskComplete, pluginProbeFunction: azure_dd.ProbeVolumePlugins}
--	pluginMigrationStatus[plugins.AzureFileInTreePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationAzureFile, pluginMigrationCompleteFeature: features.CSIMigrationAzureFileComplete, pluginProbeFunction: azure_file.ProbeVolumePlugins}
- 
- 	var err error
- 	for pluginName, pluginInfo := range pluginMigrationStatus {
-@@ -74,6 +63,5 @@
- 		}
- 	}
- 
--	allPlugins = append(allPlugins, vsphere_volume.ProbeVolumePlugins()...)
- 	return allPlugins, nil
- }
 diff -ur io_k8s_kubernetes.orig/cmd/kubelet/BUILD io_k8s_kubernetes/cmd/kubelet/BUILD
 --- io_k8s_kubernetes.orig/cmd/kubelet/BUILD	2020-04-15 13:43:57.827669732 +0200
 +++ io_k8s_kubernetes/cmd/kubelet/BUILD	2020-04-20 14:56:20.446965836 +0200
diff --git a/third_party/go/patches/k8s-native-metrics.patch b/third_party/go/patches/k8s-native-metrics.patch
index 9568764..859ee74 100644
--- a/third_party/go/patches/k8s-native-metrics.patch
+++ b/third_party/go/patches/k8s-native-metrics.patch
@@ -43,7 +43,7 @@
          "@io_k8s_client_go//tools/record:go_default_library",
          "@io_k8s_cloud_provider//:go_default_library",
 +        "@org_golang_x_sys//unix:go_default_library",
-         "@io_k8s_klog//:go_default_library",
+         "@io_k8s_klog_v2//:go_default_library",
          "@io_k8s_utils//exec:go_default_library",
          "@io_k8s_utils//mount:go_default_library",
 @@ -55,6 +57,7 @@ go_test(
diff --git a/third_party/go/patches/k8s-native-mounter.patch b/third_party/go/patches/k8s-native-mounter.patch
index 5e95bfd..2f754b6 100644
--- a/third_party/go/patches/k8s-native-mounter.patch
+++ b/third_party/go/patches/k8s-native-mounter.patch
@@ -60,7 +60,7 @@
  	"syscall"
  
 +	"golang.org/x/sys/unix"
- 	"k8s.io/klog"
+ 	"k8s.io/klog/v2"
  	utilexec "k8s.io/utils/exec"
  	utilio "k8s.io/utils/io"
 @@ -49,8 +51,10 @@ const (
