From ab215f4a32dbde8a32e5a1dcbc55ff420d18d0e7 Mon Sep 17 00:00:00 2001 From: Hussein Galal Date: Thu, 16 Dec 2021 21:21:28 +0200 Subject: [PATCH] Update to v1.22.5 (#4767) * Update to v1.22.5 Signed-off-by: galal-hussein * Update to v1.22.5 Signed-off-by: galal-hussein --- go.mod | 78 ++++----- go.sum | 102 ++++++------ vendor/k8s.io/client-go/pkg/version/base.go | 6 +- vendor/k8s.io/cloud-provider/go.sum | 4 +- vendor/k8s.io/component-base/version/base.go | 6 +- vendor/k8s.io/csi-translation-lib/go.sum | 4 +- .../cronjob/cronjob_controllerv2.go | 10 +- .../cm/devicemanager/checkpoint/checkpoint.go | 16 +- .../devicemanager/checkpoint/checkpointv1.go | 124 ++++++++++++++ .../pkg/kubelet/cm/devicemanager/manager.go | 43 ++++- .../kubelet/dockershim/docker_image_linux.go | 12 +- .../dockershim/docker_image_windows.go | 12 +- .../pkg/kubelet/dockershim/docker_service.go | 18 ++- .../pkg/kubelet/dockershim/docker_stats.go | 17 +- .../kubelet/dockershim/docker_stats_linux.go | 28 +--- .../dockershim/docker_stats_unsupported.go | 2 +- .../dockershim/docker_stats_windows.go | 42 ++--- .../dockershim/libdocker/fake_client.go | 2 + .../k8s.io/kubernetes/pkg/kubelet/kubelet.go | 2 +- .../kubernetes/pkg/kubelet/kubelet_pods.go | 22 +-- .../nodeshutdown_manager_linux.go | 4 + .../kubernetes/pkg/kubelet/pod_workers.go | 153 ++++++++++++++---- .../pkg/registry/batch/cronjob/strategy.go | 11 +- .../kubernetes/pkg/scheduler/eventhandlers.go | 10 +- .../plugins/podtopologyspread/plugin.go | 2 + .../plugins/podtopologyspread/scoring.go | 12 +- .../pkg/scheduler/internal/cache/cache.go | 17 +- .../kubernetes/pkg/scheduler/scheduler.go | 5 +- .../azure/azure_vmss.go | 9 +- vendor/k8s.io/mount-utils/mount_linux.go | 18 +++ vendor/modules.txt | 110 ++++++------- 31 files changed, 591 insertions(+), 310 deletions(-) create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint/checkpointv1.go diff --git a/go.mod b/go.mod index 0c59cc6506..2ea8a5abc4 100644 --- a/go.mod +++ b/go.mod @@ -40,37 +40,37 @@ replace ( google.golang.org/genproto => google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63 google.golang.org/grpc => google.golang.org/grpc v1.38.0 gopkg.in/square/go-jose.v2 => gopkg.in/square/go-jose.v2 v2.2.2 - k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.22.4-k3s1 - k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.22.4-k3s1 - k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.22.4-k3s1 - k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.22.4-k3s1 - k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.22.4-k3s1 - k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.22.4-k3s1 - k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.22.4-k3s1 - k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.22.4-k3s1 - k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.22.4-k3s1 - k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.22.4-k3s1 - k8s.io/component-helpers => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.22.4-k3s1 - k8s.io/controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.22.4-k3s1 - k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.22.4-k3s1 - k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.22.4-k3s1 + k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.22.5-k3s1 + k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.22.5-k3s1 + k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.22.5-k3s1 + k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.22.5-k3s1 + k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.22.5-k3s1 + k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.22.5-k3s1 + k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.22.5-k3s1 + k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.22.5-k3s1 + k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.22.5-k3s1 + k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.22.5-k3s1 + k8s.io/component-helpers => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.22.5-k3s1 + k8s.io/controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.22.5-k3s1 + k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.22.5-k3s1 + k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.22.5-k3s1 k8s.io/klog => github.com/k3s-io/klog v1.0.0-k3s2 // k3s-release-1.x k8s.io/klog/v2 => github.com/k3s-io/klog/v2 v2.9.0-k3s2 // k3s-main - k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.22.4-k3s1 - k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.22.4-k3s1 - k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.22.4-k3s1 - k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.22.4-k3s1 - k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.22.4-k3s1 - k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.22.4-k3s1 - k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.22.4-k3s1 - k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.22.4-k3s1 - k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.22.4-k3s1 - k8s.io/mount-utils => github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.22.4-k3s1 - k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.22.4-k3s1 - k8s.io/pod-security-admission => github.com/k3s-io/kubernetes/staging/src/k8s.io/pod-security-admission v1.22.4-k3s1 - k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.22.4-k3s1 - k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.22.4-k3s1 - k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.22.4-k3s1 + k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.22.5-k3s1 + k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.22.5-k3s1 + k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.22.5-k3s1 + k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.22.5-k3s1 + k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.22.5-k3s1 + k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.22.5-k3s1 + k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.22.5-k3s1 + k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.22.5-k3s1 + k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.22.5-k3s1 + k8s.io/mount-utils => github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.22.5-k3s1 + k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.22.5-k3s1 + k8s.io/pod-security-admission => github.com/k3s-io/kubernetes/staging/src/k8s.io/pod-security-admission v1.22.5-k3s1 + k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.22.5-k3s1 + k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.22.5-k3s1 + k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.22.5-k3s1 mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7 ) @@ -124,23 +124,23 @@ require ( go.etcd.io/etcd/etcdutl/v3 v3.5.0 go.etcd.io/etcd/server/v3 v3.5.0 golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 - golang.org/x/net v0.0.0-20211005215030-d2e5035098b3 + golang.org/x/net v0.0.0-20211209124913-491a49abca63 golang.org/x/sys v0.0.0-20211004093028-2c5d950f24ef google.golang.org/grpc v1.41.0 gopkg.in/yaml.v2 v2.4.0 inet.af/tcpproxy v0.0.0-20200125044825-b6bb9b5b8252 - k8s.io/api v0.22.4 - k8s.io/apimachinery v0.22.4 - k8s.io/apiserver v0.22.4 + k8s.io/api v0.22.5 + k8s.io/apimachinery v0.22.5 + k8s.io/apiserver v0.22.5 k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible - k8s.io/cloud-provider v0.22.4 - k8s.io/component-base v0.22.4 - k8s.io/controller-manager v0.22.4 // indirect - k8s.io/cri-api v0.22.4 + k8s.io/cloud-provider v0.22.5 + k8s.io/component-base v0.22.5 + k8s.io/controller-manager v0.22.5 // indirect + k8s.io/cri-api v0.22.5 k8s.io/klog v1.0.0 k8s.io/klog/v2 v2.9.0 - k8s.io/kubectl v0.22.4 - k8s.io/kubernetes v1.22.4 + k8s.io/kubectl v0.22.5 + k8s.io/kubernetes v1.22.5 k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a sigs.k8s.io/yaml v1.2.0 ) diff --git a/go.sum b/go.sum index 4488419e6f..5818f9c4d5 100644 --- a/go.sum +++ b/go.sum @@ -614,57 +614,57 @@ github.com/k3s-io/klog v1.0.0-k3s2 h1:yyvD2bQbxG7m85/pvNctLX2bUDmva5kOBvuZ77tTGB github.com/k3s-io/klog v1.0.0-k3s2/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= github.com/k3s-io/klog/v2 v2.9.0-k3s2 h1:8Dzu3wGPFMo1mPEobSEpkHWH+HXqgFXp8R7FbcdgE8k= github.com/k3s-io/klog/v2 v2.9.0-k3s2/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -github.com/k3s-io/kubernetes v1.22.4-k3s1 h1:a7a87QH6W5xSeYNjjdHS8AdMGrj7uauO6BuPJoeTXiI= -github.com/k3s-io/kubernetes v1.22.4-k3s1/go.mod h1:cMy6DFG4E+/jxMgxw1aWMwZqvI1AueV3HCcG9S7QNIk= -github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.22.4-k3s1 h1:AHoGUNjhbQX75KWL0TuktFG2NbmIVqo0GhukN8XmP0s= -github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.22.4-k3s1/go.mod h1:IpPnJRE5t3olVaut5p67N16cZkWwwU5KVFM35xCKyxM= -github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.22.4-k3s1 h1:VfZnYgB2GnJI9wg2HTh4SykSMhct5zKIFvmP5EiCxfg= -github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.22.4-k3s1/go.mod h1:zmJC+9mioTWRSt+xhOuRY3B87bEz3EtGeCd91gYRSi8= -github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.22.4-k3s1 h1:YsYOB9ld0d3qdE0/g8Tk8tgQqkok/b01NX2FHSXiRmU= -github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.22.4-k3s1/go.mod h1:HSS1wcqIAF5ey2HsA1bh4U1SZzae/8FV8VZAwiHK8PU= -github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.22.4-k3s1 h1:XQbivk62qMy7Q8rklMkHRF+eLjJ8u3Cqc0EeZ6mmTM4= -github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.22.4-k3s1/go.mod h1:cVrnyIo0O8rjEuwU3zDrcNB0+btiewJZILVn7l04ndA= -github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.22.4-k3s1 h1:nPGXxWbLI1mzqL6YRBTUH83oKYbiGqU50M2xLcOEfk4= -github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.22.4-k3s1/go.mod h1:lfgLhMRSK39X7vRKyVDIHEUngwllg9H4TCGWbC6sCeA= -github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.22.4-k3s1 h1:gKUSdJoXU7FSpB5F8es62ZPHXowCyvFEfLuMOSUAtWs= -github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.22.4-k3s1/go.mod h1:O2pnHGDR/pgPeefYRaZj7oAOfA3WukxKhGFzkGhyIME= -github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.22.4-k3s1 h1:sJseLtOpIKYt3bZeCK108pB1kCV1hGuzxIbZWfkG8yE= -github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.22.4-k3s1/go.mod h1:YfjUcxHPiB9x/eHUrBtefZ61AuHGSDXfyXtsLS5UlMQ= -github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.22.4-k3s1 h1:gNo4ngjVFAGE4pcNLueW0INcRn/DKBxpFenJ1PzPA0A= -github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.22.4-k3s1/go.mod h1:ppZJmhTukDTa5g/F0ksVMLM0Owbi9GeKhzuTXAVVJig= -github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.22.4-k3s1 h1:m6zmiTpMnPvOIP11+wjAWsnsSquQlRnwIl3Hx1dum8Y= -github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.22.4-k3s1/go.mod h1:+R4WCWo1TVAhFPpi7KfK5xSMMq+OUxpe0SXM8o+Y1PM= -github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.22.4-k3s1 h1:XQpn74M9JoLO19rcOY85fN0difs4Jjwsq4j+ocS8I8o= -github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.22.4-k3s1/go.mod h1:cn9EB9A1wujtKWsHqB9lkYq8FL4dUuftmiqNyXIQEmE= -github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.22.4-k3s1 h1:ArlHlCYeTu/5CCZIAioe+aeK8YUnW754fdaiJnyIuf4= -github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.22.4-k3s1/go.mod h1:9Bx6HezI9sKzn5Boasw7vMT8FRgcXsExOoT87Wzdls4= -github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.22.4-k3s1 h1:cw8+4RCgkyQWD/3ERYOFCQ3gJAX90Lfa4MFsbOfn4S8= -github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.22.4-k3s1/go.mod h1:aPin+82yKPEirDGBtNS/4fcc3a1QVOqdt6zzxOlrfc8= -github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.22.4-k3s1 h1:xW01nw4ClRO+drw5s4YR9pLoy3SPm1CH6+ZJeilYok0= -github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.22.4-k3s1/go.mod h1:2XpB3zC24SSO5mhWTzWwBHrO5rO19ncH1bdqS+VuQsI= -github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.22.4-k3s1 h1:9uNa6fPpg+rpXa4jhmmwBs5QquUdJT8tN1VxEjC0x9w= -github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.22.4-k3s1/go.mod h1:B1gPUSbK2PVSnkxCgw/fmDckzQU6UCuyl670XFbEw6Q= -github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.22.4-k3s1 h1:SrNTndYl3oDd76FpfQetCAvb3KS/Q7LYRR4n1sUhxLQ= -github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.22.4-k3s1/go.mod h1:E98zh+3BdGMr4K4vdHQ++RDyPm29QUkHh/28KlKUS2M= -github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.22.4-k3s1 h1:o9eo80IgaxiWzXPCFo7azy+MJ1t936vTEOTG2glTYSs= -github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.22.4-k3s1/go.mod h1:46iKO45TZat/zvPyqe8TjLLrTS/U/nGB92Ft63PEPF0= -github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.22.4-k3s1 h1:xRSYSJ1op+xFXB4pTpQxm6TPUsVih26bixaL7t2rBJ8= -github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.22.4-k3s1/go.mod h1:6mEp02ABsuOeeBuUrrol78v9LYysX7Z8CZOMFlkPOOI= -github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.22.4-k3s1 h1:kDo4emfEJkLpeTLvAqjofwaTNP8+KM3nHUW46b/pY1s= -github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.22.4-k3s1/go.mod h1:xZnfOrGTta6rB9IWNKl82yzWKpMSUXVmyGHRilQ9kzM= -github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.22.4-k3s1 h1:AWCYJ5YiP2/x2qeweeoSPUg0qF+FQoW9xBAE+b/xH44= -github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.22.4-k3s1/go.mod h1:tQ6sES/uhan72qymDDma4H0wrrF0gcZIYV8cczR20es= -github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.22.4-k3s1 h1:fS1sfV8JD4ksV1uwruH6SOGk2YA9FmAwggmBoNvHbjE= -github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.22.4-k3s1/go.mod h1:ykhJBi1kXSUeYSTzHe2F6A8nDAfF2jjClsagmgX96vk= -github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.22.4-k3s1 h1:BZNjFNRzgQRJnHxA35Fz2+ag7z+ShhvahyPrxQ7Tq9c= -github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.22.4-k3s1/go.mod h1:X8EaUY5K2IM/62KAMuHGuHyOhsJwvsoRwdvsyWjm++g= -github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.22.4-k3s1 h1:7hhRJgwEHGOLKtIdRFAqS+L2eWpehkv1vARzt9izq3g= -github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.22.4-k3s1/go.mod h1:I5RbQZ+gj12KSgWzMyHaE0hudGajvT/Nc5jRE/WMJnI= -github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.22.4-k3s1 h1:3n9EXeC3/+Z6uf92gyQ5DoNcEsaVjiNiCLrauUE8TSY= -github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.22.4-k3s1/go.mod h1:7UvmmOyjKl2RW0tgpT4l1z7dxVV4TMnAAlSN95cpUeM= -github.com/k3s-io/kubernetes/staging/src/k8s.io/pod-security-admission v1.22.4-k3s1 h1:BYAhog5yKELWQnADuEOjgmhv95ACupwuWMnH3Reoq7A= -github.com/k3s-io/kubernetes/staging/src/k8s.io/pod-security-admission v1.22.4-k3s1/go.mod h1:NQr24M7bou27uJhKTCgiz8L/BbJm2G9ZjUQOmO1ZkDE= -github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.22.4-k3s1/go.mod h1:UxJ/6uQrndnWNUMK/16LYsFZK98WTolizwpjcIINGCg= +github.com/k3s-io/kubernetes v1.22.5-k3s1 h1:7yCukb0qQtYYl4G/9wsFI4KrWt/rBq8nhGe8UJg5D1M= +github.com/k3s-io/kubernetes v1.22.5-k3s1/go.mod h1:ejAVRNlNOIWvq0c5m3qAnzEdizuFlWBKXRf/HV6Z2zA= +github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.22.5-k3s1 h1:PfQiPKFXMpYoQm4wu1dAccPNrlPBl3NcaIa3PLczkKc= +github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.22.5-k3s1/go.mod h1:IpPnJRE5t3olVaut5p67N16cZkWwwU5KVFM35xCKyxM= +github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.22.5-k3s1 h1:8yZTzqwkBxBX++6S7wfTVNLvh7lBh0lE1TCWjWJX6rM= +github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.22.5-k3s1/go.mod h1:zmJC+9mioTWRSt+xhOuRY3B87bEz3EtGeCd91gYRSi8= +github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.22.5-k3s1 h1:Jl/6/P0Hff8N35m68OXq6NyXE94j2XaGV5Ycbx7/muQ= +github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.22.5-k3s1/go.mod h1:CPNWf+iwEQb0MEUbflFgtLpMRT5UiVeXy21z+C7WkLs= +github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.22.5-k3s1 h1:LdaZsJZ5avfbvKRT6X4HSp2uws+VaLIhQ6PZPSBW6+8= +github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.22.5-k3s1/go.mod h1:xbBlu3LNbi30+2d73xFdH7F+AWZcu7pyDv/3B+rkH8I= +github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.22.5-k3s1 h1:jaJIn+55XCs/k9ZKClWyLVxXvsvFir+6M+W2Bb3sLn0= +github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.22.5-k3s1/go.mod h1:lfgLhMRSK39X7vRKyVDIHEUngwllg9H4TCGWbC6sCeA= +github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.22.5-k3s1 h1:m68Z7UWs1c693gj0ETGrTAT7WTup/wVzs0BD0+z6qK8= +github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.22.5-k3s1/go.mod h1:ruxs1CFwYoF6mB/ihiy0QOhjEVkgXtL8DfcRqjcd0ZM= +github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.22.5-k3s1 h1:pG0S1X9Z4fZIghhAm3CUSjXkj+DLWDoWoDnITt6mzVI= +github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.22.5-k3s1/go.mod h1:YfjUcxHPiB9x/eHUrBtefZ61AuHGSDXfyXtsLS5UlMQ= +github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.22.5-k3s1 h1:6DRfyZMRyX9uyBVfp/Q7KMLwVsJh1qV/fwXx0aLSafg= +github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.22.5-k3s1/go.mod h1:ppZJmhTukDTa5g/F0ksVMLM0Owbi9GeKhzuTXAVVJig= +github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.22.5-k3s1 h1:i7uS/362eIgFFSPqQJuSlYdQTPPVoowk0jjXtsEoccs= +github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.22.5-k3s1/go.mod h1:82FKZSTpGAYDo9TEyO2POCP5VZtwKBWPltOxr/PEY+c= +github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.22.5-k3s1 h1:84mQgv2Rdk6i4gMQCCeJWWqfBNvpWDFw/0CoyLMMtnA= +github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.22.5-k3s1/go.mod h1:cn9EB9A1wujtKWsHqB9lkYq8FL4dUuftmiqNyXIQEmE= +github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.22.5-k3s1 h1:5tvssVHERALMF7zABCbif6yZMOq85zytvd2csYAkGtM= +github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.22.5-k3s1/go.mod h1:9Bx6HezI9sKzn5Boasw7vMT8FRgcXsExOoT87Wzdls4= +github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.22.5-k3s1 h1:kh0pJO2YSebdY4sobgYwrXVgAxbxxp4L8RBL6cKrRhw= +github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.22.5-k3s1/go.mod h1:aPin+82yKPEirDGBtNS/4fcc3a1QVOqdt6zzxOlrfc8= +github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.22.5-k3s1 h1:yeByf1wy5izH3othxgFjZ7f7NUVQRPwnLwHIEQv58Q4= +github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.22.5-k3s1/go.mod h1:GsmfuA0cekL0pkx1Ejxk3HZGHza02Ch2Lo09bNQLR8E= +github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.22.5-k3s1 h1:O2xMSUBoDvVeOwv9ViFuoQfCylfeYJqi9nNGVQMROj0= +github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.22.5-k3s1/go.mod h1:B1gPUSbK2PVSnkxCgw/fmDckzQU6UCuyl670XFbEw6Q= +github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.22.5-k3s1 h1:t3SuKQZtUpYB/R4MieoFx6fh/fWHXNzq3/mib+rENRA= +github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.22.5-k3s1/go.mod h1:xWIF188w3xG2X6QBYWG9Ovh6sO+QgHS2CpsVmWlYhHE= +github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.22.5-k3s1 h1:lPHb6H3SKl6inhhqRinbIwkIo7ZVAxSnv5wlWglbkI0= +github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.22.5-k3s1/go.mod h1:46iKO45TZat/zvPyqe8TjLLrTS/U/nGB92Ft63PEPF0= +github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.22.5-k3s1 h1:+zqOazLCiWOvRBMoqK+HwoDVOs9kp+NYY1udwdR2yKA= +github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.22.5-k3s1/go.mod h1:6mEp02ABsuOeeBuUrrol78v9LYysX7Z8CZOMFlkPOOI= +github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.22.5-k3s1 h1:zbfev5cQ2rnxp6zNjs57hKbJqLM7v2bEjkfZnGzaMko= +github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.22.5-k3s1/go.mod h1:xZnfOrGTta6rB9IWNKl82yzWKpMSUXVmyGHRilQ9kzM= +github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.22.5-k3s1 h1:daI0h9X8BaefmN10PSp++1ZUPFSYG//XfkxMi5KYdgM= +github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.22.5-k3s1/go.mod h1:tQ6sES/uhan72qymDDma4H0wrrF0gcZIYV8cczR20es= +github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.22.5-k3s1 h1:0Tu+dcBSGwVDGNEOLfSOGir5EhE9AFagIbR6C9nYMSw= +github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.22.5-k3s1/go.mod h1:WyrLJLrfabeu6M39g8+g4tuj+qjP70IVV8HQFp3EBb4= +github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.22.5-k3s1 h1:25FKLF/JBFZNTCfnvbm8ChEqU992pst3+wPL99dY7iM= +github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.22.5-k3s1/go.mod h1:X8EaUY5K2IM/62KAMuHGuHyOhsJwvsoRwdvsyWjm++g= +github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.22.5-k3s1 h1:8UDMX+xp8872C3AdMlq2LY86QTHDj0rA3gp72aftkn0= +github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.22.5-k3s1/go.mod h1:I5RbQZ+gj12KSgWzMyHaE0hudGajvT/Nc5jRE/WMJnI= +github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.22.5-k3s1 h1:bf3VDsr8kuKI5tpkcFX/7CAqm9PLazKAaeiE8i50DB4= +github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.22.5-k3s1/go.mod h1:7UvmmOyjKl2RW0tgpT4l1z7dxVV4TMnAAlSN95cpUeM= +github.com/k3s-io/kubernetes/staging/src/k8s.io/pod-security-admission v1.22.5-k3s1 h1:UqlvFB1lXtxAdDgc8AIvQX0Mzco7hSIYKq/9vNj5lag= +github.com/k3s-io/kubernetes/staging/src/k8s.io/pod-security-admission v1.22.5-k3s1/go.mod h1:NQr24M7bou27uJhKTCgiz8L/BbJm2G9ZjUQOmO1ZkDE= +github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.22.5-k3s1/go.mod h1:UxJ/6uQrndnWNUMK/16LYsFZK98WTolizwpjcIINGCg= github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw= github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= diff --git a/vendor/k8s.io/client-go/pkg/version/base.go b/vendor/k8s.io/client-go/pkg/version/base.go index 5da123eb37..e5dcca0d57 100644 --- a/vendor/k8s.io/client-go/pkg/version/base.go +++ b/vendor/k8s.io/client-go/pkg/version/base.go @@ -3,8 +3,8 @@ package version var ( gitMajor = "1" gitMinor = "22" - gitVersion = "v1.22.4-k3s1" - gitCommit = "00226be68bd6b70f8fca252a1027fc0a35d070b8" + gitVersion = "v1.22.5-k3s1" + gitCommit = "85d7ce45a6494324421181c9d778f4db131d8590" gitTreeState = "clean" - buildDate = "2021-11-17T22:30:06Z" + buildDate = "2021-12-16T17:17:19Z" ) diff --git a/vendor/k8s.io/cloud-provider/go.sum b/vendor/k8s.io/cloud-provider/go.sum index 4ca02509e1..8ad81bf90b 100644 --- a/vendor/k8s.io/cloud-provider/go.sum +++ b/vendor/k8s.io/cloud-provider/go.sum @@ -542,8 +542,8 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210520170846-37e1c6afe023 h1:ADo5wSpq2gqaCGQWzk7S5vd//0iyyLeAratkEoG5dLE= -golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY= +golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= diff --git a/vendor/k8s.io/component-base/version/base.go b/vendor/k8s.io/component-base/version/base.go index 5da123eb37..e5dcca0d57 100644 --- a/vendor/k8s.io/component-base/version/base.go +++ b/vendor/k8s.io/component-base/version/base.go @@ -3,8 +3,8 @@ package version var ( gitMajor = "1" gitMinor = "22" - gitVersion = "v1.22.4-k3s1" - gitCommit = "00226be68bd6b70f8fca252a1027fc0a35d070b8" + gitVersion = "v1.22.5-k3s1" + gitCommit = "85d7ce45a6494324421181c9d778f4db131d8590" gitTreeState = "clean" - buildDate = "2021-11-17T22:30:06Z" + buildDate = "2021-12-16T17:17:19Z" ) diff --git a/vendor/k8s.io/csi-translation-lib/go.sum b/vendor/k8s.io/csi-translation-lib/go.sum index 783e2cec98..beeff78ad1 100644 --- a/vendor/k8s.io/csi-translation-lib/go.sum +++ b/vendor/k8s.io/csi-translation-lib/go.sum @@ -124,8 +124,8 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210520170846-37e1c6afe023 h1:ADo5wSpq2gqaCGQWzk7S5vd//0iyyLeAratkEoG5dLE= -golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY= +golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/cronjob_controllerv2.go b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/cronjob_controllerv2.go index 5f8e13c562..6c69c20e0a 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/cronjob_controllerv2.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/cronjob_controllerv2.go @@ -20,6 +20,7 @@ import ( "fmt" "reflect" "sort" + "strings" "time" "github.com/robfig/cron/v3" @@ -482,15 +483,20 @@ func (jm *ControllerV2) syncCronJob( // this is likely a user error in defining the spec value // we should log the error and not reconcile this cronjob until an update to spec klog.V(2).InfoS("Unparseable schedule", "cronjob", klog.KRef(cj.GetNamespace(), cj.GetName()), "schedule", cj.Spec.Schedule, "err", err) - jm.recorder.Eventf(cj, corev1.EventTypeWarning, "UnparseableSchedule", "unparseable schedule: %s : %s", cj.Spec.Schedule, err) + jm.recorder.Eventf(cj, corev1.EventTypeWarning, "UnparseableSchedule", "unparseable schedule: %q : %s", cj.Spec.Schedule, err) return cj, nil, nil } + + if strings.Contains(cj.Spec.Schedule, "TZ") { + jm.recorder.Eventf(cj, corev1.EventTypeWarning, "UnsupportedSchedule", "CRON_TZ or TZ used in schedule %q is not officially supported, see https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/ for more details", cj.Spec.Schedule) + } + scheduledTime, err := getNextScheduleTime(*cj, now, sched, jm.recorder) if err != nil { // this is likely a user error in defining the spec value // we should log the error and not reconcile this cronjob until an update to spec klog.V(2).InfoS("invalid schedule", "cronjob", klog.KRef(cj.GetNamespace(), cj.GetName()), "schedule", cj.Spec.Schedule, "err", err) - jm.recorder.Eventf(cj, corev1.EventTypeWarning, "InvalidSchedule", "invalid schedule schedule: %s : %s", cj.Spec.Schedule, err) + jm.recorder.Eventf(cj, corev1.EventTypeWarning, "InvalidSchedule", "invalid schedule: %s : %s", cj.Spec.Schedule, err) return cj, nil, nil } if scheduledTime == nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint/checkpoint.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint/checkpoint.go index 0430fcd1d2..4620004f17 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint/checkpoint.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint/checkpoint.go @@ -27,7 +27,7 @@ import ( // DeviceManagerCheckpoint defines the operations to retrieve pod devices type DeviceManagerCheckpoint interface { checkpointmanager.Checkpoint - GetData() ([]PodDevicesEntry, map[string][]string) + GetDataInLatestFormat() ([]PodDevicesEntry, map[string][]string) } // DevicesPerNUMA represents device ids obtained from device plugin per NUMA node id @@ -72,9 +72,12 @@ func (dev DevicesPerNUMA) Devices() sets.String { return result } -// New returns an instance of Checkpoint -func New(devEntries []PodDevicesEntry, - devices map[string][]string) DeviceManagerCheckpoint { +// New returns an instance of Checkpoint - must be an alias for the most recent version +func New(devEntries []PodDevicesEntry, devices map[string][]string) DeviceManagerCheckpoint { + return NewV2(devEntries, devices) +} + +func NewV2(devEntries []PodDevicesEntry, devices map[string][]string) DeviceManagerCheckpoint { return &Data{ Data: checkpointData{ PodDeviceEntries: devEntries, @@ -99,7 +102,8 @@ func (cp *Data) VerifyChecksum() error { return cp.Checksum.Verify(cp.Data) } -// GetData returns device entries and registered devices -func (cp *Data) GetData() ([]PodDevicesEntry, map[string][]string) { +// GetDataInLatestFormat returns device entries and registered devices in the *most recent* +// checkpoint format, *not* in the original format stored on disk. +func (cp *Data) GetDataInLatestFormat() ([]PodDevicesEntry, map[string][]string) { return cp.Data.PodDeviceEntries, cp.Data.RegisteredDevices } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint/checkpointv1.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint/checkpointv1.go new file mode 100644 index 0000000000..65238caa19 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint/checkpointv1.go @@ -0,0 +1,124 @@ +/* +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 checkpoint + +import ( + "encoding/json" + "hash/fnv" + "strings" + + "github.com/davecgh/go-spew/spew" + + "k8s.io/klog/v2" + "k8s.io/kubernetes/pkg/kubelet/checkpointmanager/checksum" + "k8s.io/kubernetes/pkg/kubelet/checkpointmanager/errors" +) + +// PodDevicesEntry connects pod information to devices, without topology information (k8s <= 1.19) +type PodDevicesEntryV1 struct { + PodUID string + ContainerName string + ResourceName string + DeviceIDs []string + AllocResp []byte +} + +// checkpointData struct is used to store pod to device allocation information +// in a checkpoint file, without topology information (k8s <= 1.19) +type checkpointDataV1 struct { + PodDeviceEntries []PodDevicesEntryV1 + RegisteredDevices map[string][]string +} + +// checksum compute the checksum using the same algorithms (and data type names) k8s 1.19 used. +// We need this special code path to be able to correctly validate the checksum k8s 1.19 wrote. +// credits to https://github.com/kubernetes/kubernetes/pull/102717/commits/353f93895118d2ffa2d59a29a1fbc225160ea1d6 +func (cp checkpointDataV1) checksum() checksum.Checksum { + printer := spew.ConfigState{ + Indent: " ", + SortKeys: true, + DisableMethods: true, + SpewKeys: true, + } + + object := printer.Sprintf("%#v", cp) + object = strings.Replace(object, "checkpointDataV1", "checkpointData", 1) + object = strings.Replace(object, "PodDevicesEntryV1", "PodDevicesEntry", -1) + hash := fnv.New32a() + printer.Fprintf(hash, "%v", object) + return checksum.Checksum(hash.Sum32()) +} + +// Data holds checkpoint data and its checksum, in V1 (k8s <= 1.19) format +type DataV1 struct { + Data checkpointDataV1 + Checksum checksum.Checksum +} + +// New returns an instance of Checkpoint, in V1 (k8s <= 1.19) format. +// Users should avoid creating checkpoints in formats different than the most recent one, +// use the old formats only to validate existing checkpoint and convert them to most recent +// format. The only exception should be test code. +func NewV1(devEntries []PodDevicesEntryV1, + devices map[string][]string) DeviceManagerCheckpoint { + return &DataV1{ + Data: checkpointDataV1{ + PodDeviceEntries: devEntries, + RegisteredDevices: devices, + }, + } +} + +// MarshalCheckpoint is needed to implement the Checkpoint interface, but should not be called anymore +func (cp *DataV1) MarshalCheckpoint() ([]byte, error) { + klog.InfoS("Marshalling a device manager V1 checkpoint") + cp.Checksum = cp.Data.checksum() + return json.Marshal(*cp) +} + +// MarshalCheckpoint returns marshalled data +func (cp *DataV1) UnmarshalCheckpoint(blob []byte) error { + return json.Unmarshal(blob, cp) +} + +// VerifyChecksum verifies that passed checksum is same as calculated checksum +func (cp *DataV1) VerifyChecksum() error { + if cp.Checksum != cp.Data.checksum() { + return errors.ErrCorruptCheckpoint + } + return nil +} + +// GetDataInLatestFormat returns device entries and registered devices in the *most recent* +// checkpoint format, *not* in the original format stored on disk. +func (cp *DataV1) GetDataInLatestFormat() ([]PodDevicesEntry, map[string][]string) { + var podDevs []PodDevicesEntry + for _, entryV1 := range cp.Data.PodDeviceEntries { + devsPerNuma := NewDevicesPerNUMA() + // no NUMA cell affinity was recorded. The only possible choice + // is to set all the devices affine to node 0. + devsPerNuma[0] = entryV1.DeviceIDs + podDevs = append(podDevs, PodDevicesEntry{ + PodUID: entryV1.PodUID, + ContainerName: entryV1.ContainerName, + ResourceName: entryV1.ResourceName, + DeviceIDs: devsPerNuma, + AllocResp: entryV1.AllocResp, + }) + } + return podDevs, cp.Data.RegisteredDevices +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager.go index 424aacfc22..afd0aa8ccf 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager.go @@ -598,20 +598,33 @@ func (m *ManagerImpl) writeCheckpoint() error { // Reads device to container allocation information from disk, and populates // m.allocatedDevices accordingly. func (m *ManagerImpl) readCheckpoint() error { - registeredDevs := make(map[string][]string) - devEntries := make([]checkpoint.PodDevicesEntry, 0) - cp := checkpoint.New(devEntries, registeredDevs) - err := m.checkpointManager.GetCheckpoint(kubeletDeviceManagerCheckpoint, cp) + // the vast majority of time we restore a compatible checkpoint, so we try + // the current version first. Trying to restore older format checkpoints is + // relevant only in the kubelet upgrade flow, which happens once in a + // (long) while. + cp, err := m.getCheckpointV2() if err != nil { if err == errors.ErrCheckpointNotFound { - klog.InfoS("Failed to retrieve checkpoint", "checkpoint", kubeletDeviceManagerCheckpoint, "err", err) + // no point in trying anything else + klog.InfoS("Failed to read data from checkpoint", "checkpoint", kubeletDeviceManagerCheckpoint, "err", err) return nil } - return err + + var errv1 error + // one last try: maybe it's a old format checkpoint? + cp, errv1 = m.getCheckpointV1() + if errv1 != nil { + klog.InfoS("Failed to read checkpoint V1 file", "err", errv1) + // intentionally return the parent error. We expect to restore V1 checkpoints + // a tiny fraction of time, so what matters most is the current checkpoint read error. + return err + } + klog.InfoS("Read data from a V1 checkpoint", "checkpoint", kubeletDeviceManagerCheckpoint) } + m.mutex.Lock() defer m.mutex.Unlock() - podDevices, registeredDevs := cp.GetData() + podDevices, registeredDevs := cp.GetDataInLatestFormat() m.podDevices.fromCheckpointData(podDevices) m.allocatedDevices = m.podDevices.devices() for resource := range registeredDevs { @@ -624,6 +637,22 @@ func (m *ManagerImpl) readCheckpoint() error { return nil } +func (m *ManagerImpl) getCheckpointV2() (checkpoint.DeviceManagerCheckpoint, error) { + registeredDevs := make(map[string][]string) + devEntries := make([]checkpoint.PodDevicesEntry, 0) + cp := checkpoint.New(devEntries, registeredDevs) + err := m.checkpointManager.GetCheckpoint(kubeletDeviceManagerCheckpoint, cp) + return cp, err +} + +func (m *ManagerImpl) getCheckpointV1() (checkpoint.DeviceManagerCheckpoint, error) { + registeredDevs := make(map[string][]string) + devEntries := make([]checkpoint.PodDevicesEntryV1, 0) + cp := checkpoint.NewV1(devEntries, registeredDevs) + err := m.checkpointManager.GetCheckpoint(kubeletDeviceManagerCheckpoint, cp) + return cp, err +} + // UpdateAllocatedDevices frees any Devices that are bound to terminated pods. func (m *ManagerImpl) UpdateAllocatedDevices() { if !m.sourcesReady.AllReady() { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_image_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_image_linux.go index 021717c36d..fffb09da07 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_image_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_image_linux.go @@ -24,20 +24,12 @@ import ( "path/filepath" "time" - "k8s.io/klog/v2" - runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" ) // ImageFsInfo returns information of the filesystem that is used to store images. func (ds *dockerService) ImageFsInfo(_ context.Context, _ *runtimeapi.ImageFsInfoRequest) (*runtimeapi.ImageFsInfoResponse, error) { - info, err := ds.client.Info() - if err != nil { - klog.ErrorS(err, "Failed to get docker info") - return nil, err - } - - bytes, inodes, err := dirSize(filepath.Join(info.DockerRootDir, "image")) + bytes, inodes, err := dirSize(filepath.Join(ds.dockerRootDir, "image")) if err != nil { return nil, err } @@ -47,7 +39,7 @@ func (ds *dockerService) ImageFsInfo(_ context.Context, _ *runtimeapi.ImageFsInf { Timestamp: time.Now().Unix(), FsId: &runtimeapi.FilesystemIdentifier{ - Mountpoint: info.DockerRootDir, + Mountpoint: ds.dockerRootDir, }, UsedBytes: &runtimeapi.UInt64Value{ Value: uint64(bytes), diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_image_windows.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_image_windows.go index 2a74adf7e7..8f9c07db11 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_image_windows.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_image_windows.go @@ -30,16 +30,10 @@ import ( // ImageFsInfo returns information of the filesystem that is used to store images. func (ds *dockerService) ImageFsInfo(_ context.Context, _ *runtimeapi.ImageFsInfoRequest) (*runtimeapi.ImageFsInfoResponse, error) { - info, err := ds.client.Info() - if err != nil { - klog.ErrorS(err, "Failed to get docker info") - return nil, err - } - statsClient := &winstats.StatsClient{} - fsinfo, err := statsClient.GetDirFsInfo(info.DockerRootDir) + fsinfo, err := statsClient.GetDirFsInfo(ds.dockerRootDir) if err != nil { - klog.ErrorS(err, "Failed to get fsInfo for dockerRootDir", "path", info.DockerRootDir) + klog.ErrorS(err, "Failed to get fsInfo for dockerRootDir", "path", ds.dockerRootDir) return nil, err } @@ -48,7 +42,7 @@ func (ds *dockerService) ImageFsInfo(_ context.Context, _ *runtimeapi.ImageFsInf Timestamp: time.Now().UnixNano(), UsedBytes: &runtimeapi.UInt64Value{Value: fsinfo.Usage}, FsId: &runtimeapi.FilesystemIdentifier{ - Mountpoint: info.DockerRootDir, + Mountpoint: ds.dockerRootDir, }, }, } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_service.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_service.go index e402ef0c3b..1a9c0385b0 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_service.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_service.go @@ -256,16 +256,17 @@ func NewDockerService(config *ClientConfig, podSandboxImage string, streamingCon ds.network = network.NewPluginManager(plug) klog.InfoS("Docker cri networking managed by the network plugin", "networkPluginName", plug.Name()) + dockerInfo, err := ds.client.Info() + if err != nil { + return nil, fmt.Errorf("Failed to execute Info() call to the Docker client") + } + klog.InfoS("Docker Info", "dockerInfo", dockerInfo) + ds.dockerRootDir = dockerInfo.DockerRootDir + // skipping cgroup driver checks for Windows if runtime.GOOS == "linux" { - // NOTE: cgroup driver is only detectable in docker 1.11+ cgroupDriver := defaultCgroupDriver - dockerInfo, err := ds.client.Info() - klog.InfoS("Docker Info", "dockerInfo", dockerInfo) - if err != nil { - klog.ErrorS(err, "Failed to execute Info() call to the Docker client") - klog.InfoS("Falling back to use the default driver", "cgroupDriver", cgroupDriver) - } else if len(dockerInfo.CgroupDriver) == 0 { + if len(dockerInfo.CgroupDriver) == 0 { klog.InfoS("No cgroup driver is set in Docker") klog.InfoS("Falling back to use the default driver", "cgroupDriver", cgroupDriver) } else { @@ -313,6 +314,9 @@ type dockerService struct { // the docker daemon every time we need to do such checks. versionCache *cache.ObjectCache + // docker root directory + dockerRootDir string + // containerCleanupInfos maps container IDs to the `containerCleanupInfo` structs // needed to clean up after containers have been removed. // (see `applyPlatformSpecificDockerConfig` and `performPlatformSpecificContainerCleanup` diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats.go index c68df6279b..0ad357e8d7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats.go @@ -20,13 +20,24 @@ package dockershim import ( "context" + "fmt" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" ) // ContainerStats returns stats for a container stats request based on container id. -func (ds *dockerService) ContainerStats(_ context.Context, r *runtimeapi.ContainerStatsRequest) (*runtimeapi.ContainerStatsResponse, error) { - stats, err := ds.getContainerStats(r.ContainerId) +func (ds *dockerService) ContainerStats(ctx context.Context, r *runtimeapi.ContainerStatsRequest) (*runtimeapi.ContainerStatsResponse, error) { + filter := &runtimeapi.ContainerFilter{ + Id: r.ContainerId, + } + listResp, err := ds.ListContainers(ctx, &runtimeapi.ListContainersRequest{Filter: filter}) + if err != nil { + return nil, err + } + if len(listResp.Containers) != 1 { + return nil, fmt.Errorf("container with id %s not found", r.ContainerId) + } + stats, err := ds.getContainerStats(listResp.Containers[0]) if err != nil { return nil, err } @@ -51,7 +62,7 @@ func (ds *dockerService) ListContainerStats(ctx context.Context, r *runtimeapi.L var stats []*runtimeapi.ContainerStats for _, container := range listResp.Containers { - containerStats, err := ds.getContainerStats(container.Id) + containerStats, err := ds.getContainerStats(container) if err != nil { return nil, err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats_linux.go index 811bb066aa..38163ee643 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats_linux.go @@ -19,42 +19,30 @@ limitations under the License. package dockershim import ( - "context" "time" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" ) -func (ds *dockerService) getContainerStats(containerID string) (*runtimeapi.ContainerStats, error) { - info, err := ds.client.Info() +func (ds *dockerService) getContainerStats(c *runtimeapi.Container) (*runtimeapi.ContainerStats, error) { + statsJSON, err := ds.client.GetContainerStats(c.Id) if err != nil { return nil, err } - statsJSON, err := ds.client.GetContainerStats(containerID) + containerJSON, err := ds.client.InspectContainerWithSize(c.Id) if err != nil { return nil, err } - containerJSON, err := ds.client.InspectContainerWithSize(containerID) - if err != nil { - return nil, err - } - - statusResp, err := ds.ContainerStatus(context.Background(), &runtimeapi.ContainerStatusRequest{ContainerId: containerID}) - if err != nil { - return nil, err - } - status := statusResp.GetStatus() - dockerStats := statsJSON.Stats timestamp := time.Now().UnixNano() containerStats := &runtimeapi.ContainerStats{ Attributes: &runtimeapi.ContainerAttributes{ - Id: containerID, - Metadata: status.Metadata, - Labels: status.Labels, - Annotations: status.Annotations, + Id: c.Id, + Metadata: c.Metadata, + Labels: c.Labels, + Annotations: c.Annotations, }, Cpu: &runtimeapi.CpuUsage{ Timestamp: timestamp, @@ -66,7 +54,7 @@ func (ds *dockerService) getContainerStats(containerID string) (*runtimeapi.Cont }, WritableLayer: &runtimeapi.FilesystemUsage{ Timestamp: timestamp, - FsId: &runtimeapi.FilesystemIdentifier{Mountpoint: info.DockerRootDir}, + FsId: &runtimeapi.FilesystemIdentifier{Mountpoint: ds.dockerRootDir}, UsedBytes: &runtimeapi.UInt64Value{Value: uint64(*containerJSON.SizeRw)}, }, } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats_unsupported.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats_unsupported.go index 560e243671..68aa4ca766 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats_unsupported.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats_unsupported.go @@ -24,6 +24,6 @@ import ( runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" ) -func (ds *dockerService) getContainerStats(containerID string) (*runtimeapi.ContainerStats, error) { +func (ds *dockerService) getContainerStats(c *runtimeapi.Container) (*runtimeapi.ContainerStats, error) { return nil, fmt.Errorf("not implemented") } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats_windows.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats_windows.go index 451a183aab..aca4bfdc36 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats_windows.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/docker_stats_windows.go @@ -19,7 +19,6 @@ limitations under the License. package dockershim import ( - "context" "strings" "time" @@ -28,26 +27,21 @@ import ( "k8s.io/klog/v2" ) -func (ds *dockerService) getContainerStats(containerID string) (*runtimeapi.ContainerStats, error) { - info, err := ds.client.Info() - if err != nil { - return nil, err - } - - hcsshimContainer, err := hcsshim.OpenContainer(containerID) +func (ds *dockerService) getContainerStats(c *runtimeapi.Container) (*runtimeapi.ContainerStats, error) { + hcsshimContainer, err := hcsshim.OpenContainer(c.Id) if err != nil { // As we moved from using Docker stats to hcsshim directly, we may query HCS with already exited container IDs. // That will typically happen with init-containers in Exited state. Docker still knows about them but the HCS does not. // As we don't want to block stats retrieval for other containers, we only log errors. if !hcsshim.IsNotExist(err) && !hcsshim.IsAlreadyStopped(err) { - klog.V(4).InfoS("Error opening container (stats will be missing)", "containerID", containerID, "err", err) + klog.V(4).InfoS("Error opening container (stats will be missing)", "containerID", c.Id, "err", err) } return nil, nil } defer func() { closeErr := hcsshimContainer.Close() if closeErr != nil { - klog.ErrorS(closeErr, "Error closing container", "containerID", containerID) + klog.ErrorS(closeErr, "Error closing container", "containerID", c.Id) } }() @@ -60,30 +54,19 @@ func (ds *dockerService) getContainerStats(containerID string) (*runtimeapi.Cont // These hcs errors do not have helpers exposed in public package so need to query for the known codes // https://github.com/microsoft/hcsshim/blob/master/internal/hcs/errors.go // PR to expose helpers in hcsshim: https://github.com/microsoft/hcsshim/pull/933 - klog.V(4).InfoS("Container is not in a state that stats can be accessed. This occurs when the container is created but not started.", "containerID", containerID, "err", err) + klog.V(4).InfoS("Container is not in a state that stats can be accessed. This occurs when the container is created but not started.", "containerID", c.Id, "err", err) return nil, nil } return nil, err } - containerJSON, err := ds.client.InspectContainerWithSize(containerID) - if err != nil { - return nil, err - } - - statusResp, err := ds.ContainerStatus(context.Background(), &runtimeapi.ContainerStatusRequest{ContainerId: containerID}) - if err != nil { - return nil, err - } - status := statusResp.GetStatus() - timestamp := time.Now().UnixNano() containerStats := &runtimeapi.ContainerStats{ Attributes: &runtimeapi.ContainerAttributes{ - Id: containerID, - Metadata: status.Metadata, - Labels: status.Labels, - Annotations: status.Annotations, + Id: c.Id, + Metadata: c.Metadata, + Labels: c.Labels, + Annotations: c.Annotations, }, Cpu: &runtimeapi.CpuUsage{ Timestamp: timestamp, @@ -96,8 +79,11 @@ func (ds *dockerService) getContainerStats(containerID string) (*runtimeapi.Cont }, WritableLayer: &runtimeapi.FilesystemUsage{ Timestamp: timestamp, - FsId: &runtimeapi.FilesystemIdentifier{Mountpoint: info.DockerRootDir}, - UsedBytes: &runtimeapi.UInt64Value{Value: uint64(*containerJSON.SizeRw)}, + FsId: &runtimeapi.FilesystemIdentifier{Mountpoint: ds.dockerRootDir}, + // used bytes from image are not implemented on Windows + // don't query for it since it is expensive to call docker over named pipe + // https://github.com/moby/moby/blob/1ba54a5fd0ba293db3bea46cd67604b593f2048b/daemon/images/image_windows.go#L11-L14 + UsedBytes: &runtimeapi.UInt64Value{Value: 0}, }, } return containerStats, nil diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/fake_client.go b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/fake_client.go index 177290a711..43e3ea5143 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/fake_client.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker/fake_client.go @@ -225,6 +225,7 @@ func convertFakeContainer(f *FakeContainer) *dockertypes.ContainerJSON { if f.HostConfig == nil { f.HostConfig = &dockercontainer.HostConfig{} } + fakeRWSize := int64(40) return &dockertypes.ContainerJSON{ ContainerJSONBase: &dockertypes.ContainerJSONBase{ ID: f.ID, @@ -239,6 +240,7 @@ func convertFakeContainer(f *FakeContainer) *dockertypes.ContainerJSON { }, Created: dockerTimestampToString(f.CreatedAt), HostConfig: f.HostConfig, + SizeRw: &fakeRWSize, }, Config: f.Config, NetworkSettings: &dockertypes.NetworkSettings{}, diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go index 8b4ef087f0..9cd78fbe63 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go @@ -2217,7 +2217,7 @@ func (kl *Kubelet) HandlePodAdditions(pods []*v1.Pod) { if !kl.podWorkers.IsPodTerminationRequested(pod.UID) { // We failed pods that we rejected, so activePods include all admitted // pods that are alive. - activePods := kl.filterOutTerminatedPods(existingPods) + activePods := kl.filterOutInactivePods(existingPods) // Check if we can admit the pod; if not, reject it. if ok, reason, message := kl.canAdmitPod(activePods, pod); !ok { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go index 6faeb59082..a8e24c79d6 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go @@ -92,16 +92,17 @@ func (kl *Kubelet) listPodsFromDisk() ([]types.UID, error) { return pods, nil } -// GetActivePods returns pods that may have a running container (a -// terminated pod is one that is known to have no running containers and -// will not get any more). +// GetActivePods returns pods that have been admitted to the kubelet that +// are not fully terminated. This is mapped to the "desired state" of the +// kubelet - what pods should be running. // -// TODO: This method must include pods that have been force deleted from -// the config source (and thus removed from the pod manager) but are still -// terminating. +// WARNING: Currently this list does not include pods that have been force +// deleted but may still be terminating, which means resources assigned to +// those pods during admission may still be in use. See +// https://github.com/kubernetes/kubernetes/issues/104824 func (kl *Kubelet) GetActivePods() []*v1.Pod { allPods := kl.podManager.GetPods() - activePods := kl.filterOutTerminatedPods(allPods) + activePods := kl.filterOutInactivePods(allPods) return activePods } @@ -968,13 +969,15 @@ func (kl *Kubelet) podResourcesAreReclaimed(pod *v1.Pod) bool { return kl.PodResourcesAreReclaimed(pod, status) } -// filterOutTerminatedPods returns pods that are not in a terminal phase +// filterOutInactivePods returns pods that are not in a terminal phase // or are known to be fully terminated. This method should only be used // when the set of pods being filtered is upstream of the pod worker, i.e. // the pods the pod manager is aware of. -func (kl *Kubelet) filterOutTerminatedPods(pods []*v1.Pod) []*v1.Pod { +func (kl *Kubelet) filterOutInactivePods(pods []*v1.Pod) []*v1.Pod { filteredPods := make([]*v1.Pod, 0, len(pods)) for _, p := range pods { + // if a pod is fully terminated by UID, it should be excluded from the + // list of pods if kl.podWorkers.IsPodKnownTerminated(p.UID) { continue } @@ -982,6 +985,7 @@ func (kl *Kubelet) filterOutTerminatedPods(pods []*v1.Pod) []*v1.Pod { if kl.isAdmittedPodTerminal(p) && !kl.podWorkers.IsPodTerminationRequested(p.UID) { continue } + filteredPods = append(filteredPods, p) } return filteredPods diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/nodeshutdown/nodeshutdown_manager_linux.go b/vendor/k8s.io/kubernetes/pkg/kubelet/nodeshutdown/nodeshutdown_manager_linux.go index 27c2cee090..6c69ba5c3c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/nodeshutdown/nodeshutdown_manager_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/nodeshutdown/nodeshutdown_manager_linux.go @@ -269,6 +269,10 @@ func (m *Manager) processShutdownEvent() error { klog.V(1).InfoS("Shutdown manager killing pod with gracePeriod", "pod", klog.KObj(pod), "gracePeriod", gracePeriodOverride) if err := m.killPodFunc(pod, false, &gracePeriodOverride, func(status *v1.PodStatus) { + // set the pod status to failed (unless it was already in a successful terminal phase) + if status.Phase != v1.PodSucceeded { + status.Phase = v1.PodFailed + } status.Message = nodeShutdownMessage status.Reason = nodeShutdownReason }); err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/pod_workers.go b/vendor/k8s.io/kubernetes/pkg/kubelet/pod_workers.go index a866d0cfa6..12e75e0b87 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/pod_workers.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/pod_workers.go @@ -34,7 +34,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/kubelet/eviction" "k8s.io/kubernetes/pkg/kubelet/metrics" - kubelettypes "k8s.io/kubernetes/pkg/kubelet/types" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/util/queue" ) @@ -247,6 +246,8 @@ type podSyncStatus struct { cancelFn context.CancelFunc // working is true if a pod worker is currently in a sync method. working bool + // fullname of the pod + fullname string // syncedAt is the time at which the pod worker first observed this pod. syncedAt time.Time @@ -376,9 +377,10 @@ type podWorkers struct { // Tracks by UID the termination status of a pod - syncing, terminating, // terminated, and evicted. podSyncStatuses map[types.UID]*podSyncStatus - // Tracks when a static pod is being killed and is removed when the - // static pod transitions to the killed state. - terminatingStaticPodFullnames map[string]struct{} + // Tracks all uids for started static pods by full name + startedStaticPodsByFullname map[string]types.UID + // Tracks all uids for static pods that are waiting to start by full name + waitingToStartStaticPodsByFullname map[string][]types.UID workQueue queue.WorkQueue @@ -413,18 +415,19 @@ func newPodWorkers( podCache kubecontainer.Cache, ) PodWorkers { return &podWorkers{ - podSyncStatuses: map[types.UID]*podSyncStatus{}, - podUpdates: map[types.UID]chan podWork{}, - lastUndeliveredWorkUpdate: map[types.UID]podWork{}, - terminatingStaticPodFullnames: map[string]struct{}{}, - syncPodFn: syncPodFn, - syncTerminatingPodFn: syncTerminatingPodFn, - syncTerminatedPodFn: syncTerminatedPodFn, - recorder: recorder, - workQueue: workQueue, - resyncInterval: resyncInterval, - backOffPeriod: backOffPeriod, - podCache: podCache, + podSyncStatuses: map[types.UID]*podSyncStatus{}, + podUpdates: map[types.UID]chan podWork{}, + lastUndeliveredWorkUpdate: map[types.UID]podWork{}, + startedStaticPodsByFullname: map[string]types.UID{}, + waitingToStartStaticPodsByFullname: map[string][]types.UID{}, + syncPodFn: syncPodFn, + syncTerminatingPodFn: syncTerminatingPodFn, + syncTerminatedPodFn: syncTerminatedPodFn, + recorder: recorder, + workQueue: workQueue, + resyncInterval: resyncInterval, + backOffPeriod: backOffPeriod, + podCache: podCache, } } @@ -498,8 +501,19 @@ func (p *podWorkers) ShouldPodContentBeRemoved(uid types.UID) bool { func (p *podWorkers) IsPodForMirrorPodTerminatingByFullName(podFullName string) bool { p.podLock.Lock() defer p.podLock.Unlock() - _, ok := p.terminatingStaticPodFullnames[podFullName] - return ok + uid, started := p.startedStaticPodsByFullname[podFullName] + if !started { + return false + } + status, exists := p.podSyncStatuses[uid] + if !exists { + return false + } + if !status.IsTerminationRequested() || status.IsTerminated() { + return false + } + + return true } func isPodStatusCacheTerminal(status *kubecontainer.PodStatus) bool { @@ -552,6 +566,7 @@ func (p *podWorkers) UpdatePod(options UpdatePodOptions) { klog.V(4).InfoS("Pod is being synced for the first time", "pod", klog.KObj(pod), "podUID", pod.UID) status = &podSyncStatus{ syncedAt: now, + fullname: kubecontainer.GetPodFullName(pod), } // if this pod is being synced for the first time, we need to make sure it is an active pod if !isRuntimePod && (pod.Status.Phase == v1.PodFailed || pod.Status.Phase == v1.PodSucceeded) { @@ -664,11 +679,6 @@ func (p *podWorkers) UpdatePod(options UpdatePodOptions) { // will never be zero. options.KillPodOptions.PodTerminationGracePeriodSecondsOverride = &gracePeriod - // if a static pod comes through, start tracking it explicitly (cleared by the pod worker loop) - if kubelettypes.IsStaticPod(pod) { - p.terminatingStaticPodFullnames[kubecontainer.GetPodFullName(pod)] = struct{}{} - } - default: workType = SyncPodWork @@ -698,6 +708,12 @@ func (p *podWorkers) UpdatePod(options UpdatePodOptions) { podUpdates = make(chan podWork, 1) p.podUpdates[uid] = podUpdates + // ensure that static pods start in the order they are received by UpdatePod + if kubetypes.IsStaticPod(pod) { + p.waitingToStartStaticPodsByFullname[status.fullname] = + append(p.waitingToStartStaticPodsByFullname[status.fullname], uid) + } + // Creating a new pod worker either means this is a new pod, or that the // kubelet just restarted. In either case the kubelet is willing to believe // the status of the pod for the first pod worker sync. See corresponding @@ -767,10 +783,76 @@ func calculateEffectiveGracePeriod(status *podSyncStatus, pod *v1.Pod, options * return gracePeriod, status.gracePeriod != 0 && status.gracePeriod != gracePeriod } +// allowPodStart tries to start the pod and returns true if allowed, otherwise +// it requeues the pod and returns false. +func (p *podWorkers) allowPodStart(pod *v1.Pod) bool { + if !kubetypes.IsStaticPod(pod) { + // TBD: Do we want to allow non-static pods with the same full name? + // Note that it may disable the force deletion of pods. + return true + } + p.podLock.Lock() + defer p.podLock.Unlock() + status, ok := p.podSyncStatuses[pod.UID] + if !ok { + klog.ErrorS(nil, "Failed to get a valid podSyncStatuses", "pod", klog.KObj(pod), "podUID", pod.UID) + p.workQueue.Enqueue(pod.UID, wait.Jitter(p.backOffPeriod, workerBackOffPeriodJitterFactor)) + status.working = false + return false + } + if !p.allowStaticPodStart(status.fullname, pod.UID) { + p.workQueue.Enqueue(pod.UID, wait.Jitter(p.backOffPeriod, workerBackOffPeriodJitterFactor)) + status.working = false + return false + } + return true +} + +// allowStaticPodStart tries to start the static pod and returns true if +// 1. there are no other started static pods with the same fullname +// 2. the uid matches that of the first valid static pod waiting to start +func (p *podWorkers) allowStaticPodStart(fullname string, uid types.UID) bool { + startedUID, started := p.startedStaticPodsByFullname[fullname] + if started { + return startedUID == uid + } + + waitingPods := p.waitingToStartStaticPodsByFullname[fullname] + for i, waitingUID := range waitingPods { + // has pod already terminated or been deleted? + if _, ok := p.podSyncStatuses[waitingUID]; !ok { + continue + } + // another pod is next in line + if waitingUID != uid { + p.waitingToStartStaticPodsByFullname[fullname] = waitingPods[i:] + return false + } + // we are up next, remove ourselves + waitingPods = waitingPods[i+1:] + break + } + if len(waitingPods) != 0 { + p.waitingToStartStaticPodsByFullname[fullname] = waitingPods + } else { + delete(p.waitingToStartStaticPodsByFullname, fullname) + } + p.startedStaticPodsByFullname[fullname] = uid + return true +} + func (p *podWorkers) managePodLoop(podUpdates <-chan podWork) { var lastSyncTime time.Time + var podStarted bool for update := range podUpdates { pod := update.Options.Pod + if !podStarted { + if !p.allowPodStart(pod) { + klog.V(4).InfoS("Pod cannot start yet", "pod", klog.KObj(pod), "podUID", pod.UID) + continue + } + podStarted = true + } klog.V(4).InfoS("Processing pod event", "pod", klog.KObj(pod), "podUID", pod.UID, "updateType", update.WorkType) err := func() error { @@ -900,9 +982,6 @@ func (p *podWorkers) completeTerminating(pod *v1.Pod) { klog.V(4).InfoS("Pod terminated all containers successfully", "pod", klog.KObj(pod), "podUID", pod.UID) - // if a static pod is being tracked, forget it - delete(p.terminatingStaticPodFullnames, kubecontainer.GetPodFullName(pod)) - if status, ok := p.podSyncStatuses[pod.UID]; ok { if status.terminatingAt.IsZero() { klog.V(4).InfoS("Pod worker was terminated but did not have terminatingAt set, likely programmer error", "pod", klog.KObj(pod), "podUID", pod.UID) @@ -934,9 +1013,6 @@ func (p *podWorkers) completeTerminatingRuntimePod(pod *v1.Pod) { klog.V(4).InfoS("Pod terminated all orphaned containers successfully and worker can now stop", "pod", klog.KObj(pod), "podUID", pod.UID) - // if a static pod is being tracked, forget it - delete(p.terminatingStaticPodFullnames, kubecontainer.GetPodFullName(pod)) - if status, ok := p.podSyncStatuses[pod.UID]; ok { if status.terminatingAt.IsZero() { klog.V(4).InfoS("Pod worker was terminated but did not have terminatingAt set, likely programmer error", "pod", klog.KObj(pod), "podUID", pod.UID) @@ -944,6 +1020,10 @@ func (p *podWorkers) completeTerminatingRuntimePod(pod *v1.Pod) { status.terminatedAt = time.Now() status.finished = true status.working = false + + if p.startedStaticPodsByFullname[status.fullname] == pod.UID { + delete(p.startedStaticPodsByFullname, status.fullname) + } } ch, ok := p.podUpdates[pod.UID] @@ -952,7 +1032,6 @@ func (p *podWorkers) completeTerminatingRuntimePod(pod *v1.Pod) { } delete(p.podUpdates, pod.UID) delete(p.lastUndeliveredWorkUpdate, pod.UID) - delete(p.terminatingStaticPodFullnames, kubecontainer.GetPodFullName(pod)) } // completeTerminated is invoked after syncTerminatedPod completes successfully and means we @@ -969,7 +1048,6 @@ func (p *podWorkers) completeTerminated(pod *v1.Pod) { } delete(p.podUpdates, pod.UID) delete(p.lastUndeliveredWorkUpdate, pod.UID) - delete(p.terminatingStaticPodFullnames, kubecontainer.GetPodFullName(pod)) if status, ok := p.podSyncStatuses[pod.UID]; ok { if status.terminatingAt.IsZero() { @@ -980,6 +1058,10 @@ func (p *podWorkers) completeTerminated(pod *v1.Pod) { } status.finished = true status.working = false + + if p.startedStaticPodsByFullname[status.fullname] == pod.UID { + delete(p.startedStaticPodsByFullname, status.fullname) + } } } @@ -1079,6 +1161,11 @@ func (p *podWorkers) removeTerminatedWorker(uid types.UID) { return } + if startedUID, started := p.startedStaticPodsByFullname[status.fullname]; started && startedUID != uid { + klog.V(4).InfoS("Pod cannot start yet but is no longer known to the kubelet, finish it", "podUID", uid) + status.finished = true + } + if !status.finished { klog.V(4).InfoS("Pod worker has been requested for removal but is still not fully terminated", "podUID", uid) return @@ -1092,6 +1179,10 @@ func (p *podWorkers) removeTerminatedWorker(uid types.UID) { delete(p.podSyncStatuses, uid) delete(p.podUpdates, uid) delete(p.lastUndeliveredWorkUpdate, uid) + + if p.startedStaticPodsByFullname[status.fullname] == uid { + delete(p.startedStaticPodsByFullname, status.fullname) + } } // killPodNow returns a KillPodFunc that can be used to kill a pod. diff --git a/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/strategy.go index ce77a9ae55..c75a214451 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/strategy.go @@ -18,6 +18,8 @@ package cronjob import ( "context" + "fmt" + "strings" batchv1beta1 "k8s.io/api/batch/v1beta1" apiequality "k8s.io/apimachinery/pkg/api/equality" @@ -114,7 +116,11 @@ func (cronJobStrategy) Validate(ctx context.Context, obj runtime.Object) field.E // WarningsOnCreate returns warnings for the creation of the given object. func (cronJobStrategy) WarningsOnCreate(ctx context.Context, obj runtime.Object) []string { newCronJob := obj.(*batch.CronJob) - return pod.GetWarningsForPodTemplate(ctx, field.NewPath("spec", "jobTemplate", "spec", "template"), &newCronJob.Spec.JobTemplate.Spec.Template, nil) + warnings := pod.GetWarningsForPodTemplate(ctx, field.NewPath("spec", "jobTemplate", "spec", "template"), &newCronJob.Spec.JobTemplate.Spec.Template, nil) + if strings.Contains(newCronJob.Spec.Schedule, "TZ") { + warnings = append(warnings, fmt.Sprintf("CRON_TZ or TZ used in %s is not officially supported, see https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/ for more details", field.NewPath("spec", "spec", "schedule"))) + } + return warnings } // Canonicalize normalizes the object after validation. @@ -147,6 +153,9 @@ func (cronJobStrategy) WarningsOnUpdate(ctx context.Context, obj, old runtime.Ob if newCronJob.Generation != oldCronJob.Generation { warnings = pod.GetWarningsForPodTemplate(ctx, field.NewPath("spec", "jobTemplate", "spec", "template"), &newCronJob.Spec.JobTemplate.Spec.Template, &oldCronJob.Spec.JobTemplate.Spec.Template) } + if strings.Contains(newCronJob.Spec.Schedule, "TZ") { + warnings = append(warnings, fmt.Sprintf("CRON_TZ or TZ used in %s is not officially supported, see https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/ for more details", field.NewPath("spec", "spec", "schedule"))) + } return warnings } diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go b/vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go index ead032b608..88c8c421f2 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go @@ -280,8 +280,10 @@ func addAllEventHandlers( case *v1.Pod: return assignedPod(t) case cache.DeletedFinalStateUnknown: - if pod, ok := t.Obj.(*v1.Pod); ok { - return assignedPod(pod) + if _, ok := t.Obj.(*v1.Pod); ok { + // The carried object may be stale, so we don't use it to check if + // it's assigned or not. Attempting to cleanup anyways. + return true } utilruntime.HandleError(fmt.Errorf("unable to convert object %T to *v1.Pod in %T", obj, sched)) return false @@ -306,7 +308,9 @@ func addAllEventHandlers( return !assignedPod(t) && responsibleForPod(t, sched.Profiles) case cache.DeletedFinalStateUnknown: if pod, ok := t.Obj.(*v1.Pod); ok { - return !assignedPod(pod) && responsibleForPod(pod, sched.Profiles) + // The carried object may be stale, so we don't use it to check if + // it's assigned or not. + return responsibleForPod(pod, sched.Profiles) } utilruntime.HandleError(fmt.Errorf("unable to convert object %T to *v1.Pod in %T", obj, sched)) return false diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread/plugin.go b/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread/plugin.go index 5ce2420d49..31eb457fc4 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread/plugin.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread/plugin.go @@ -53,6 +53,7 @@ var systemDefaultConstraints = []v1.TopologySpreadConstraint{ // PodTopologySpread is a plugin that ensures pod's topologySpreadConstraints is satisfied. type PodTopologySpread struct { + systemDefaulted bool parallelizer parallelize.Parallelizer defaultConstraints []v1.TopologySpreadConstraint sharedLister framework.SharedLister @@ -97,6 +98,7 @@ func New(plArgs runtime.Object, h framework.Handle) (framework.Plugin, error) { } if args.DefaultingType == config.SystemDefaulting { pl.defaultConstraints = systemDefaultConstraints + pl.systemDefaulted = true } if len(pl.defaultConstraints) != 0 { if h.SharedInformerFactory() == nil { diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go b/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go index f1b9ff7e6a..5bc938f028 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go @@ -56,7 +56,7 @@ func (s *preScoreState) Clone() framework.StateData { // 1) s.TopologyPairToPodCounts: keyed with both eligible topology pair and node names. // 2) s.IgnoredNodes: the set of nodes that shouldn't be scored. // 3) s.TopologyNormalizingWeight: The weight to be given to each constraint based on the number of values in a topology. -func (pl *PodTopologySpread) initPreScoreState(s *preScoreState, pod *v1.Pod, filteredNodes []*v1.Node) error { +func (pl *PodTopologySpread) initPreScoreState(s *preScoreState, pod *v1.Pod, filteredNodes []*v1.Node, requireAllTopologies bool) error { var err error if len(pod.Spec.TopologySpreadConstraints) > 0 { s.Constraints, err = filterTopologySpreadConstraints(pod.Spec.TopologySpreadConstraints, v1.ScheduleAnyway) @@ -74,7 +74,7 @@ func (pl *PodTopologySpread) initPreScoreState(s *preScoreState, pod *v1.Pod, fi } topoSize := make([]int, len(s.Constraints)) for _, node := range filteredNodes { - if !nodeLabelsMatchSpreadConstraints(node.Labels, s.Constraints) { + if requireAllTopologies && !nodeLabelsMatchSpreadConstraints(node.Labels, s.Constraints) { // Nodes which don't have all required topologyKeys present are ignored // when scoring later. s.IgnoredNodes.Insert(node.Name) @@ -125,7 +125,11 @@ func (pl *PodTopologySpread) PreScore( IgnoredNodes: sets.NewString(), TopologyPairToPodCounts: make(map[topologyPair]*int64), } - err = pl.initPreScoreState(state, pod, filteredNodes) + // Only require that nodes have all the topology labels if using + // non-system-default spreading rules. This allows nodes that don't have a + // zone label to still have hostname spreading. + requireAllTopologies := len(pod.Spec.TopologySpreadConstraints) > 0 || !pl.systemDefaulted + err = pl.initPreScoreState(state, pod, filteredNodes, requireAllTopologies) if err != nil { return framework.AsStatus(fmt.Errorf("calculating preScoreState: %w", err)) } @@ -147,7 +151,7 @@ func (pl *PodTopologySpread) PreScore( // (1) `node` should satisfy incoming pod's NodeSelector/NodeAffinity // (2) All topologyKeys need to be present in `node` match, _ := requiredNodeAffinity.Match(node) - if !match || !nodeLabelsMatchSpreadConstraints(node.Labels, state.Constraints) { + if !match || (requireAllTopologies && !nodeLabelsMatchSpreadConstraints(node.Labels, state.Constraints)) { return } diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/cache.go b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/cache.go index 119f50a8b3..6c125d08d7 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/cache.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/cache/cache.go @@ -537,22 +537,19 @@ func (cache *schedulerCache) RemovePod(pod *v1.Pod) error { currState, ok := cache.podStates[key] switch { - // An assumed pod won't have Delete/Remove event. It needs to have Add event - // before Remove event, in which case the state would change from Assumed to Added. - case ok && !cache.assumedPods.Has(key): + case ok: if currState.pod.Spec.NodeName != pod.Spec.NodeName { klog.Errorf("Pod %v was assumed to be on %v but got added to %v", key, pod.Spec.NodeName, currState.pod.Spec.NodeName) - klog.Fatalf("Schedulercache is corrupted and can badly affect scheduling decisions") + if pod.Spec.NodeName != "" { + // An empty NodeName is possible when the scheduler misses a Delete + // event and it gets the last known state from the informer cache. + klog.Fatalf("Schedulercache is corrupted and can badly affect scheduling decisions") + } } - err := cache.removePod(currState.pod) - if err != nil { - return err - } - delete(cache.podStates, key) + return cache.expirePod(key, currState) default: return fmt.Errorf("pod %v is not found in scheduler cache, so cannot be removed from it", key) } - return nil } func (cache *schedulerCache) IsAssumedPod(pod *v1.Pod) (bool, error) { diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/scheduler.go b/vendor/k8s.io/kubernetes/pkg/scheduler/scheduler.go index 29f5a30863..099d07e152 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/scheduler.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/scheduler.go @@ -61,6 +61,9 @@ const ( SchedulerError = "SchedulerError" // Percentage of plugin metrics to be sampled. pluginMetricsSamplePercent = 10 + // Duration the scheduler will wait before expiring an assumed pod. + // See issue #106361 for more details about this parameter and its value. + durationToExpireAssumedPod = 2 * time.Minute ) // Scheduler watches for new unscheduled pods. It attempts to find @@ -239,7 +242,7 @@ func New(client clientset.Interface, } options.profiles = cfg.Profiles } - schedulerCache := internalcache.New(30*time.Second, stopEverything) + schedulerCache := internalcache.New(durationToExpireAssumedPod, stopEverything) registry := frameworkplugins.NewInTreeRegistry() if err := registry.Merge(options.frameworkOutOfTreeRegistry); err != nil { diff --git a/vendor/k8s.io/legacy-cloud-providers/azure/azure_vmss.go b/vendor/k8s.io/legacy-cloud-providers/azure/azure_vmss.go index 2e7a48a9f3..0202443863 100644 --- a/vendor/k8s.io/legacy-cloud-providers/azure/azure_vmss.go +++ b/vendor/k8s.io/legacy-cloud-providers/azure/azure_vmss.go @@ -1491,11 +1491,11 @@ func (ss *scaleSet) ensureBackendPoolDeletedFromVMSS(service *v1.Service, backen // When vmss is being deleted, CreateOrUpdate API would report "the vmss is being deleted" error. // Since it is being deleted, we shouldn't send more CreateOrUpdate requests for it. if vmss.ProvisioningState != nil && strings.EqualFold(*vmss.ProvisioningState, virtualMachineScaleSetsDeallocating) { - klog.V(3).Infof("ensureVMSSInPool: found vmss %s being deleted, skipping", vmssName) + klog.V(3).Infof("ensureBackendPoolDeletedFromVMSS: found vmss %s being deleted, skipping", vmssName) continue } if vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations == nil { - klog.V(4).Infof("EnsureHostInPool: cannot obtain the primary network interface configuration, of vmss %s", vmssName) + klog.V(4).Infof("ensureBackendPoolDeletedFromVMSS: cannot obtain the primary network interface configuration, of vmss %s", vmssName) continue } vmssNIC := *vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations @@ -1614,6 +1614,11 @@ func (ss *scaleSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, continue } + if errors.Is(err, cloudprovider.InstanceNotFound) { + klog.Infof("EnsureBackendPoolDeleted(%s): skipping ip config %s because the corresponding vmss vm is not found", getServiceName(service), ipConfigurationID) + continue + } + klog.Errorf("Failed to GetNodeNameByIPConfigurationID(%s): %v", ipConfigurationID, err) allErrs = append(allErrs, err) continue diff --git a/vendor/k8s.io/mount-utils/mount_linux.go b/vendor/k8s.io/mount-utils/mount_linux.go index 7097eae087..8e5fa81a0e 100644 --- a/vendor/k8s.io/mount-utils/mount_linux.go +++ b/vendor/k8s.io/mount-utils/mount_linux.go @@ -45,6 +45,8 @@ const ( fsckErrorsCorrected = 1 // 'fsck' found errors but exited without correcting them fsckErrorsUncorrected = 4 + // Error thrown by exec cmd.Run() when process spawned by cmd.Start() completes before cmd.Wait() is called (see - k/k issue #103753) + errNoChildProcesses = "wait: no child processes" ) // Mounter provides the default implementation of mount.Interface @@ -181,6 +183,14 @@ func (mounter *Mounter) doMount(mounterPath string, mountCmd string, source stri command := exec.Command(mountCmd, mountArgs...) output, err := command.CombinedOutput() if err != nil { + if err.Error() == errNoChildProcesses { + if command.ProcessState.Success() { + // We don't consider errNoChildProcesses an error if the process itself succeeded (see - k/k issue #103753). + return nil + } + // Rewrite err with the actual exit error of the process. + err = &exec.ExitError{ProcessState: command.ProcessState} + } klog.Errorf("Mount failed: %v\nMounting command: %s\nMounting arguments: %s\nOutput: %s\n", err, mountCmd, mountArgsLogStr, string(output)) return fmt.Errorf("mount failed: %v\nMounting command: %s\nMounting arguments: %s\nOutput: %s", err, mountCmd, mountArgsLogStr, string(output)) @@ -284,6 +294,14 @@ func (mounter *Mounter) Unmount(target string) error { command := exec.Command("umount", target) output, err := command.CombinedOutput() if err != nil { + if err.Error() == errNoChildProcesses { + if command.ProcessState.Success() { + // We don't consider errNoChildProcesses an error if the process itself succeeded (see - k/k issue #103753). + return nil + } + // Rewrite err with the actual exit error of the process. + err = &exec.ExitError{ProcessState: command.ProcessState} + } return fmt.Errorf("unmount failed: %v\nUnmounting arguments: %s\nOutput: %s", err, target, string(output)) } return nil diff --git a/vendor/modules.txt b/vendor/modules.txt index a535632131..0b9db3547a 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1386,7 +1386,7 @@ golang.org/x/crypto/scrypt # golang.org/x/mod v0.4.2 golang.org/x/mod/module golang.org/x/mod/semver -# golang.org/x/net v0.0.0-20211005215030-d2e5035098b3 => golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 +# golang.org/x/net v0.0.0-20211209124913-491a49abca63 => golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 ## explicit golang.org/x/net/bpf golang.org/x/net/context @@ -1653,7 +1653,7 @@ gopkg.in/yaml.v3 # inet.af/tcpproxy v0.0.0-20200125044825-b6bb9b5b8252 ## explicit inet.af/tcpproxy -# k8s.io/api v0.22.4 => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.22.4-k3s1 +# k8s.io/api v0.22.5 => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.22.5-k3s1 ## explicit k8s.io/api/admission/v1 k8s.io/api/admission/v1beta1 @@ -1701,7 +1701,7 @@ k8s.io/api/scheduling/v1beta1 k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 -# k8s.io/apiextensions-apiserver v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.22.4-k3s1 +# k8s.io/apiextensions-apiserver v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.22.5-k3s1 k8s.io/apiextensions-apiserver/pkg/apihelpers k8s.io/apiextensions-apiserver/pkg/apis/apiextensions k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install @@ -1741,7 +1741,7 @@ k8s.io/apiextensions-apiserver/pkg/generated/openapi k8s.io/apiextensions-apiserver/pkg/registry/customresource k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition -# k8s.io/apimachinery v0.22.4 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.22.4-k3s1 +# k8s.io/apimachinery v0.22.5 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.22.5-k3s1 ## explicit k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/errors @@ -1806,7 +1806,7 @@ k8s.io/apimachinery/pkg/watch k8s.io/apimachinery/third_party/forked/golang/json k8s.io/apimachinery/third_party/forked/golang/netutil k8s.io/apimachinery/third_party/forked/golang/reflect -# k8s.io/apiserver v0.22.4 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.22.4-k3s1 +# k8s.io/apiserver v0.22.5 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.22.5-k3s1 ## explicit k8s.io/apiserver/pkg/admission k8s.io/apiserver/pkg/admission/configuration @@ -1948,11 +1948,11 @@ k8s.io/apiserver/plugin/pkg/audit/webhook k8s.io/apiserver/plugin/pkg/authenticator/token/oidc k8s.io/apiserver/plugin/pkg/authenticator/token/webhook k8s.io/apiserver/plugin/pkg/authorizer/webhook -# k8s.io/cli-runtime v0.17.2 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.22.4-k3s1 +# k8s.io/cli-runtime v0.17.2 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.22.5-k3s1 k8s.io/cli-runtime/pkg/genericclioptions k8s.io/cli-runtime/pkg/printers k8s.io/cli-runtime/pkg/resource -# k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.22.4-k3s1 +# k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.22.5-k3s1 ## explicit k8s.io/client-go/applyconfigurations/admissionregistration/v1 k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1 @@ -2244,7 +2244,7 @@ k8s.io/client-go/util/jsonpath k8s.io/client-go/util/keyutil k8s.io/client-go/util/retry k8s.io/client-go/util/workqueue -# k8s.io/cloud-provider v0.22.4 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.22.4-k3s1 +# k8s.io/cloud-provider v0.22.5 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.22.5-k3s1 ## explicit k8s.io/cloud-provider k8s.io/cloud-provider/api @@ -2266,13 +2266,13 @@ k8s.io/cloud-provider/service/helpers k8s.io/cloud-provider/volume k8s.io/cloud-provider/volume/errors k8s.io/cloud-provider/volume/helpers -# k8s.io/cluster-bootstrap v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.22.4-k3s1 +# k8s.io/cluster-bootstrap v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.22.5-k3s1 k8s.io/cluster-bootstrap/token/api k8s.io/cluster-bootstrap/token/jws k8s.io/cluster-bootstrap/token/util k8s.io/cluster-bootstrap/util/secrets k8s.io/cluster-bootstrap/util/tokens -# k8s.io/code-generator v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.22.4-k3s1 +# k8s.io/code-generator v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.22.5-k3s1 k8s.io/code-generator/cmd/client-gen/args k8s.io/code-generator/cmd/client-gen/generators k8s.io/code-generator/cmd/client-gen/generators/fake @@ -2287,7 +2287,7 @@ k8s.io/code-generator/cmd/lister-gen/args k8s.io/code-generator/cmd/lister-gen/generators k8s.io/code-generator/pkg/namer k8s.io/code-generator/pkg/util -# k8s.io/component-base v0.22.4 => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.22.4-k3s1 +# k8s.io/component-base v0.22.5 => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.22.5-k3s1 ## explicit k8s.io/component-base/cli/flag k8s.io/component-base/cli/globalflag @@ -2313,7 +2313,7 @@ k8s.io/component-base/term k8s.io/component-base/traces k8s.io/component-base/version k8s.io/component-base/version/verflag -# k8s.io/component-helpers v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.22.4-k3s1 +# k8s.io/component-helpers v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.22.5-k3s1 k8s.io/component-helpers/apimachinery/lease k8s.io/component-helpers/apps/poddisruptionbudget k8s.io/component-helpers/auth/rbac/reconciliation @@ -2322,7 +2322,7 @@ k8s.io/component-helpers/node/topology k8s.io/component-helpers/scheduling/corev1 k8s.io/component-helpers/scheduling/corev1/nodeaffinity k8s.io/component-helpers/storage/volume -# k8s.io/controller-manager v0.22.4 => github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.22.4-k3s1 +# k8s.io/controller-manager v0.22.5 => github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.22.5-k3s1 ## explicit k8s.io/controller-manager/app k8s.io/controller-manager/config @@ -2336,11 +2336,11 @@ k8s.io/controller-manager/pkg/informerfactory k8s.io/controller-manager/pkg/leadermigration k8s.io/controller-manager/pkg/leadermigration/config k8s.io/controller-manager/pkg/leadermigration/options -# k8s.io/cri-api v0.22.4 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.22.4-k3s1 +# k8s.io/cri-api v0.22.5 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.22.5-k3s1 ## explicit k8s.io/cri-api/pkg/apis k8s.io/cri-api/pkg/apis/runtime/v1alpha2 -# k8s.io/csi-translation-lib v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.22.4-k3s1 +# k8s.io/csi-translation-lib v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.22.5-k3s1 k8s.io/csi-translation-lib k8s.io/csi-translation-lib/plugins # k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027 @@ -2357,7 +2357,7 @@ k8s.io/klog # k8s.io/klog/v2 v2.9.0 => github.com/k3s-io/klog/v2 v2.9.0-k3s2 ## explicit k8s.io/klog/v2 -# k8s.io/kube-aggregator v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.22.4-k3s1 +# k8s.io/kube-aggregator v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.22.5-k3s1 k8s.io/kube-aggregator/pkg/apis/apiregistration k8s.io/kube-aggregator/pkg/apis/apiregistration/install k8s.io/kube-aggregator/pkg/apis/apiregistration/v1 @@ -2385,7 +2385,7 @@ k8s.io/kube-aggregator/pkg/controllers/status k8s.io/kube-aggregator/pkg/registry/apiservice k8s.io/kube-aggregator/pkg/registry/apiservice/etcd k8s.io/kube-aggregator/pkg/registry/apiservice/rest -# k8s.io/kube-controller-manager v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.22.4-k3s1 +# k8s.io/kube-controller-manager v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.22.5-k3s1 k8s.io/kube-controller-manager/config/v1alpha1 # k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c k8s.io/kube-openapi/pkg/aggregator @@ -2401,14 +2401,14 @@ k8s.io/kube-openapi/pkg/validation/spec k8s.io/kube-openapi/pkg/validation/strfmt k8s.io/kube-openapi/pkg/validation/strfmt/bson k8s.io/kube-openapi/pkg/validation/validate -# k8s.io/kube-proxy v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.22.4-k3s1 +# k8s.io/kube-proxy v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.22.5-k3s1 k8s.io/kube-proxy/config/v1alpha1 -# k8s.io/kube-scheduler v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.22.4-k3s1 +# k8s.io/kube-scheduler v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.22.5-k3s1 k8s.io/kube-scheduler/config/v1 k8s.io/kube-scheduler/config/v1beta1 k8s.io/kube-scheduler/config/v1beta2 k8s.io/kube-scheduler/extender/v1 -# k8s.io/kubectl v0.22.4 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.22.4-k3s1 +# k8s.io/kubectl v0.22.5 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.22.5-k3s1 ## explicit k8s.io/kubectl/pkg/apps k8s.io/kubectl/pkg/cmd @@ -2486,7 +2486,7 @@ k8s.io/kubectl/pkg/util/storage k8s.io/kubectl/pkg/util/templates k8s.io/kubectl/pkg/util/term k8s.io/kubectl/pkg/validation -# k8s.io/kubelet v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.22.4-k3s1 +# k8s.io/kubelet v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.22.5-k3s1 k8s.io/kubelet/config/v1alpha1 k8s.io/kubelet/config/v1beta1 k8s.io/kubelet/pkg/apis @@ -2498,7 +2498,7 @@ k8s.io/kubelet/pkg/apis/pluginregistration/v1 k8s.io/kubelet/pkg/apis/podresources/v1 k8s.io/kubelet/pkg/apis/podresources/v1alpha1 k8s.io/kubelet/pkg/apis/stats/v1alpha1 -# k8s.io/kubernetes v1.22.4 => github.com/k3s-io/kubernetes v1.22.4-k3s1 +# k8s.io/kubernetes v1.22.5 => github.com/k3s-io/kubernetes v1.22.5-k3s1 ## explicit k8s.io/kubernetes/cmd/kube-apiserver/app k8s.io/kubernetes/cmd/kube-apiserver/app/options @@ -3230,7 +3230,7 @@ k8s.io/kubernetes/third_party/forked/gonum/graph k8s.io/kubernetes/third_party/forked/gonum/graph/internal/linear k8s.io/kubernetes/third_party/forked/gonum/graph/simple k8s.io/kubernetes/third_party/forked/gonum/graph/traverse -# k8s.io/legacy-cloud-providers v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.22.4-k3s1 +# k8s.io/legacy-cloud-providers v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.22.5-k3s1 k8s.io/legacy-cloud-providers/aws k8s.io/legacy-cloud-providers/azure k8s.io/legacy-cloud-providers/azure/auth @@ -3273,7 +3273,7 @@ k8s.io/legacy-cloud-providers/openstack k8s.io/legacy-cloud-providers/vsphere k8s.io/legacy-cloud-providers/vsphere/vclib k8s.io/legacy-cloud-providers/vsphere/vclib/diskmanagers -# k8s.io/metrics v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.22.4-k3s1 +# k8s.io/metrics v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.22.5-k3s1 k8s.io/metrics/pkg/apis/custom_metrics k8s.io/metrics/pkg/apis/custom_metrics/v1beta1 k8s.io/metrics/pkg/apis/custom_metrics/v1beta2 @@ -3289,9 +3289,9 @@ k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1 k8s.io/metrics/pkg/client/custom_metrics k8s.io/metrics/pkg/client/custom_metrics/scheme k8s.io/metrics/pkg/client/external_metrics -# k8s.io/mount-utils v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.22.4-k3s1 +# k8s.io/mount-utils v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.22.5-k3s1 k8s.io/mount-utils -# k8s.io/pod-security-admission v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/pod-security-admission v1.22.4-k3s1 +# k8s.io/pod-security-admission v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/pod-security-admission v1.22.5-k3s1 k8s.io/pod-security-admission/admission k8s.io/pod-security-admission/admission/api k8s.io/pod-security-admission/admission/api/load @@ -3447,35 +3447,35 @@ sigs.k8s.io/yaml # google.golang.org/genproto => google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63 # google.golang.org/grpc => google.golang.org/grpc v1.38.0 # gopkg.in/square/go-jose.v2 => gopkg.in/square/go-jose.v2 v2.2.2 -# k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.22.4-k3s1 -# k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.22.4-k3s1 -# k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.22.4-k3s1 -# k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.22.4-k3s1 -# k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.22.4-k3s1 -# k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.22.4-k3s1 -# k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.22.4-k3s1 -# k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.22.4-k3s1 -# k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.22.4-k3s1 -# k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.22.4-k3s1 -# k8s.io/component-helpers => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.22.4-k3s1 -# k8s.io/controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.22.4-k3s1 -# k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.22.4-k3s1 -# k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.22.4-k3s1 +# k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.22.5-k3s1 +# k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.22.5-k3s1 +# k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.22.5-k3s1 +# k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.22.5-k3s1 +# k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.22.5-k3s1 +# k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.22.5-k3s1 +# k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.22.5-k3s1 +# k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.22.5-k3s1 +# k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.22.5-k3s1 +# k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.22.5-k3s1 +# k8s.io/component-helpers => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-helpers v1.22.5-k3s1 +# k8s.io/controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/controller-manager v1.22.5-k3s1 +# k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.22.5-k3s1 +# k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.22.5-k3s1 # k8s.io/klog => github.com/k3s-io/klog v1.0.0-k3s2 # k8s.io/klog/v2 => github.com/k3s-io/klog/v2 v2.9.0-k3s2 -# k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.22.4-k3s1 -# k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.22.4-k3s1 -# k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.22.4-k3s1 -# k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.22.4-k3s1 -# k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.22.4-k3s1 -# k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.22.4-k3s1 -# k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.22.4-k3s1 -# k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.22.4-k3s1 -# k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.22.4-k3s1 -# k8s.io/mount-utils => github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.22.4-k3s1 -# k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.22.4-k3s1 -# k8s.io/pod-security-admission => github.com/k3s-io/kubernetes/staging/src/k8s.io/pod-security-admission v1.22.4-k3s1 -# k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.22.4-k3s1 -# k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.22.4-k3s1 -# k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.22.4-k3s1 +# k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.22.5-k3s1 +# k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.22.5-k3s1 +# k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.22.5-k3s1 +# k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.22.5-k3s1 +# k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.22.5-k3s1 +# k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.22.5-k3s1 +# k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.22.5-k3s1 +# k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.22.5-k3s1 +# k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.22.5-k3s1 +# k8s.io/mount-utils => github.com/k3s-io/kubernetes/staging/src/k8s.io/mount-utils v1.22.5-k3s1 +# k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.22.5-k3s1 +# k8s.io/pod-security-admission => github.com/k3s-io/kubernetes/staging/src/k8s.io/pod-security-admission v1.22.5-k3s1 +# k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.22.5-k3s1 +# k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.22.5-k3s1 +# k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.22.5-k3s1 # mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7