Unverified Commit e698d6d8 authored by Manuel Buil's avatar Manuel Buil Committed by GitHub

Merge pull request #4031 from manuelbuil/v1.19.15-k3s1

Update Kubernetes to v1.19.15
parents f7234579 63b90a0f
ARG GOLANG=golang:1.15.14-alpine3.13 ARG GOLANG=golang:1.15.15-alpine3.13
FROM ${GOLANG} FROM ${GOLANG}
COPY --from=plugins/manifest:1.2.3 /bin/* /bin/ COPY --from=plugins/manifest:1.2.3 /bin/* /bin/
......
...@@ -37,31 +37,31 @@ replace ( ...@@ -37,31 +37,31 @@ replace (
google.golang.org/genproto => google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63 google.golang.org/genproto => google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63
google.golang.org/grpc => google.golang.org/grpc v1.27.1 google.golang.org/grpc => google.golang.org/grpc v1.27.1
gopkg.in/square/go-jose.v2 => gopkg.in/square/go-jose.v2 v2.2.2 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.19.14-k3s1 k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.19.15-k3s1
k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.19.14-k3s1 k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.19.15-k3s1
k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.19.14-k3s1 k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.19.15-k3s1
k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.19.14-k3s1 k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.19.15-k3s1
k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.19.14-k3s1 k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.19.15-k3s1
k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.19.14-k3s1 k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.19.15-k3s1
k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.19.14-k3s1 k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.19.15-k3s1
k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.19.14-k3s1 k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.19.15-k3s1
k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.19.14-k3s1 k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.19.15-k3s1
k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.19.14-k3s1 k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.19.15-k3s1
k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.19.14-k3s1 k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.19.15-k3s1
k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.19.14-k3s1 k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.19.15-k3s1
k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.19.14-k3s1 k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.19.15-k3s1
k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.19.14-k3s1 k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.19.15-k3s1
k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.19.14-k3s1 k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.19.15-k3s1
k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.19.14-k3s1 k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.19.15-k3s1
k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.19.14-k3s1 k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.19.15-k3s1
k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.19.14-k3s1 k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.19.15-k3s1
k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.19.14-k3s1 k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.19.15-k3s1
k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.19.14-k3s1 k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.19.15-k3s1
k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.19.14-k3s1 k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.19.15-k3s1
k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.19.14-k3s1 k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.19.15-k3s1
k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.19.14-k3s1 k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.19.15-k3s1
k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.19.14-k3s1 k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.19.15-k3s1
k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.19.14-k3s1 k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.19.15-k3s1
mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34 mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34
) )
...@@ -114,15 +114,15 @@ require ( ...@@ -114,15 +114,15 @@ require (
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887 golang.org/x/sys v0.0.0-20210426230700-d19ff857e887
google.golang.org/grpc v1.33.2 google.golang.org/grpc v1.33.2
gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.19.14 k8s.io/api v0.19.15
k8s.io/apimachinery v0.19.14 k8s.io/apimachinery v0.19.15
k8s.io/apiserver v0.19.14 k8s.io/apiserver v0.19.15
k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible
k8s.io/cloud-provider v0.19.14 k8s.io/cloud-provider v0.19.15
k8s.io/component-base v0.19.14 k8s.io/component-base v0.19.15
k8s.io/cri-api v0.20.1 k8s.io/cri-api v0.20.1
k8s.io/klog v1.0.0 k8s.io/klog v1.0.0
k8s.io/kubernetes v1.19.14 k8s.io/kubernetes v1.19.15
k8s.io/utils v0.0.0-20200729134348-d5654de09c73 k8s.io/utils v0.0.0-20200729134348-d5654de09c73
sigs.k8s.io/yaml v1.2.0 sigs.k8s.io/yaml v1.2.0
) )
...@@ -474,49 +474,49 @@ github.com/k3s-io/helm-controller v0.10.5 h1:zrStmx4ZkhtFU/OqJYoAZFGFB1Bu+jZs0N8 ...@@ -474,49 +474,49 @@ github.com/k3s-io/helm-controller v0.10.5 h1:zrStmx4ZkhtFU/OqJYoAZFGFB1Bu+jZs0N8
github.com/k3s-io/helm-controller v0.10.5/go.mod h1:nZP8FH3KZrNNUf5r+SwwiMR63HS6lxdHdpHijgPfF74= github.com/k3s-io/helm-controller v0.10.5/go.mod h1:nZP8FH3KZrNNUf5r+SwwiMR63HS6lxdHdpHijgPfF74=
github.com/k3s-io/kine v0.6.2 h1:1aJTPfB8HG4exqMKFVE5H0z4bepF05tJHtYNXotWXa4= github.com/k3s-io/kine v0.6.2 h1:1aJTPfB8HG4exqMKFVE5H0z4bepF05tJHtYNXotWXa4=
github.com/k3s-io/kine v0.6.2/go.mod h1:rzCs93+rQHZGOiewMd84PDrER92QeZ6eeHbWkfEy4+w= github.com/k3s-io/kine v0.6.2/go.mod h1:rzCs93+rQHZGOiewMd84PDrER92QeZ6eeHbWkfEy4+w=
github.com/k3s-io/kubernetes v1.19.14-k3s1 h1:IYKkk2cU/pCYZBswOgKk50Q/C2hpGrzpIBhXn24JIk4= github.com/k3s-io/kubernetes v1.19.15-k3s1 h1:A1RJfAmS3JinAk0s9TJD5W82wnuuLMC8P88UZutZPQE=
github.com/k3s-io/kubernetes v1.19.14-k3s1/go.mod h1:HD/Q62CbvekHttYG9YffbrTHx54dkZCnF7t3oJCzxOA= github.com/k3s-io/kubernetes v1.19.15-k3s1/go.mod h1:HD/Q62CbvekHttYG9YffbrTHx54dkZCnF7t3oJCzxOA=
github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.19.14-k3s1 h1:pSpU5Cph3rrTIvUix7NlNJyKdqppxvohvOr0uvfKkxo= github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.19.15-k3s1 h1:jDAamlpMbWBKgr7RBCYLEyUFjXFxehzrvuEoHxzXwDw=
github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.19.14-k3s1/go.mod h1:UcjwtWbtWvJiBBYsrqZFSZyK9yfDQvyyOaitZREMNNI= github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.19.15-k3s1/go.mod h1:UcjwtWbtWvJiBBYsrqZFSZyK9yfDQvyyOaitZREMNNI=
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.19.14-k3s1 h1:wphB8uRtreViE6Q+n2G1lNFLZr/MeLsKQ49za+84CTw= github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.19.15-k3s1 h1:HLTzkYFQf56sB9nAXm6+cjcS5hFcifxGa+eZf4Qi7sk=
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.19.14-k3s1/go.mod h1:WgS2vy/M8pNm2Ym++3tDRbJprDEFUJ/eqkzdSHS5j+8= github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.19.15-k3s1/go.mod h1:WgS2vy/M8pNm2Ym++3tDRbJprDEFUJ/eqkzdSHS5j+8=
github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.19.14-k3s1 h1:4I5u0sZFjMOIl2Az57ObfZKb1m8kVesQh/gNk7S8uE8= github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.19.15-k3s1 h1:Y7gTGV8XcjnLlznxO6EZLU1f3neqr4gm69kTFPu1tI0=
github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.19.14-k3s1/go.mod h1:sr8wM2JwYaIf+oYmE1Iv8YztGo79Kd52yrmWlisz0cw= github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.19.15-k3s1/go.mod h1:sr8wM2JwYaIf+oYmE1Iv8YztGo79Kd52yrmWlisz0cw=
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.19.14-k3s1 h1:gGyDeVciwPGyDD/PQ11pGvV+VCrNJa/nbPu9lO9sQGs= github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.19.15-k3s1 h1:cmUfZmlLjMztUJ0txBklhM96xaGQYZ3vagKKo3Ql8+U=
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.19.14-k3s1/go.mod h1:RGWpAhYP+eF18BA1b7/Gf2l/NFnlhVMrUgo3wdKNZW0= github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.19.15-k3s1/go.mod h1:RGWpAhYP+eF18BA1b7/Gf2l/NFnlhVMrUgo3wdKNZW0=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.19.14-k3s1 h1:2zy69nVtMaGYSkhMKtR7rryyi71gXxdIZTWxugtjpQU= github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.19.15-k3s1 h1:c9VAPTWK+E4fGuKtvBTmbPzEkIgoN6LAX8LNP4wb160=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.19.14-k3s1/go.mod h1:twd45pbv7psOvyGxI8eABhpeoXWW3bCX6aB5NVS6TXs= github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.19.15-k3s1/go.mod h1:twd45pbv7psOvyGxI8eABhpeoXWW3bCX6aB5NVS6TXs=
github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.19.14-k3s1 h1:w2bEdvh0CTS5jcxGysrZzu1JxP4Y9DYyJr8jlOq0wjM= github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.19.15-k3s1 h1:VbD6msu2nceRQj5jwRKWSv3lD0j2MTchgFpi+1lMvWA=
github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.19.14-k3s1/go.mod h1:mFyJ7Q7VaffgOf2fBYWE3u6tI6ORgNH3y86VrIPy++Y= github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.19.15-k3s1/go.mod h1:mFyJ7Q7VaffgOf2fBYWE3u6tI6ORgNH3y86VrIPy++Y=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.19.14-k3s1 h1:NRcK+z66TZZWH62fNHs7eYnzTVYkpjFQpTzO81YFDIY= github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.19.15-k3s1 h1:fX5/q0XvcWY1ZPox96YP/BwrAgX6sJi4CLkD6W+93i4=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.19.14-k3s1/go.mod h1:vXBe7m69RSxIR/m6bm820O+WYUJHP9OXtEyTZf3twRo= github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.19.15-k3s1/go.mod h1:vXBe7m69RSxIR/m6bm820O+WYUJHP9OXtEyTZf3twRo=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.19.14-k3s1 h1:bpsogmj1Xp7mzNfbEHWWCMlyk7Kwv16+XERcjBDLDDk= github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.19.15-k3s1 h1:BzxNh45impklUwhmwABqPzwKYrizCMrCzQRqNpWDF+o=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.19.14-k3s1/go.mod h1:kEUR4nHaGTacDcHrY2P4IriUdykXxPuwBg7picxa+gk= github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.19.15-k3s1/go.mod h1:kEUR4nHaGTacDcHrY2P4IriUdykXxPuwBg7picxa+gk=
github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.19.14-k3s1 h1:OkVlCTzM8WkOwaqj75OuyoeWQJIwAV+hr5BlLq6bvoA= github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.19.15-k3s1 h1:Z+bMLSOZX2j/qmZzwNmk/jpGBWLa/VXrOi1l+sKqRL0=
github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.19.14-k3s1/go.mod h1:ybBf1oAbFmYzk+mZE78A7W5GStT+ypahDaWnjlHrkGQ= github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.19.15-k3s1/go.mod h1:ybBf1oAbFmYzk+mZE78A7W5GStT+ypahDaWnjlHrkGQ=
github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.19.14-k3s1 h1:iJdHD5rNDPmDq539DbjsBoA/NhUevSK7bd3J4OWFWSA= github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.19.15-k3s1 h1:fmLp/ilzl3Q8tvEaDiAfucTemoROm5Vs+gC+eBRqeJE=
github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.19.14-k3s1/go.mod h1:jR+bJp7erYNUmcS7lWDm404aFVonltWE56LV8CuqKyg= github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.19.15-k3s1/go.mod h1:jR+bJp7erYNUmcS7lWDm404aFVonltWE56LV8CuqKyg=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.19.14-k3s1 h1:6rN1gDU1v23YThBzmO2VEfFuSLepuPigoJuQHQaWJ/c= github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.19.15-k3s1 h1:5FaRGDTx8/43s3v/hV50fFhAvHPEtngAvLQd3Gi42e0=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.19.14-k3s1/go.mod h1:u/3V4xqf6jIp7eOZRZwzmiXUsRTt+XoKjivv6O9gZAg= github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.19.15-k3s1/go.mod h1:u/3V4xqf6jIp7eOZRZwzmiXUsRTt+XoKjivv6O9gZAg=
github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.19.14-k3s1 h1:E0Unz1trLmYVXzGaTXOiojQtv15UmiBfyn4cdybYATg= github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.19.15-k3s1 h1:0BOk679c/h92w7QngNerhBDnKPyAmBEkVjkjuFTqWzY=
github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.19.14-k3s1/go.mod h1:adA9bBHXD+K7tPn7kTpjQ3VcUzK6PFgAdNEofr4fEx4= github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.19.15-k3s1/go.mod h1:adA9bBHXD+K7tPn7kTpjQ3VcUzK6PFgAdNEofr4fEx4=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.19.14-k3s1 h1:V6+GY1TmH2rojZcoACmxVq8hpaNFdqINwHcoTzP2Lis= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.19.15-k3s1 h1:7s9aSG9b64nHxiitUmDBEk9wPL9Zxn3rDDUCb0cMMzY=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.19.14-k3s1/go.mod h1:s5+c+ujL0WM82kzxP4CedFV+vn31pD7WJRM9+GYTk7Q= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.19.15-k3s1/go.mod h1:s5+c+ujL0WM82kzxP4CedFV+vn31pD7WJRM9+GYTk7Q=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.19.14-k3s1 h1:cFgcCU5Ed0mZtJzczrlYoEbDOi1qA8hWWeXhvsiju4Q= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.19.15-k3s1 h1:BcUSzO87JBF9fFTQv0UnwrBfI4q/lMLJXLiavz4OtIc=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.19.14-k3s1/go.mod h1:6CzB8GMVD+ZlCXZjHiqccHpC9FFlRTCz+rHd176Lxfc= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.19.15-k3s1/go.mod h1:6CzB8GMVD+ZlCXZjHiqccHpC9FFlRTCz+rHd176Lxfc=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.19.14-k3s1 h1:MK9S7n9VfKJwjDXJp4gij8vsS10aKMQ0MFKHDuNafN0= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.19.15-k3s1 h1:wBcdViVubLJyErTuCMpBg/2cg8KRUwGTxdrLiW6yVcY=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.19.14-k3s1/go.mod h1:PWMBqO9xuXWJS8REJ8QWiouJzbiOwVVVT81ZTwYb2Nk= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.19.15-k3s1/go.mod h1:PWMBqO9xuXWJS8REJ8QWiouJzbiOwVVVT81ZTwYb2Nk=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.19.14-k3s1 h1:lVGoWoutcKGHAylGtw6y+hQvSOI9PDkblH3Xs/94j5k= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.19.15-k3s1 h1:Z1n1V9UyrUQc0F4foxuFl5l/5+CpdRCwBgw1mAfQV6c=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.19.14-k3s1/go.mod h1:23iT4D9thFRxYGZ9DOa7zQ4ZyrFHyp+Bz5dXiruHNwI= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.19.15-k3s1/go.mod h1:23iT4D9thFRxYGZ9DOa7zQ4ZyrFHyp+Bz5dXiruHNwI=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.19.14-k3s1 h1:bMctmTDxNI72jlGkPQ+uHAGuuWgR38p/76ehbcB3m4k= github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.19.15-k3s1 h1:aMtyY2q3TH+tpxrlqhVfZVN2D1/9su/p5pAZuk+u8iE=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.19.14-k3s1/go.mod h1:UBqQ69FVXyP8Wpzo+Ni5LUZhwjzJCPSb+6eG8naeDKM= github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.19.15-k3s1/go.mod h1:UBqQ69FVXyP8Wpzo+Ni5LUZhwjzJCPSb+6eG8naeDKM=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.19.14-k3s1 h1:lW6BiNdCj/FfoQEzz2IvyTTw/QbET5J/ZwTq/tvv7nQ= github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.19.15-k3s1 h1:e4pXeqg7F2lsrFwq9u70gKCEumsBQiRDSUGl85B5jrQ=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.19.14-k3s1/go.mod h1:fuR1PhKU79SVjnVW43hQGrj6FKfNEZQ3iFU0IZCYFbY= github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.19.15-k3s1/go.mod h1:fuR1PhKU79SVjnVW43hQGrj6FKfNEZQ3iFU0IZCYFbY=
github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.19.14-k3s1 h1:4FgV31lIpovr9kbDXR/XZCK7hj1LOnbtC+O9YLWKk/o= github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.19.15-k3s1 h1:6EA6qFhHwrXvhR+1OqeoAyjGpvm3+U76Sx4VRKLq/yM=
github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.19.14-k3s1/go.mod h1:iv4u51XYDkRdyvp7BBP+KuQ+ZHjEjoCECFVzMJBDGZA= github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.19.15-k3s1/go.mod h1:iv4u51XYDkRdyvp7BBP+KuQ+ZHjEjoCECFVzMJBDGZA=
github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.19.14-k3s1 h1:yvonvYGtSGermz88yT/1iUl3Dvcfco9yNS1IMAXShl8= github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.19.15-k3s1 h1:Qn054HXGQqwktMGLdnmXZfKnZqpJ+jfTCYbav21HwGU=
github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.19.14-k3s1/go.mod h1:6b8BmSxdcCMv3dXmS5BWv5biBmAX9BLmylPttQ0T+iM= github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.19.15-k3s1/go.mod h1:6b8BmSxdcCMv3dXmS5BWv5biBmAX9BLmylPttQ0T+iM=
github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.19.14-k3s1/go.mod h1:tl3x2SPSVsIqnioD4z87jXFemilbRh1EYDm3KirMsjI= github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.19.15-k3s1/go.mod h1:tl3x2SPSVsIqnioD4z87jXFemilbRh1EYDm3KirMsjI=
github.com/karrick/godirwalk v1.7.5 h1:VbzFqwXwNbAZoA6W5odrLr+hKK197CcENcPh6E/gJ0M= github.com/karrick/godirwalk v1.7.5 h1:VbzFqwXwNbAZoA6W5odrLr+hKK197CcENcPh6E/gJ0M=
github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
......
Copyright (c) 2009 The Go Authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Additional IP Rights Grant (Patents)
"This implementation" means the copyrightable works distributed by
Google as part of the Go project.
Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go. This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation. If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.
...@@ -45,6 +45,9 @@ func (s *DeprecatedInsecureServingInfo) Serve(handler http.Handler, shutdownTime ...@@ -45,6 +45,9 @@ func (s *DeprecatedInsecureServingInfo) Serve(handler http.Handler, shutdownTime
Addr: s.Listener.Addr().String(), Addr: s.Listener.Addr().String(),
Handler: handler, Handler: handler,
MaxHeaderBytes: 1 << 20, MaxHeaderBytes: 1 << 20,
IdleTimeout: 90 * time.Second, // matches http.DefaultTransport keep-alive timeout
ReadHeaderTimeout: 32 * time.Second, // just shy of requestTimeoutUpperBound
} }
if len(s.Name) > 0 { if len(s.Name) > 0 {
......
...@@ -159,6 +159,9 @@ func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Dur ...@@ -159,6 +159,9 @@ func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Dur
Handler: handler, Handler: handler,
MaxHeaderBytes: 1 << 20, MaxHeaderBytes: 1 << 20,
TLSConfig: tlsConfig, TLSConfig: tlsConfig,
IdleTimeout: 90 * time.Second, // matches http.DefaultTransport keep-alive timeout
ReadHeaderTimeout: 32 * time.Second, // just shy of requestTimeoutUpperBound
} }
// At least 99% of serialized resources in surveyed clusters were smaller than 256kb. // At least 99% of serialized resources in surveyed clusters were smaller than 256kb.
...@@ -166,7 +169,9 @@ func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Dur ...@@ -166,7 +169,9 @@ func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Dur
// and small enough to allow a per connection buffer of this size multiplied by `MaxConcurrentStreams`. // and small enough to allow a per connection buffer of this size multiplied by `MaxConcurrentStreams`.
const resourceBody99Percentile = 256 * 1024 const resourceBody99Percentile = 256 * 1024
http2Options := &http2.Server{} http2Options := &http2.Server{
IdleTimeout: 90 * time.Second, // matches http.DefaultTransport keep-alive timeout
}
// shrink the per-stream buffer and max framesize from the 1MB default while still accommodating most API POST requests in a single frame // shrink the per-stream buffer and max framesize from the 1MB default while still accommodating most API POST requests in a single frame
http2Options.MaxUploadBufferPerStream = resourceBody99Percentile http2Options.MaxUploadBufferPerStream = resourceBody99Percentile
......
...@@ -3,8 +3,8 @@ package version ...@@ -3,8 +3,8 @@ package version
var ( var (
gitMajor = "1" gitMajor = "1"
gitMinor = "19" gitMinor = "19"
gitVersion = "v1.19.14-k3s1" gitVersion = "v1.19.15-k3s1"
gitCommit = "de864bbd93b6636951750854c6be3a9b07aa1fac" gitCommit = "a14bf227db31db89a172864ca2a934ff1c637eef"
gitTreeState = "clean" gitTreeState = "clean"
buildDate = "2021-08-12T22:23:54Z" buildDate = "2021-09-16T15:13:53Z"
) )
Copyright (c) 2009 The Go Authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Additional IP Rights Grant (Patents)
"This implementation" means the copyrightable works distributed by
Google as part of the Go project.
Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go. This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation. If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.
...@@ -3,8 +3,8 @@ package version ...@@ -3,8 +3,8 @@ package version
var ( var (
gitMajor = "1" gitMajor = "1"
gitMinor = "19" gitMinor = "19"
gitVersion = "v1.19.14-k3s1" gitVersion = "v1.19.15-k3s1"
gitCommit = "de864bbd93b6636951750854c6be3a9b07aa1fac" gitCommit = "a14bf227db31db89a172864ca2a934ff1c637eef"
gitTreeState = "clean" gitTreeState = "clean"
buildDate = "2021-08-12T22:23:54Z" buildDate = "2021-09-16T15:13:53Z"
) )
...@@ -9,7 +9,6 @@ go_library( ...@@ -9,7 +9,6 @@ go_library(
"//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/server:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/informers/core/v1:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library",
"//staging/src/k8s.io/client-go/tools/events:go_default_library", "//staging/src/k8s.io/client-go/tools/events:go_default_library",
......
...@@ -19,7 +19,6 @@ package config ...@@ -19,7 +19,6 @@ package config
import ( import (
apiserver "k8s.io/apiserver/pkg/server" apiserver "k8s.io/apiserver/pkg/server"
"k8s.io/client-go/informers" "k8s.io/client-go/informers"
coreinformers "k8s.io/client-go/informers/core/v1"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest" restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/events" "k8s.io/client-go/tools/events"
...@@ -43,7 +42,6 @@ type Config struct { ...@@ -43,7 +42,6 @@ type Config struct {
Client clientset.Interface Client clientset.Interface
InformerFactory informers.SharedInformerFactory InformerFactory informers.SharedInformerFactory
PodInformer coreinformers.PodInformer
//lint:ignore SA1019 this deprecated field still needs to be used for now. It will be removed once the migration is done. //lint:ignore SA1019 this deprecated field still needs to be used for now. It will be removed once the migration is done.
EventBroadcaster events.EventBroadcasterAdapter EventBroadcaster events.EventBroadcasterAdapter
......
...@@ -26,7 +26,6 @@ go_library( ...@@ -26,7 +26,6 @@ go_library(
"//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library",
"//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library",
......
...@@ -28,7 +28,6 @@ import ( ...@@ -28,7 +28,6 @@ import (
"k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apimachinery/pkg/util/uuid"
apiserveroptions "k8s.io/apiserver/pkg/server/options" apiserveroptions "k8s.io/apiserver/pkg/server/options"
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/informers"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest" restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/clientcmd"
...@@ -285,8 +284,7 @@ func (o *Options) Config() (*schedulerappconfig.Config, error) { ...@@ -285,8 +284,7 @@ func (o *Options) Config() (*schedulerappconfig.Config, error) {
} }
c.Client = client c.Client = client
c.InformerFactory = informers.NewSharedInformerFactory(client, 0) c.InformerFactory = scheduler.NewInformerFactory(client, 0)
c.PodInformer = scheduler.NewPodInformer(client, 0)
c.LeaderElection = leaderElectionConfig c.LeaderElection = leaderElectionConfig
return c, nil return c, nil
......
...@@ -185,7 +185,6 @@ func Run(ctx context.Context, cc *schedulerserverconfig.CompletedConfig, sched * ...@@ -185,7 +185,6 @@ func Run(ctx context.Context, cc *schedulerserverconfig.CompletedConfig, sched *
} }
// Start all informers. // Start all informers.
go cc.PodInformer.Informer().Run(ctx.Done())
cc.InformerFactory.Start(ctx.Done()) cc.InformerFactory.Start(ctx.Done())
// Wait for all caches to sync before scheduling. // Wait for all caches to sync before scheduling.
...@@ -316,7 +315,6 @@ func Setup(ctx context.Context, opts *options.Options, outOfTreeRegistryOptions ...@@ -316,7 +315,6 @@ func Setup(ctx context.Context, opts *options.Options, outOfTreeRegistryOptions
// Create the scheduler. // Create the scheduler.
sched, err := scheduler.New(cc.Client, sched, err := scheduler.New(cc.Client,
cc.InformerFactory, cc.InformerFactory,
cc.PodInformer,
recorderFactory, recorderFactory,
ctx.Done(), ctx.Done(),
scheduler.WithProfiles(cc.ComponentConfig.Profiles...), scheduler.WithProfiles(cc.ComponentConfig.Profiles...),
......
...@@ -359,7 +359,8 @@ func UnsecuredDependencies(s *options.KubeletServer, featureGate featuregate.Fea ...@@ -359,7 +359,8 @@ func UnsecuredDependencies(s *options.KubeletServer, featureGate featuregate.Fea
} }
mounter := mount.New(s.ExperimentalMounterPath) mounter := mount.New(s.ExperimentalMounterPath)
subpather := subpath.New(mounter) subpatherMounter := subpath.NewMounter(mounter, s.ExperimentalMounterPath)
subpather := subpath.New(subpatherMounter)
hu := hostutil.NewHostUtil() hu := hostutil.NewHostUtil()
var pluginRunner = exec.New() var pluginRunner = exec.New()
......
...@@ -460,7 +460,8 @@ func (jm *Controller) syncJob(key string) (bool, error) { ...@@ -460,7 +460,8 @@ func (jm *Controller) syncJob(key string) (bool, error) {
} }
return false, err return false, err
} }
job := *sharedJob // make a copy so we don't mutate the shared cache
job := *sharedJob.DeepCopy()
// if job was finished previously, we don't want to redo the termination // if job was finished previously, we don't want to redo the termination
if IsJobFinished(&job) { if IsJobFinished(&job) {
......
...@@ -41,7 +41,7 @@ var ( ...@@ -41,7 +41,7 @@ var (
Subsystem: VolumeSchedulerSubsystem, Subsystem: VolumeSchedulerSubsystem,
Name: "scheduling_duration_seconds", Name: "scheduling_duration_seconds",
Help: "Volume scheduling stage latency (Deprecated since 1.19.0)", Help: "Volume scheduling stage latency (Deprecated since 1.19.0)",
Buckets: metrics.ExponentialBuckets(1000, 2, 15), Buckets: metrics.ExponentialBuckets(0.001, 2, 15),
StabilityLevel: metrics.ALPHA, StabilityLevel: metrics.ALPHA,
DeprecatedVersion: "1.19.0", DeprecatedVersion: "1.19.0",
}, },
......
...@@ -154,6 +154,7 @@ func ListenAndServeKubeletServer( ...@@ -154,6 +154,7 @@ func ListenAndServeKubeletServer(
s := &http.Server{ s := &http.Server{
Addr: net.JoinHostPort(address.String(), strconv.FormatUint(uint64(port), 10)), Addr: net.JoinHostPort(address.String(), strconv.FormatUint(uint64(port), 10)),
Handler: &handler, Handler: &handler,
IdleTimeout: 90 * time.Second, // matches http.DefaultTransport keep-alive timeout
ReadTimeout: 4 * 60 * time.Minute, ReadTimeout: 4 * 60 * time.Minute,
WriteTimeout: 4 * 60 * time.Minute, WriteTimeout: 4 * 60 * time.Minute,
MaxHeaderBytes: 1 << 20, MaxHeaderBytes: 1 << 20,
...@@ -177,6 +178,9 @@ func ListenAndServeKubeletReadOnlyServer(host HostInterface, resourceAnalyzer st ...@@ -177,6 +178,9 @@ func ListenAndServeKubeletReadOnlyServer(host HostInterface, resourceAnalyzer st
server := &http.Server{ server := &http.Server{
Addr: net.JoinHostPort(address.String(), strconv.FormatUint(uint64(port), 10)), Addr: net.JoinHostPort(address.String(), strconv.FormatUint(uint64(port), 10)),
Handler: &s, Handler: &s,
IdleTimeout: 90 * time.Second, // matches http.DefaultTransport keep-alive timeout
ReadTimeout: 4 * 60 * time.Minute,
WriteTimeout: 4 * 60 * time.Minute,
MaxHeaderBytes: 1 << 20, MaxHeaderBytes: 1 << 20,
} }
klog.Fatal(server.ListenAndServe()) klog.Fatal(server.ListenAndServe())
......
...@@ -35,7 +35,6 @@ go_library( ...@@ -35,7 +35,6 @@ go_library(
"//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
......
...@@ -27,7 +27,6 @@ import ( ...@@ -27,7 +27,6 @@ import (
utilruntime "k8s.io/apimachinery/pkg/util/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime"
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/informers" "k8s.io/client-go/informers"
coreinformers "k8s.io/client-go/informers/core/v1"
"k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/cache"
"k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/scheduler/internal/queue" "k8s.io/kubernetes/pkg/scheduler/internal/queue"
...@@ -362,10 +361,9 @@ func (sched *Scheduler) skipPodUpdate(pod *v1.Pod) bool { ...@@ -362,10 +361,9 @@ func (sched *Scheduler) skipPodUpdate(pod *v1.Pod) bool {
func addAllEventHandlers( func addAllEventHandlers(
sched *Scheduler, sched *Scheduler,
informerFactory informers.SharedInformerFactory, informerFactory informers.SharedInformerFactory,
podInformer coreinformers.PodInformer,
) { ) {
// scheduled pod cache // scheduled pod cache
podInformer.Informer().AddEventHandler( informerFactory.Core().V1().Pods().Informer().AddEventHandler(
cache.FilteringResourceEventHandler{ cache.FilteringResourceEventHandler{
FilterFunc: func(obj interface{}) bool { FilterFunc: func(obj interface{}) bool {
switch t := obj.(type) { switch t := obj.(type) {
...@@ -390,7 +388,7 @@ func addAllEventHandlers( ...@@ -390,7 +388,7 @@ func addAllEventHandlers(
}, },
) )
// unscheduled pod queue // unscheduled pod queue
podInformer.Informer().AddEventHandler( informerFactory.Core().V1().Pods().Informer().AddEventHandler(
cache.FilteringResourceEventHandler{ cache.FilteringResourceEventHandler{
FilterFunc: func(obj interface{}) bool { FilterFunc: func(obj interface{}) bool {
switch t := obj.(type) { switch t := obj.(type) {
......
...@@ -27,14 +27,11 @@ import ( ...@@ -27,14 +27,11 @@ import (
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors" apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"k8s.io/client-go/informers" "k8s.io/client-go/informers"
coreinformers "k8s.io/client-go/informers/core/v1"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
corelisters "k8s.io/client-go/listers/core/v1" corelisters "k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/tools/cache"
"k8s.io/klog/v2" "k8s.io/klog/v2"
"k8s.io/kubernetes/pkg/scheduler/algorithmprovider" "k8s.io/kubernetes/pkg/scheduler/algorithmprovider"
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
...@@ -67,8 +64,6 @@ type Configurator struct { ...@@ -67,8 +64,6 @@ type Configurator struct {
informerFactory informers.SharedInformerFactory informerFactory informers.SharedInformerFactory
podInformer coreinformers.PodInformer
// Close this to stop all reflectors // Close this to stop all reflectors
StopEverything <-chan struct{} StopEverything <-chan struct{}
...@@ -179,7 +174,7 @@ func (c *Configurator) create() (*Scheduler, error) { ...@@ -179,7 +174,7 @@ func (c *Configurator) create() (*Scheduler, error) {
// Setup cache debugger. // Setup cache debugger.
debugger := cachedebugger.New( debugger := cachedebugger.New(
c.informerFactory.Core().V1().Nodes().Lister(), c.informerFactory.Core().V1().Nodes().Lister(),
c.podInformer.Lister(), c.informerFactory.Core().V1().Pods().Lister(),
c.schedulerCache, c.schedulerCache,
podQueue, podQueue,
) )
...@@ -416,29 +411,6 @@ func getPredicateConfigs(keys sets.String, lr *frameworkplugins.LegacyRegistry, ...@@ -416,29 +411,6 @@ func getPredicateConfigs(keys sets.String, lr *frameworkplugins.LegacyRegistry,
return &plugins, pluginConfig, nil return &plugins, pluginConfig, nil
} }
type podInformer struct {
informer cache.SharedIndexInformer
}
func (i *podInformer) Informer() cache.SharedIndexInformer {
return i.informer
}
func (i *podInformer) Lister() corelisters.PodLister {
return corelisters.NewPodLister(i.informer.GetIndexer())
}
// NewPodInformer creates a shared index informer that returns only non-terminal pods.
func NewPodInformer(client clientset.Interface, resyncPeriod time.Duration) coreinformers.PodInformer {
selector := fields.ParseSelectorOrDie(
"status.phase!=" + string(v1.PodSucceeded) +
",status.phase!=" + string(v1.PodFailed))
lw := cache.NewListWatchFromClient(client.CoreV1().RESTClient(), string(v1.ResourcePods), metav1.NamespaceAll, selector)
return &podInformer{
informer: cache.NewSharedIndexInformer(lw, &v1.Pod{}, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}),
}
}
// MakeDefaultErrorFunc construct a function to handle pod scheduler error // MakeDefaultErrorFunc construct a function to handle pod scheduler error
func MakeDefaultErrorFunc(client clientset.Interface, podLister corelisters.PodLister, podQueue internalqueue.SchedulingQueue, schedulerCache internalcache.Cache) func(*framework.QueuedPodInfo, error) { func MakeDefaultErrorFunc(client clientset.Interface, podLister corelisters.PodLister, podQueue internalqueue.SchedulingQueue, schedulerCache internalcache.Cache) func(*framework.QueuedPodInfo, error) {
return func(podInfo *framework.QueuedPodInfo, err error) { return func(podInfo *framework.QueuedPodInfo, err error) {
......
...@@ -84,8 +84,6 @@ type Scheduler struct { ...@@ -84,8 +84,6 @@ type Scheduler struct {
// Profiles are the scheduling profiles. // Profiles are the scheduling profiles.
Profiles profile.Map Profiles profile.Map
scheduledPodsHasSynced func() bool
client clientset.Interface client clientset.Interface
} }
...@@ -186,7 +184,6 @@ var defaultSchedulerOptions = schedulerOptions{ ...@@ -186,7 +184,6 @@ var defaultSchedulerOptions = schedulerOptions{
// New returns a Scheduler // New returns a Scheduler
func New(client clientset.Interface, func New(client clientset.Interface,
informerFactory informers.SharedInformerFactory, informerFactory informers.SharedInformerFactory,
podInformer coreinformers.PodInformer,
recorderFactory profile.RecorderFactory, recorderFactory profile.RecorderFactory,
stopCh <-chan struct{}, stopCh <-chan struct{},
opts ...Option) (*Scheduler, error) { opts ...Option) (*Scheduler, error) {
...@@ -214,7 +211,6 @@ func New(client clientset.Interface, ...@@ -214,7 +211,6 @@ func New(client clientset.Interface,
client: client, client: client,
recorderFactory: recorderFactory, recorderFactory: recorderFactory,
informerFactory: informerFactory, informerFactory: informerFactory,
podInformer: podInformer,
schedulerCache: schedulerCache, schedulerCache: schedulerCache,
StopEverything: stopEverything, StopEverything: stopEverything,
percentageOfNodesToScore: options.percentageOfNodesToScore, percentageOfNodesToScore: options.percentageOfNodesToScore,
...@@ -267,9 +263,8 @@ func New(client clientset.Interface, ...@@ -267,9 +263,8 @@ func New(client clientset.Interface,
// Additional tweaks to the config produced by the configurator. // Additional tweaks to the config produced by the configurator.
sched.StopEverything = stopEverything sched.StopEverything = stopEverything
sched.client = client sched.client = client
sched.scheduledPodsHasSynced = podInformer.Informer().HasSynced
addAllEventHandlers(sched, informerFactory, podInformer) addAllEventHandlers(sched, informerFactory)
return sched, nil return sched, nil
} }
...@@ -311,9 +306,6 @@ func initPolicyFromConfigMap(client clientset.Interface, policyRef *schedulerapi ...@@ -311,9 +306,6 @@ func initPolicyFromConfigMap(client clientset.Interface, policyRef *schedulerapi
// Run begins watching and scheduling. It waits for cache to be synced, then starts scheduling and blocked until the context is done. // Run begins watching and scheduling. It waits for cache to be synced, then starts scheduling and blocked until the context is done.
func (sched *Scheduler) Run(ctx context.Context) { func (sched *Scheduler) Run(ctx context.Context) {
if !cache.WaitForCacheSync(ctx.Done(), sched.scheduledPodsHasSynced) {
return
}
sched.SchedulingQueue.Run() sched.SchedulingQueue.Run()
wait.UntilWithContext(ctx, sched.scheduleOne, 0) wait.UntilWithContext(ctx, sched.scheduleOne, 0)
sched.SchedulingQueue.Close() sched.SchedulingQueue.Close()
...@@ -658,3 +650,20 @@ func defaultAlgorithmSourceProviderName() *string { ...@@ -658,3 +650,20 @@ func defaultAlgorithmSourceProviderName() *string {
provider := schedulerapi.SchedulerDefaultProviderName provider := schedulerapi.SchedulerDefaultProviderName
return &provider return &provider
} }
// NewInformerFactory creates a SharedInformerFactory and initializes a scheduler specific
// in-place podInformer.
func NewInformerFactory(cs clientset.Interface, resyncPeriod time.Duration) informers.SharedInformerFactory {
informerFactory := informers.NewSharedInformerFactory(cs, resyncPeriod)
informerFactory.InformerFor(&v1.Pod{}, newPodInformer)
return informerFactory
}
// newPodInformer creates a shared index informer that returns only non-terminal pods.
func newPodInformer(cs clientset.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
selector := fmt.Sprintf("status.phase!=%v,status.phase!=%v", v1.PodSucceeded, v1.PodFailed)
tweakListOptions := func(options *metav1.ListOptions) {
options.FieldSelector = selector
}
return coreinformers.NewFilteredPodInformer(cs, metav1.NamespaceAll, resyncPeriod, nil, tweakListOptions)
}
...@@ -4,76 +4,68 @@ go_library( ...@@ -4,76 +4,68 @@ go_library(
name = "go_default_library", name = "go_default_library",
srcs = [ srcs = [
"subpath.go", "subpath.go",
"subpath_fake_mounter.go",
"subpath_linux.go", "subpath_linux.go",
"subpath_mount.go",
"subpath_mount_linux.go",
"subpath_mount_unsupported.go",
"subpath_mount_windows.go",
"subpath_unsupported.go", "subpath_unsupported.go",
"subpath_windows.go", "subpath_windows.go",
], ],
importpath = "k8s.io/kubernetes/pkg/volume/util/subpath", importpath = "k8s.io/kubernetes/pkg/volume/util/subpath",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = select({ deps = [
"@io_bazel_rules_go//go/platform:aix": [
"//vendor/k8s.io/utils/mount:go_default_library", "//vendor/k8s.io/utils/mount:go_default_library",
] + select({
"@io_bazel_rules_go//go/platform:aix": [
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:android": [ "@io_bazel_rules_go//go/platform:android": [
"//pkg/volume/util/hostutil:go_default_library", "//pkg/volume/util/hostutil:go_default_library",
"//vendor/golang.org/x/sys/unix:go_default_library", "//vendor/golang.org/x/sys/unix:go_default_library",
"//vendor/k8s.io/klog/v2:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library",
"//vendor/k8s.io/utils/mount:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:darwin": [ "@io_bazel_rules_go//go/platform:darwin": [
"//vendor/k8s.io/utils/mount:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:dragonfly": [ "@io_bazel_rules_go//go/platform:dragonfly": [
"//vendor/k8s.io/utils/mount:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:freebsd": [ "@io_bazel_rules_go//go/platform:freebsd": [
"//vendor/k8s.io/utils/mount:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:illumos": [ "@io_bazel_rules_go//go/platform:illumos": [
"//vendor/k8s.io/utils/mount:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:ios": [ "@io_bazel_rules_go//go/platform:ios": [
"//vendor/k8s.io/utils/mount:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:js": [ "@io_bazel_rules_go//go/platform:js": [
"//vendor/k8s.io/utils/mount:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:linux": [ "@io_bazel_rules_go//go/platform:linux": [
"//pkg/volume/util/hostutil:go_default_library", "//pkg/volume/util/hostutil:go_default_library",
"//vendor/golang.org/x/sys/unix:go_default_library", "//vendor/golang.org/x/sys/unix:go_default_library",
"//vendor/k8s.io/klog/v2:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library",
"//vendor/k8s.io/utils/mount:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:nacl": [ "@io_bazel_rules_go//go/platform:nacl": [
"//vendor/k8s.io/utils/mount:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:netbsd": [ "@io_bazel_rules_go//go/platform:netbsd": [
"//vendor/k8s.io/utils/mount:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:openbsd": [ "@io_bazel_rules_go//go/platform:openbsd": [
"//vendor/k8s.io/utils/mount:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:plan9": [ "@io_bazel_rules_go//go/platform:plan9": [
"//vendor/k8s.io/utils/mount:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:solaris": [ "@io_bazel_rules_go//go/platform:solaris": [
"//vendor/k8s.io/utils/mount:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:windows": [ "@io_bazel_rules_go//go/platform:windows": [
"//vendor/k8s.io/klog/v2:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library",
"//vendor/k8s.io/utils/mount:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"//conditions:default": [], "//conditions:default": [],
......
/*
Copyright 2021 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 subpath
import (
mountutils "k8s.io/utils/mount"
)
// FakeMounter implements MountInterface for tests.
type FakeMounter struct {
*mountutils.FakeMounter
}
var _ MountInterface = &FakeMounter{}
// NewFakeMounter returns a FakeMounter struct that implements Interface and is
// suitable for testing purposes.
func NewFakeMounter(mps []mountutils.MountPoint) *FakeMounter {
return &FakeMounter{
FakeMounter: &mountutils.FakeMounter{
MountPoints: mps,
},
}
}
// MountSensitiveWithFlags records the mount event and updates the in-memory mount points for FakeMounter
// sensitiveOptions to be passed in a separate parameter from the normal
// mount options and ensures the sensitiveOptions are never logged. This
// method should be used by callers that pass sensitive material (like
// passwords) as mount options.
func (f *FakeMounter) MountSensitiveWithFlags(source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string) error {
return f.MountSensitive(source, target, fstype, options, sensitiveOptions)
}
...@@ -44,11 +44,11 @@ const ( ...@@ -44,11 +44,11 @@ const (
) )
type subpath struct { type subpath struct {
mounter mount.Interface mounter MountInterface
} }
// New returns a subpath.Interface for the current system // New returns a subpath.Interface for the current system
func New(mounter mount.Interface) Interface { func New(mounter MountInterface) Interface {
return &subpath{ return &subpath{
mounter: mounter, mounter: mounter,
} }
...@@ -160,7 +160,7 @@ func getSubpathBindTarget(subpath Subpath) string { ...@@ -160,7 +160,7 @@ func getSubpathBindTarget(subpath Subpath) string {
return filepath.Join(subpath.PodDir, containerSubPathDirectoryName, subpath.VolumeName, subpath.ContainerName, strconv.Itoa(subpath.VolumeMountIndex)) return filepath.Join(subpath.PodDir, containerSubPathDirectoryName, subpath.VolumeName, subpath.ContainerName, strconv.Itoa(subpath.VolumeMountIndex))
} }
func doBindSubPath(mounter mount.Interface, subpath Subpath) (hostPath string, err error) { func doBindSubPath(mounter MountInterface, subpath Subpath) (hostPath string, err error) {
// Linux, kubelet runs on the host: // Linux, kubelet runs on the host:
// - safely open the subpath // - safely open the subpath
// - bind-mount /proc/<pid of kubelet>/fd/<fd> to subpath target // - bind-mount /proc/<pid of kubelet>/fd/<fd> to subpath target
...@@ -209,8 +209,9 @@ func doBindSubPath(mounter mount.Interface, subpath Subpath) (hostPath string, e ...@@ -209,8 +209,9 @@ func doBindSubPath(mounter mount.Interface, subpath Subpath) (hostPath string, e
// Do the bind mount // Do the bind mount
options := []string{"bind"} options := []string{"bind"}
mountFlags := []string{"--no-canonicalize"}
klog.V(5).Infof("bind mounting %q at %q", mountSource, bindPathTarget) klog.V(5).Infof("bind mounting %q at %q", mountSource, bindPathTarget)
if err = mounter.Mount(mountSource, bindPathTarget, "" /*fstype*/, options); err != nil { if err = mounter.MountSensitiveWithFlags(mountSource, bindPathTarget, "" /*fstype*/, options, nil /* sensitiveOptions */, mountFlags); err != nil {
return "", fmt.Errorf("error mounting %s: %s", subpath.Path, err) return "", fmt.Errorf("error mounting %s: %s", subpath.Path, err)
} }
success = true success = true
......
/*
Copyright 2021 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.
*/
// TODO(thockin): This whole pkg is pretty linux-centric. As soon as we have
// an alternate platform, we will need to abstract further.
package subpath
import (
"k8s.io/utils/mount"
)
// MountInterface defines the set of methods to allow for mount operations on a system.
type MountInterface interface {
mount.Interface
// MountSensitiveWithFlags is the same as MountSensitive() with additional mount flags
MountSensitiveWithFlags(source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string) error
}
// Compile-time check to ensure all Mounter implementations satisfy
// the mount interface.
var _ MountInterface = &Mounter{}
// +build linux
/*
Copyright 2021 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 subpath
import (
"fmt"
"os/exec"
"strings"
"k8s.io/klog/v2"
mountutils "k8s.io/utils/mount"
)
const (
// Default mount command if mounter path is not specified.
defaultMountCommand = "mount"
// Log message where sensitive mount options were removed
sensitiveOptionsRemoved = "<masked>"
)
// Mounter provides the subpath implementation of mount.Interface
// for the linux platform. This implementation assumes that the
// kubelet is running in the host's root mount namespace.
type Mounter struct {
mountutils.Interface
mounterPath string
withSystemd bool
}
// NewMounter returns a MountInterface for the current system.
// It provides options to override the default mounter behavior.
// mounterPath allows using an alternative to `/bin/mount` for mounting.
func NewMounter(mounter mountutils.Interface, mounterPath string) MountInterface {
return &Mounter{
Interface: mounter,
mounterPath: mounterPath,
withSystemd: detectSystemd(),
}
}
// MountSensitiveWithFlags is the same as MountSensitive() with additional mount flags
func (mounter *Mounter) MountSensitiveWithFlags(source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string) error {
// Path to mounter binary if containerized mounter is needed. Otherwise, it is set to empty.
// All Linux distros are expected to be shipped with a mount utility that a support bind mounts.
mounterPath := ""
bind, bindOpts, bindRemountOpts, bindRemountOptsSensitive := mountutils.MakeBindOptsSensitive(options, sensitiveOptions)
if bind {
err := mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindOpts, bindRemountOptsSensitive, mountFlags)
if err != nil {
return err
}
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindRemountOpts, bindRemountOptsSensitive, mountFlags)
}
// The list of filesystems that require containerized mounter on GCI image cluster
fsTypesNeedMounter := map[string]struct{}{
"nfs": {},
"glusterfs": {},
"ceph": {},
"cifs": {},
}
if _, ok := fsTypesNeedMounter[fstype]; ok {
mounterPath = mounter.mounterPath
}
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, options, sensitiveOptions, mountFlags)
}
// doMount runs the mount command. mounterPath is the path to mounter binary if containerized mounter is used.
// sensitiveOptions is an extension of options except they will not be logged (because they may contain sensitive material)
// mountFlags are additional flags used in the mount command that are not related with fstype and mount options
func (mounter *Mounter) doMount(mounterPath string, mountCmd string, source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string) error {
mountArgs, mountArgsLogStr := makeMountArgsSensitiveWithMountFlags(source, target, fstype, options, sensitiveOptions, mountFlags)
if len(mounterPath) > 0 {
mountArgs = append([]string{mountCmd}, mountArgs...)
mountArgsLogStr = mountCmd + " " + mountArgsLogStr
mountCmd = mounterPath
}
if mounter.withSystemd {
// Try to run mount via systemd-run --scope. This will escape the
// service where kubelet runs and any fuse daemons will be started in a
// specific scope. kubelet service than can be restarted without killing
// these fuse daemons.
//
// Complete command line (when mounterPath is not used):
// systemd-run --description=... --scope -- mount -t <type> <what> <where>
//
// Expected flow:
// * systemd-run creates a transient scope (=~ cgroup) and executes its
// argument (/bin/mount) there.
// * mount does its job, forks a fuse daemon if necessary and finishes.
// (systemd-run --scope finishes at this point, returning mount's exit
// code and stdout/stderr - thats one of --scope benefits).
// * systemd keeps the fuse daemon running in the scope (i.e. in its own
// cgroup) until the fuse daemon dies (another --scope benefit).
// Kubelet service can be restarted and the fuse daemon survives.
// * When the fuse daemon dies (e.g. during unmount) systemd removes the
// scope automatically.
//
// systemd-mount is not used because it's too new for older distros
// (CentOS 7, Debian Jessie).
mountCmd, mountArgs, mountArgsLogStr = mountutils.AddSystemdScopeSensitive("systemd-run", target, mountCmd, mountArgs, mountArgsLogStr)
// } else {
// No systemd-run on the host (or we failed to check it), assume kubelet
// does not run as a systemd service.
// No code here, mountCmd and mountArgs are already populated.
}
// Logging with sensitive mount options removed.
klog.V(4).Infof("Mounting cmd (%s) with arguments (%s)", mountCmd, mountArgsLogStr)
command := exec.Command(mountCmd, mountArgs...)
output, err := command.CombinedOutput()
if err != nil {
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))
}
return err
}
// detectSystemd returns true if OS runs with systemd as init. When not sure
// (permission errors, ...), it returns false.
// There may be different ways how to detect systemd, this one makes sure that
// systemd-runs (needed by Mount()) works.
func detectSystemd() bool {
if _, err := exec.LookPath("systemd-run"); err != nil {
klog.V(2).Infof("Detected OS without systemd")
return false
}
// Try to run systemd-run --scope /bin/true, that should be enough
// to make sure that systemd is really running and not just installed,
// which happens when running in a container with a systemd-based image
// but with different pid 1.
cmd := exec.Command("systemd-run", "--description=Kubernetes systemd probe", "--scope", "true")
output, err := cmd.CombinedOutput()
if err != nil {
klog.V(2).Infof("Cannot run systemd-run, assuming non-systemd OS")
klog.V(4).Infof("systemd-run failed with: %v", err)
klog.V(4).Infof("systemd-run output: %s", string(output))
return false
}
klog.V(2).Infof("Detected OS with systemd")
return true
}
// makeMountArgsSensitiveWithMountFlags makes the arguments to the mount(8) command.
// sensitiveOptions is an extension of options except they will not be logged (because they may contain sensitive material)
// mountFlags are additional mount flags that are not related with the fstype and mount options
func makeMountArgsSensitiveWithMountFlags(source, target, fstype string, options []string, sensitiveOptions []string, mountFlags []string) (mountArgs []string, mountArgsLogStr string) {
// Build mount command as follows:
// mount [$mountFlags] [-t $fstype] [-o $options] [$source] $target
mountArgs = []string{}
mountArgsLogStr = ""
mountArgs = append(mountArgs, mountFlags...)
mountArgsLogStr += strings.Join(mountFlags, " ")
if len(fstype) > 0 {
mountArgs = append(mountArgs, "-t", fstype)
mountArgsLogStr += strings.Join(mountArgs, " ")
}
if len(options) > 0 || len(sensitiveOptions) > 0 {
combinedOptions := []string{}
combinedOptions = append(combinedOptions, options...)
combinedOptions = append(combinedOptions, sensitiveOptions...)
mountArgs = append(mountArgs, "-o", strings.Join(combinedOptions, ","))
// exclude sensitiveOptions from log string
mountArgsLogStr += " -o " + sanitizedOptionsForLogging(options, sensitiveOptions)
}
if len(source) > 0 {
mountArgs = append(mountArgs, source)
mountArgsLogStr += " " + source
}
mountArgs = append(mountArgs, target)
mountArgsLogStr += " " + target
return mountArgs, mountArgsLogStr
}
// sanitizedOptionsForLogging will return a comma separated string containing
// options and sensitiveOptions. Each entry in sensitiveOptions will be
// replaced with the string sensitiveOptionsRemoved
// e.g. o1,o2,<masked>,<masked>
func sanitizedOptionsForLogging(options []string, sensitiveOptions []string) string {
separator := ""
if len(options) > 0 && len(sensitiveOptions) > 0 {
separator = ","
}
sensitiveOptionsStart := ""
sensitiveOptionsEnd := ""
if len(sensitiveOptions) > 0 {
sensitiveOptionsStart = strings.Repeat(sensitiveOptionsRemoved+",", len(sensitiveOptions)-1)
sensitiveOptionsEnd = sensitiveOptionsRemoved
}
return strings.Join(options, ",") +
separator +
sensitiveOptionsStart +
sensitiveOptionsEnd
}
// +build !linux,!windows
/*
Copyright 2021 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 subpath
import (
"errors"
"k8s.io/utils/mount"
)
// Mounter implements mount.Interface for unsupported platforms
type Mounter struct {
mount.Interface
mounterPath string
}
var errUtilsMountUnsupported = errors.New("utils/mount on this platform is not supported")
// NewMounter returns a MountInterface for the current system.
// It provides options to override the default mounter behavior.
// mounterPath allows using an alternative to `/bin/mount` for mounting.
func NewMounter(mounter mount.Interface, mounterPath string) MountInterface {
return &Mounter{
Interface: mounter,
mounterPath: mounterPath,
}
}
// MountSensitiveWithFlags is the same as MountSensitive() with additional mount flags
func (mounter *Mounter) MountSensitiveWithFlags(source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string) error {
return errUtilsMountUnsupported
}
// +build windows
/*
Copyright 2021 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 subpath
import (
"k8s.io/utils/mount"
)
// Mounter provides the subpath implementation of mount.Interface
// for the windows platform. This implementation assumes that the
// kubelet is running in the host's root mount namespace.
type Mounter struct {
mount.Interface
mounterPath string
}
// NewMounter returns a MountInterface for the current system.
// It provides options to override the default mounter behavior.
// mounterPath allows using an alternative to `/bin/mount` for mounting.
func NewMounter(mounter mount.Interface, mounterPath string) MountInterface {
return &Mounter{
Interface: mounter,
mounterPath: mounterPath,
}
}
// MountSensitiveWithFlags is the same as MountSensitive() with additional mount flags but
// because mountFlags are linux mount(8) flags this method is the same as MountSensitive() in Windows
func (mounter *Mounter) MountSensitiveWithFlags(source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string) error {
return mounter.MountSensitive(source, target, fstype, options, sensitiveOptions)
}
...@@ -277,7 +277,7 @@ func (plugin *vsphereVolumePlugin) NewDeviceUnmounter() (volume.DeviceUnmounter, ...@@ -277,7 +277,7 @@ func (plugin *vsphereVolumePlugin) NewDeviceUnmounter() (volume.DeviceUnmounter,
func (detacher *vsphereVMDKDetacher) Detach(volumeName string, nodeName types.NodeName) error { func (detacher *vsphereVMDKDetacher) Detach(volumeName string, nodeName types.NodeName) error {
volPath := getVolPathfromVolumeName(volumeName) volPath := getVolPathfromVolumeName(volumeName)
attached, err := detacher.vsphereVolumes.DiskIsAttached(volPath, nodeName) attached, newVolumePath, err := detacher.vsphereVolumes.DiskIsAttached(volPath, nodeName)
if err != nil { if err != nil {
// Log error and continue with detach // Log error and continue with detach
klog.Errorf( klog.Errorf(
...@@ -293,7 +293,7 @@ func (detacher *vsphereVMDKDetacher) Detach(volumeName string, nodeName types.No ...@@ -293,7 +293,7 @@ func (detacher *vsphereVMDKDetacher) Detach(volumeName string, nodeName types.No
attachdetachMutex.LockKey(string(nodeName)) attachdetachMutex.LockKey(string(nodeName))
defer attachdetachMutex.UnlockKey(string(nodeName)) defer attachdetachMutex.UnlockKey(string(nodeName))
if err := detacher.vsphereVolumes.DetachDisk(volPath, nodeName); err != nil { if err := detacher.vsphereVolumes.DetachDisk(newVolumePath, nodeName); err != nil {
klog.Errorf("Error detaching volume %q: %v", volPath, err) klog.Errorf("Error detaching volume %q: %v", volPath, err)
return err return err
} }
......
Copyright (c) 2012 The Go Authors. All rights reserved. Copyright (c) 2009 The Go Authors. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are modification, are permitted provided that the following conditions are
......
...@@ -20,6 +20,7 @@ package azure ...@@ -20,6 +20,7 @@ package azure
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"os" "os"
"strings" "strings"
...@@ -29,6 +30,8 @@ import ( ...@@ -29,6 +30,8 @@ import (
cloudprovider "k8s.io/cloud-provider" cloudprovider "k8s.io/cloud-provider"
"k8s.io/klog/v2" "k8s.io/klog/v2"
azcache "k8s.io/legacy-cloud-providers/azure/cache" azcache "k8s.io/legacy-cloud-providers/azure/cache"
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute"
) )
const ( const (
...@@ -233,10 +236,22 @@ func (az *Cloud) InstanceShutdownByProviderID(ctx context.Context, providerID st ...@@ -233,10 +236,22 @@ func (az *Cloud) InstanceShutdownByProviderID(ctx context.Context, providerID st
return false, err return false, err
} }
klog.V(5).Infof("InstanceShutdownByProviderID gets power status %q for node %q", powerStatus, nodeName) klog.V(3).Infof("InstanceShutdownByProviderID gets power status %q for node %q", powerStatus, nodeName)
provisioningState, err := az.VMSet.GetProvisioningStateByNodeName(string(nodeName))
if err != nil {
// Returns false, so the controller manager will continue to check InstanceExistsByProviderID().
if errors.Is(err, cloudprovider.InstanceNotFound) {
return false, nil
}
return false, err
}
klog.V(3).Infof("InstanceShutdownByProviderID gets provisioning state %q for node %q", provisioningState, nodeName)
status := strings.ToLower(powerStatus) status := strings.ToLower(powerStatus)
return status == vmPowerStateStopped || status == vmPowerStateDeallocated || status == vmPowerStateDeallocating, nil provisioningSucceeded := strings.EqualFold(strings.ToLower(provisioningState), strings.ToLower(string(compute.ProvisioningStateSucceeded)))
return provisioningSucceeded && (status == vmPowerStateStopped || status == vmPowerStateDeallocated || status == vmPowerStateDeallocating), nil
} }
func (az *Cloud) isCurrentInstance(name types.NodeName, metadataVMName string) (bool, error) { func (az *Cloud) isCurrentInstance(name types.NodeName, metadataVMName string) (bool, error) {
......
...@@ -1230,18 +1230,18 @@ func (az *Cloud) reconcileSecurityGroup(clusterName string, service *v1.Service, ...@@ -1230,18 +1230,18 @@ func (az *Cloud) reconcileSecurityGroup(clusterName string, service *v1.Service,
sharedRuleName := az.getSecurityRuleName(service, port, sourceAddressPrefix) sharedRuleName := az.getSecurityRuleName(service, port, sourceAddressPrefix)
sharedIndex, sharedRule, sharedRuleFound := findSecurityRuleByName(updatedRules, sharedRuleName) sharedIndex, sharedRule, sharedRuleFound := findSecurityRuleByName(updatedRules, sharedRuleName)
if !sharedRuleFound { if !sharedRuleFound {
klog.V(4).Infof("Expected to find shared rule %s for service %s being deleted, but did not", sharedRuleName, service.Name) klog.V(4).Infof("Didn't find shared rule %s for service %s", sharedRuleName, service.Name)
return nil, fmt.Errorf("Expected to find shared rule %s for service %s being deleted, but did not", sharedRuleName, service.Name) continue
} }
if sharedRule.DestinationAddressPrefixes == nil { if sharedRule.DestinationAddressPrefixes == nil {
klog.V(4).Infof("Expected to have array of destinations in shared rule for service %s being deleted, but did not", service.Name) klog.V(4).Infof("Didn't find DestinationAddressPrefixes in shared rule for service %s", service.Name)
return nil, fmt.Errorf("Expected to have array of destinations in shared rule for service %s being deleted, but did not", service.Name) continue
} }
existingPrefixes := *sharedRule.DestinationAddressPrefixes existingPrefixes := *sharedRule.DestinationAddressPrefixes
addressIndex, found := findIndex(existingPrefixes, destinationIPAddress) addressIndex, found := findIndex(existingPrefixes, destinationIPAddress)
if !found { if !found {
klog.V(4).Infof("Expected to find destination address %s in shared rule %s for service %s being deleted, but did not", destinationIPAddress, sharedRuleName, service.Name) klog.V(4).Infof("Didn't find destination address %v in shared rule %s for service %s", destinationIPAddress, sharedRuleName, service.Name)
return nil, fmt.Errorf("Expected to find destination address %s in shared rule %s for service %s being deleted, but did not", destinationIPAddress, sharedRuleName, service.Name) continue
} }
if len(existingPrefixes) == 1 { if len(existingPrefixes) == 1 {
updatedRules = append(updatedRules[:sharedIndex], updatedRules[sharedIndex+1:]...) updatedRules = append(updatedRules[:sharedIndex], updatedRules[sharedIndex+1:]...)
...@@ -1658,7 +1658,7 @@ func findSecurityRule(rules []network.SecurityRule, rule network.SecurityRule) b ...@@ -1658,7 +1658,7 @@ func findSecurityRule(rules []network.SecurityRule, rule network.SecurityRule) b
if !strings.EqualFold(to.String(existingRule.Name), to.String(rule.Name)) { if !strings.EqualFold(to.String(existingRule.Name), to.String(rule.Name)) {
continue continue
} }
if existingRule.Protocol != rule.Protocol { if !strings.EqualFold(string(existingRule.Protocol), string(rule.Protocol)) {
continue continue
} }
if !strings.EqualFold(to.String(existingRule.SourcePortRange), to.String(rule.SourcePortRange)) { if !strings.EqualFold(to.String(existingRule.SourcePortRange), to.String(rule.SourcePortRange)) {
...@@ -1675,10 +1675,10 @@ func findSecurityRule(rules []network.SecurityRule, rule network.SecurityRule) b ...@@ -1675,10 +1675,10 @@ func findSecurityRule(rules []network.SecurityRule, rule network.SecurityRule) b
continue continue
} }
} }
if existingRule.Access != rule.Access { if !strings.EqualFold(string(existingRule.Access), string(rule.Access)) {
continue continue
} }
if existingRule.Direction != rule.Direction { if !strings.EqualFold(string(existingRule.Direction), string(rule.Direction)) {
continue continue
} }
return true return true
......
...@@ -444,6 +444,20 @@ func (as *availabilitySet) GetPowerStatusByNodeName(name string) (powerState str ...@@ -444,6 +444,20 @@ func (as *availabilitySet) GetPowerStatusByNodeName(name string) (powerState str
return vmPowerStateStopped, nil return vmPowerStateStopped, nil
} }
// GetProvisioningStateByNodeName returns the provisioningState for the specified node.
func (as *availabilitySet) GetProvisioningStateByNodeName(name string) (provisioningState string, err error) {
vm, err := as.getVirtualMachine(types.NodeName(name), azcache.CacheReadTypeDefault)
if err != nil {
return provisioningState, err
}
if vm.VirtualMachineProperties == nil || vm.VirtualMachineProperties.ProvisioningState == nil {
return provisioningState, nil
}
return to.String(vm.VirtualMachineProperties.ProvisioningState), nil
}
// GetNodeNameByProviderID gets the node name by provider ID. // GetNodeNameByProviderID gets the node name by provider ID.
func (as *availabilitySet) GetNodeNameByProviderID(providerID string) (types.NodeName, error) { func (as *availabilitySet) GetNodeNameByProviderID(providerID string) (types.NodeName, error) {
// NodeName is part of providerID for standard instances. // NodeName is part of providerID for standard instances.
......
...@@ -71,11 +71,14 @@ type VMSet interface { ...@@ -71,11 +71,14 @@ type VMSet interface {
// DetachDisk detaches a vhd from host. The vhd can be identified by diskName or diskURI. // DetachDisk detaches a vhd from host. The vhd can be identified by diskName or diskURI.
DetachDisk(diskName, diskURI string, nodeName types.NodeName) error DetachDisk(diskName, diskURI string, nodeName types.NodeName) error
// GetDataDisks gets a list of data disks attached to the node. // GetDataDisks gets a list of data disks attached to the node.
GetDataDisks(nodeName types.NodeName, string azcache.AzureCacheReadType) ([]compute.DataDisk, error) GetDataDisks(nodeName types.NodeName, crt azcache.AzureCacheReadType) ([]compute.DataDisk, error)
// GetPowerStatusByNodeName returns the power state of the specified node. // GetPowerStatusByNodeName returns the power state of the specified node.
GetPowerStatusByNodeName(name string) (string, error) GetPowerStatusByNodeName(name string) (string, error)
// GetProvisioningStateByNodeName returns the provisioningState for the specified node.
GetProvisioningStateByNodeName(name string) (string, error)
// GetPrivateIPsByNodeName returns a slice of all private ips assigned to node (ipv6 and ipv4) // GetPrivateIPsByNodeName returns a slice of all private ips assigned to node (ipv6 and ipv4)
GetPrivateIPsByNodeName(name string) ([]string, error) GetPrivateIPsByNodeName(name string) ([]string, error)
} }
...@@ -241,6 +241,30 @@ func (ss *scaleSet) GetPowerStatusByNodeName(name string) (powerState string, er ...@@ -241,6 +241,30 @@ func (ss *scaleSet) GetPowerStatusByNodeName(name string) (powerState string, er
return vmPowerStateStopped, nil return vmPowerStateStopped, nil
} }
// GetProvisioningStateByNodeName returns the provisioningState for the specified node.
func (ss *scaleSet) GetProvisioningStateByNodeName(name string) (provisioningState string, err error) {
managedByAS, err := ss.isNodeManagedByAvailabilitySet(name, azcache.CacheReadTypeUnsafe)
if err != nil {
klog.Errorf("Failed to check isNodeManagedByAvailabilitySet: %v", err)
return "", err
}
if managedByAS {
// vm is managed by availability set.
return ss.availabilitySet.GetProvisioningStateByNodeName(name)
}
_, _, vm, err := ss.getVmssVM(name, azcache.CacheReadTypeDefault)
if err != nil {
return provisioningState, err
}
if vm.VirtualMachineScaleSetVMProperties == nil || vm.VirtualMachineScaleSetVMProperties.ProvisioningState == nil {
return provisioningState, nil
}
return to.String(vm.VirtualMachineScaleSetVMProperties.ProvisioningState), nil
}
// getCachedVirtualMachineByInstanceID gets scaleSetVMInfo from cache. // getCachedVirtualMachineByInstanceID gets scaleSetVMInfo from cache.
// The node must belong to one of scale sets. // The node must belong to one of scale sets.
func (ss *scaleSet) getVmssVMByInstanceID(resourceGroup, scaleSetName, instanceID string, crt azcache.AzureCacheReadType) (*compute.VirtualMachineScaleSetVM, error) { func (ss *scaleSet) getVmssVMByInstanceID(resourceGroup, scaleSetName, instanceID string, crt azcache.AzureCacheReadType) (*compute.VirtualMachineScaleSetVM, error) {
......
...@@ -186,7 +186,6 @@ func (vm *VirtualMachine) GetHost(ctx context.Context) (mo.HostSystem, error) { ...@@ -186,7 +186,6 @@ func (vm *VirtualMachine) GetHost(ctx context.Context) (mo.HostSystem, error) {
// DetachDisk detaches the disk specified by vmDiskPath // DetachDisk detaches the disk specified by vmDiskPath
func (vm *VirtualMachine) DetachDisk(ctx context.Context, vmDiskPath string) error { func (vm *VirtualMachine) DetachDisk(ctx context.Context, vmDiskPath string) error {
vmDiskPath = RemoveStorageClusterORFolderNameFromVDiskPath(vmDiskPath)
device, err := vm.getVirtualDeviceByPath(ctx, vmDiskPath) device, err := vm.getVirtualDeviceByPath(ctx, vmDiskPath)
if err != nil { if err != nil {
klog.Errorf("Disk ID not found for VM: %q with diskPath: %q", vm.InventoryPath, vmDiskPath) klog.Errorf("Disk ID not found for VM: %q with diskPath: %q", vm.InventoryPath, vmDiskPath)
......
...@@ -221,7 +221,7 @@ type Volumes interface { ...@@ -221,7 +221,7 @@ type Volumes interface {
// DiskIsAttached checks if a disk is attached to the given node. // DiskIsAttached checks if a disk is attached to the given node.
// Assumption: If node doesn't exist, disk is not attached to the node. // Assumption: If node doesn't exist, disk is not attached to the node.
DiskIsAttached(volPath string, nodeName k8stypes.NodeName) (bool, error) DiskIsAttached(volPath string, nodeName k8stypes.NodeName) (bool, string, error)
// DisksAreAttached checks if a list disks are attached to the given node. // DisksAreAttached checks if a list disks are attached to the given node.
// Assumption: If node doesn't exist, disks are not attached to the node. // Assumption: If node doesn't exist, disks are not attached to the node.
...@@ -924,6 +924,12 @@ func (vs *VSphere) AttachDisk(vmDiskPath string, storagePolicyName string, nodeN ...@@ -924,6 +924,12 @@ func (vs *VSphere) AttachDisk(vmDiskPath string, storagePolicyName string, nodeN
return "", err return "", err
} }
// try and get canonical path for disk and if we can't use provided vmDiskPath
canonicalPath, pathFetchErr := getcanonicalVolumePath(ctx, vm.Datacenter, vmDiskPath)
if canonicalPath != "" && pathFetchErr == nil {
vmDiskPath = canonicalPath
}
diskUUID, err = vm.AttachDisk(ctx, vmDiskPath, &vclib.VolumeOptions{SCSIControllerType: vclib.PVSCSIControllerType, StoragePolicyName: storagePolicyName}) diskUUID, err = vm.AttachDisk(ctx, vmDiskPath, &vclib.VolumeOptions{SCSIControllerType: vclib.PVSCSIControllerType, StoragePolicyName: storagePolicyName})
if err != nil { if err != nil {
klog.Errorf("Failed to attach disk: %s for node: %s. err: +%v", vmDiskPath, convertToString(nodeName), err) klog.Errorf("Failed to attach disk: %s for node: %s. err: +%v", vmDiskPath, convertToString(nodeName), err)
...@@ -1004,8 +1010,8 @@ func (vs *VSphere) DetachDisk(volPath string, nodeName k8stypes.NodeName) error ...@@ -1004,8 +1010,8 @@ func (vs *VSphere) DetachDisk(volPath string, nodeName k8stypes.NodeName) error
} }
// DiskIsAttached returns if disk is attached to the VM using controllers supported by the plugin. // DiskIsAttached returns if disk is attached to the VM using controllers supported by the plugin.
func (vs *VSphere) DiskIsAttached(volPath string, nodeName k8stypes.NodeName) (bool, error) { func (vs *VSphere) DiskIsAttached(volPath string, nodeName k8stypes.NodeName) (bool, string, error) {
diskIsAttachedInternal := func(volPath string, nodeName k8stypes.NodeName) (bool, error) { diskIsAttachedInternal := func(volPath string, nodeName k8stypes.NodeName) (bool, string, error) {
var vSphereInstance string var vSphereInstance string
if nodeName == "" { if nodeName == "" {
vSphereInstance = vs.hostName vSphereInstance = vs.hostName
...@@ -1018,25 +1024,30 @@ func (vs *VSphere) DiskIsAttached(volPath string, nodeName k8stypes.NodeName) (b ...@@ -1018,25 +1024,30 @@ func (vs *VSphere) DiskIsAttached(volPath string, nodeName k8stypes.NodeName) (b
defer cancel() defer cancel()
vsi, err := vs.getVSphereInstance(nodeName) vsi, err := vs.getVSphereInstance(nodeName)
if err != nil { if err != nil {
return false, err return false, volPath, err
} }
// Ensure client is logged in and session is valid // Ensure client is logged in and session is valid
err = vs.nodeManager.vcConnect(ctx, vsi) err = vs.nodeManager.vcConnect(ctx, vsi)
if err != nil { if err != nil {
return false, err return false, volPath, err
} }
vm, err := vs.getVMFromNodeName(ctx, nodeName) vm, err := vs.getVMFromNodeName(ctx, nodeName)
if err != nil { if err != nil {
if err == vclib.ErrNoVMFound { if err == vclib.ErrNoVMFound {
klog.Warningf("Node %q does not exist, vsphere CP will assume disk %v is not attached to it.", nodeName, volPath) klog.Warningf("Node %q does not exist, vsphere CP will assume disk %v is not attached to it.", nodeName, volPath)
// make the disk as detached and return false without error. // make the disk as detached and return false without error.
return false, nil return false, volPath, nil
} }
klog.Errorf("Failed to get VM object for node: %q. err: +%v", vSphereInstance, err) klog.Errorf("Failed to get VM object for node: %q. err: +%v", vSphereInstance, err)
return false, err return false, volPath, err
} }
volPath = vclib.RemoveStorageClusterORFolderNameFromVDiskPath(volPath) volPath = vclib.RemoveStorageClusterORFolderNameFromVDiskPath(volPath)
canonicalPath, pathFetchErr := getcanonicalVolumePath(ctx, vm.Datacenter, volPath)
// if canonicalPath is not empty string and pathFetchErr is nil then we can use canonical path to perform detach
if canonicalPath != "" && pathFetchErr == nil {
volPath = canonicalPath
}
attached, err := vm.IsDiskAttached(ctx, volPath) attached, err := vm.IsDiskAttached(ctx, volPath)
if err != nil { if err != nil {
klog.Errorf("DiskIsAttached failed to determine whether disk %q is still attached on node %q", klog.Errorf("DiskIsAttached failed to determine whether disk %q is still attached on node %q",
...@@ -1044,22 +1055,22 @@ func (vs *VSphere) DiskIsAttached(volPath string, nodeName k8stypes.NodeName) (b ...@@ -1044,22 +1055,22 @@ func (vs *VSphere) DiskIsAttached(volPath string, nodeName k8stypes.NodeName) (b
vSphereInstance) vSphereInstance)
} }
klog.V(4).Infof("DiskIsAttached result: %v and error: %q, for volume: %q", attached, err, volPath) klog.V(4).Infof("DiskIsAttached result: %v and error: %q, for volume: %q", attached, err, volPath)
return attached, err return attached, volPath, err
} }
requestTime := time.Now() requestTime := time.Now()
isAttached, err := diskIsAttachedInternal(volPath, nodeName) isAttached, newVolumePath, err := diskIsAttachedInternal(volPath, nodeName)
if err != nil { if err != nil {
if vclib.IsManagedObjectNotFoundError(err) { if vclib.IsManagedObjectNotFoundError(err) {
err = vs.nodeManager.RediscoverNode(nodeName) err = vs.nodeManager.RediscoverNode(nodeName)
if err == vclib.ErrNoVMFound { if err == vclib.ErrNoVMFound {
isAttached, err = false, nil isAttached, err = false, nil
} else if err == nil { } else if err == nil {
isAttached, err = diskIsAttachedInternal(volPath, nodeName) isAttached, newVolumePath, err = diskIsAttachedInternal(volPath, nodeName)
} }
} }
} }
vclib.RecordvSphereMetric(vclib.OperationDiskIsAttached, requestTime, err) vclib.RecordvSphereMetric(vclib.OperationDiskIsAttached, requestTime, err)
return isAttached, err return isAttached, newVolumePath, err
} }
// DisksAreAttached returns if disks are attached to the VM using controllers supported by the plugin. // DisksAreAttached returns if disks are attached to the VM using controllers supported by the plugin.
......
...@@ -1383,7 +1383,7 @@ gopkg.in/warnings.v0 ...@@ -1383,7 +1383,7 @@ gopkg.in/warnings.v0
gopkg.in/yaml.v2 gopkg.in/yaml.v2
# gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 # gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776
gopkg.in/yaml.v3 gopkg.in/yaml.v3
# k8s.io/api v0.19.14 => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.19.14-k3s1 # k8s.io/api v0.19.15 => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.19.15-k3s1
## explicit ## explicit
k8s.io/api/admission/v1 k8s.io/api/admission/v1
k8s.io/api/admission/v1beta1 k8s.io/api/admission/v1beta1
...@@ -1429,7 +1429,7 @@ k8s.io/api/settings/v1alpha1 ...@@ -1429,7 +1429,7 @@ k8s.io/api/settings/v1alpha1
k8s.io/api/storage/v1 k8s.io/api/storage/v1
k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1alpha1
k8s.io/api/storage/v1beta1 k8s.io/api/storage/v1beta1
# k8s.io/apiextensions-apiserver v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.19.14-k3s1 # k8s.io/apiextensions-apiserver v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.19.15-k3s1
k8s.io/apiextensions-apiserver/pkg/apihelpers k8s.io/apiextensions-apiserver/pkg/apihelpers
k8s.io/apiextensions-apiserver/pkg/apis/apiextensions k8s.io/apiextensions-apiserver/pkg/apis/apiextensions
k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install
...@@ -1469,7 +1469,7 @@ k8s.io/apiextensions-apiserver/pkg/generated/openapi ...@@ -1469,7 +1469,7 @@ k8s.io/apiextensions-apiserver/pkg/generated/openapi
k8s.io/apiextensions-apiserver/pkg/registry/customresource k8s.io/apiextensions-apiserver/pkg/registry/customresource
k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor
k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition
# k8s.io/apimachinery v0.19.14 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.19.14-k3s1 # k8s.io/apimachinery v0.19.15 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.19.15-k3s1
## explicit ## explicit
k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/equality
k8s.io/apimachinery/pkg/api/errors k8s.io/apimachinery/pkg/api/errors
...@@ -1533,7 +1533,7 @@ k8s.io/apimachinery/pkg/watch ...@@ -1533,7 +1533,7 @@ k8s.io/apimachinery/pkg/watch
k8s.io/apimachinery/third_party/forked/golang/json k8s.io/apimachinery/third_party/forked/golang/json
k8s.io/apimachinery/third_party/forked/golang/netutil k8s.io/apimachinery/third_party/forked/golang/netutil
k8s.io/apimachinery/third_party/forked/golang/reflect k8s.io/apimachinery/third_party/forked/golang/reflect
# k8s.io/apiserver v0.19.14 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.19.14-k3s1 # k8s.io/apiserver v0.19.15 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.19.15-k3s1
## explicit ## explicit
k8s.io/apiserver/pkg/admission k8s.io/apiserver/pkg/admission
k8s.io/apiserver/pkg/admission/configuration k8s.io/apiserver/pkg/admission/configuration
...@@ -1661,7 +1661,7 @@ k8s.io/apiserver/plugin/pkg/audit/webhook ...@@ -1661,7 +1661,7 @@ k8s.io/apiserver/plugin/pkg/audit/webhook
k8s.io/apiserver/plugin/pkg/authenticator/token/oidc k8s.io/apiserver/plugin/pkg/authenticator/token/oidc
k8s.io/apiserver/plugin/pkg/authenticator/token/webhook k8s.io/apiserver/plugin/pkg/authenticator/token/webhook
k8s.io/apiserver/plugin/pkg/authorizer/webhook k8s.io/apiserver/plugin/pkg/authorizer/webhook
# k8s.io/cli-runtime v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.19.14-k3s1 # k8s.io/cli-runtime v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.19.15-k3s1
k8s.io/cli-runtime/pkg/genericclioptions k8s.io/cli-runtime/pkg/genericclioptions
k8s.io/cli-runtime/pkg/kustomize k8s.io/cli-runtime/pkg/kustomize
k8s.io/cli-runtime/pkg/kustomize/k8sdeps k8s.io/cli-runtime/pkg/kustomize/k8sdeps
...@@ -1674,7 +1674,7 @@ k8s.io/cli-runtime/pkg/kustomize/k8sdeps/transformer/patch ...@@ -1674,7 +1674,7 @@ k8s.io/cli-runtime/pkg/kustomize/k8sdeps/transformer/patch
k8s.io/cli-runtime/pkg/kustomize/k8sdeps/validator k8s.io/cli-runtime/pkg/kustomize/k8sdeps/validator
k8s.io/cli-runtime/pkg/printers k8s.io/cli-runtime/pkg/printers
k8s.io/cli-runtime/pkg/resource 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.19.14-k3s1 # k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.19.15-k3s1
## explicit ## explicit
k8s.io/client-go/discovery k8s.io/client-go/discovery
k8s.io/client-go/discovery/cached k8s.io/client-go/discovery/cached
...@@ -1913,7 +1913,7 @@ k8s.io/client-go/util/jsonpath ...@@ -1913,7 +1913,7 @@ k8s.io/client-go/util/jsonpath
k8s.io/client-go/util/keyutil k8s.io/client-go/util/keyutil
k8s.io/client-go/util/retry k8s.io/client-go/util/retry
k8s.io/client-go/util/workqueue k8s.io/client-go/util/workqueue
# k8s.io/cloud-provider v0.19.14 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.19.14-k3s1 # k8s.io/cloud-provider v0.19.15 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.19.15-k3s1
## explicit ## explicit
k8s.io/cloud-provider k8s.io/cloud-provider
k8s.io/cloud-provider/api k8s.io/cloud-provider/api
...@@ -1926,13 +1926,13 @@ k8s.io/cloud-provider/service/helpers ...@@ -1926,13 +1926,13 @@ k8s.io/cloud-provider/service/helpers
k8s.io/cloud-provider/volume k8s.io/cloud-provider/volume
k8s.io/cloud-provider/volume/errors k8s.io/cloud-provider/volume/errors
k8s.io/cloud-provider/volume/helpers 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.19.14-k3s1 # k8s.io/cluster-bootstrap v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.19.15-k3s1
k8s.io/cluster-bootstrap/token/api k8s.io/cluster-bootstrap/token/api
k8s.io/cluster-bootstrap/token/jws k8s.io/cluster-bootstrap/token/jws
k8s.io/cluster-bootstrap/token/util k8s.io/cluster-bootstrap/token/util
k8s.io/cluster-bootstrap/util/secrets k8s.io/cluster-bootstrap/util/secrets
k8s.io/cluster-bootstrap/util/tokens 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.19.14-k3s1 # k8s.io/code-generator v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.19.15-k3s1
k8s.io/code-generator/cmd/client-gen/args k8s.io/code-generator/cmd/client-gen/args
k8s.io/code-generator/cmd/client-gen/generators k8s.io/code-generator/cmd/client-gen/generators
k8s.io/code-generator/cmd/client-gen/generators/fake k8s.io/code-generator/cmd/client-gen/generators/fake
...@@ -1947,7 +1947,7 @@ k8s.io/code-generator/cmd/lister-gen/args ...@@ -1947,7 +1947,7 @@ k8s.io/code-generator/cmd/lister-gen/args
k8s.io/code-generator/cmd/lister-gen/generators k8s.io/code-generator/cmd/lister-gen/generators
k8s.io/code-generator/pkg/namer k8s.io/code-generator/pkg/namer
k8s.io/code-generator/pkg/util k8s.io/code-generator/pkg/util
# k8s.io/component-base v0.19.14 => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.19.14-k3s1 # k8s.io/component-base v0.19.15 => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.19.15-k3s1
## explicit ## explicit
k8s.io/component-base/cli/flag k8s.io/component-base/cli/flag
k8s.io/component-base/cli/globalflag k8s.io/component-base/cli/globalflag
...@@ -1971,11 +1971,11 @@ k8s.io/component-base/metrics/testutil ...@@ -1971,11 +1971,11 @@ k8s.io/component-base/metrics/testutil
k8s.io/component-base/term k8s.io/component-base/term
k8s.io/component-base/version k8s.io/component-base/version
k8s.io/component-base/version/verflag k8s.io/component-base/version/verflag
# k8s.io/cri-api v0.20.1 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.19.14-k3s1 # k8s.io/cri-api v0.20.1 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.19.15-k3s1
## explicit ## explicit
k8s.io/cri-api/pkg/apis k8s.io/cri-api/pkg/apis
k8s.io/cri-api/pkg/apis/runtime/v1alpha2 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.19.14-k3s1 # k8s.io/csi-translation-lib v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.19.15-k3s1
k8s.io/csi-translation-lib k8s.io/csi-translation-lib
k8s.io/csi-translation-lib/plugins k8s.io/csi-translation-lib/plugins
# k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 # k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14
...@@ -1993,7 +1993,7 @@ k8s.io/heapster/metrics/api/v1/types ...@@ -1993,7 +1993,7 @@ k8s.io/heapster/metrics/api/v1/types
k8s.io/klog k8s.io/klog
# k8s.io/klog/v2 v2.2.0 # k8s.io/klog/v2 v2.2.0
k8s.io/klog/v2 k8s.io/klog/v2
# k8s.io/kube-aggregator v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.19.14-k3s1 # k8s.io/kube-aggregator v0.18.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.19.15-k3s1
k8s.io/kube-aggregator/pkg/apis/apiregistration k8s.io/kube-aggregator/pkg/apis/apiregistration
k8s.io/kube-aggregator/pkg/apis/apiregistration/install k8s.io/kube-aggregator/pkg/apis/apiregistration/install
k8s.io/kube-aggregator/pkg/apis/apiregistration/v1 k8s.io/kube-aggregator/pkg/apis/apiregistration/v1
...@@ -2021,7 +2021,7 @@ k8s.io/kube-aggregator/pkg/controllers/status ...@@ -2021,7 +2021,7 @@ k8s.io/kube-aggregator/pkg/controllers/status
k8s.io/kube-aggregator/pkg/registry/apiservice k8s.io/kube-aggregator/pkg/registry/apiservice
k8s.io/kube-aggregator/pkg/registry/apiservice/etcd k8s.io/kube-aggregator/pkg/registry/apiservice/etcd
k8s.io/kube-aggregator/pkg/registry/apiservice/rest 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.19.14-k3s1 # k8s.io/kube-controller-manager v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.19.15-k3s1
k8s.io/kube-controller-manager/config/v1alpha1 k8s.io/kube-controller-manager/config/v1alpha1
# k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 # k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6
k8s.io/kube-openapi/pkg/aggregator k8s.io/kube-openapi/pkg/aggregator
...@@ -2032,13 +2032,13 @@ k8s.io/kube-openapi/pkg/schemaconv ...@@ -2032,13 +2032,13 @@ k8s.io/kube-openapi/pkg/schemaconv
k8s.io/kube-openapi/pkg/util k8s.io/kube-openapi/pkg/util
k8s.io/kube-openapi/pkg/util/proto k8s.io/kube-openapi/pkg/util/proto
k8s.io/kube-openapi/pkg/util/proto/validation k8s.io/kube-openapi/pkg/util/proto/validation
# k8s.io/kube-proxy v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.19.14-k3s1 # k8s.io/kube-proxy v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.19.15-k3s1
k8s.io/kube-proxy/config/v1alpha1 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.19.14-k3s1 # k8s.io/kube-scheduler v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.19.15-k3s1
k8s.io/kube-scheduler/config/v1 k8s.io/kube-scheduler/config/v1
k8s.io/kube-scheduler/config/v1beta1 k8s.io/kube-scheduler/config/v1beta1
k8s.io/kube-scheduler/extender/v1 k8s.io/kube-scheduler/extender/v1
# k8s.io/kubectl v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.19.14-k3s1 # k8s.io/kubectl v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.19.15-k3s1
k8s.io/kubectl/pkg/apps k8s.io/kubectl/pkg/apps
k8s.io/kubectl/pkg/cmd k8s.io/kubectl/pkg/cmd
k8s.io/kubectl/pkg/cmd/annotate k8s.io/kubectl/pkg/cmd/annotate
...@@ -2114,11 +2114,11 @@ k8s.io/kubectl/pkg/util/storage ...@@ -2114,11 +2114,11 @@ k8s.io/kubectl/pkg/util/storage
k8s.io/kubectl/pkg/util/templates k8s.io/kubectl/pkg/util/templates
k8s.io/kubectl/pkg/util/term k8s.io/kubectl/pkg/util/term
k8s.io/kubectl/pkg/validation k8s.io/kubectl/pkg/validation
# k8s.io/kubelet v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.19.14-k3s1 # k8s.io/kubelet v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.19.15-k3s1
k8s.io/kubelet/config/v1beta1 k8s.io/kubelet/config/v1beta1
k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1 k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1
k8s.io/kubelet/pkg/apis/pluginregistration/v1 k8s.io/kubelet/pkg/apis/pluginregistration/v1
# k8s.io/kubernetes v1.19.14 => github.com/k3s-io/kubernetes v1.19.14-k3s1 # k8s.io/kubernetes v1.19.15 => github.com/k3s-io/kubernetes v1.19.15-k3s1
## explicit ## explicit
k8s.io/kubernetes/cmd/cloud-controller-manager/app k8s.io/kubernetes/cmd/cloud-controller-manager/app
k8s.io/kubernetes/cmd/cloud-controller-manager/app/apis/config k8s.io/kubernetes/cmd/cloud-controller-manager/app/apis/config
...@@ -2857,7 +2857,7 @@ k8s.io/kubernetes/third_party/forked/gonum/graph ...@@ -2857,7 +2857,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/internal/linear
k8s.io/kubernetes/third_party/forked/gonum/graph/simple k8s.io/kubernetes/third_party/forked/gonum/graph/simple
k8s.io/kubernetes/third_party/forked/gonum/graph/traverse 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.19.14-k3s1 # k8s.io/legacy-cloud-providers v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.19.15-k3s1
k8s.io/legacy-cloud-providers/aws k8s.io/legacy-cloud-providers/aws
k8s.io/legacy-cloud-providers/azure k8s.io/legacy-cloud-providers/azure
k8s.io/legacy-cloud-providers/azure/auth k8s.io/legacy-cloud-providers/azure/auth
...@@ -2899,7 +2899,7 @@ k8s.io/legacy-cloud-providers/openstack ...@@ -2899,7 +2899,7 @@ k8s.io/legacy-cloud-providers/openstack
k8s.io/legacy-cloud-providers/vsphere k8s.io/legacy-cloud-providers/vsphere
k8s.io/legacy-cloud-providers/vsphere/vclib k8s.io/legacy-cloud-providers/vsphere/vclib
k8s.io/legacy-cloud-providers/vsphere/vclib/diskmanagers 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.19.14-k3s1 # k8s.io/metrics v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.19.15-k3s1
k8s.io/metrics/pkg/apis/custom_metrics k8s.io/metrics/pkg/apis/custom_metrics
k8s.io/metrics/pkg/apis/custom_metrics/v1beta1 k8s.io/metrics/pkg/apis/custom_metrics/v1beta1
k8s.io/metrics/pkg/apis/custom_metrics/v1beta2 k8s.io/metrics/pkg/apis/custom_metrics/v1beta2
...@@ -3001,29 +3001,29 @@ vbom.ml/util/sortorder ...@@ -3001,29 +3001,29 @@ vbom.ml/util/sortorder
# google.golang.org/genproto => google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63 # google.golang.org/genproto => google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63
# google.golang.org/grpc => google.golang.org/grpc v1.27.1 # google.golang.org/grpc => google.golang.org/grpc v1.27.1
# gopkg.in/square/go-jose.v2 => gopkg.in/square/go-jose.v2 v2.2.2 # 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.19.14-k3s1 # k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.19.15-k3s1
# k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.19.14-k3s1 # k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.19.15-k3s1
# k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.19.14-k3s1 # k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.19.15-k3s1
# k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.19.14-k3s1 # k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.19.15-k3s1
# k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.19.14-k3s1 # k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.19.15-k3s1
# k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.19.14-k3s1 # k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.19.15-k3s1
# k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.19.14-k3s1 # k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.19.15-k3s1
# k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.19.14-k3s1 # k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.19.15-k3s1
# k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.19.14-k3s1 # k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.19.15-k3s1
# k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.19.14-k3s1 # k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.19.15-k3s1
# k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.19.14-k3s1 # k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.19.15-k3s1
# k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.19.14-k3s1 # k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.19.15-k3s1
# k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.19.14-k3s1 # k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.19.15-k3s1
# k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.19.14-k3s1 # k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.19.15-k3s1
# k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.19.14-k3s1 # k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.19.15-k3s1
# k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.19.14-k3s1 # k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.19.15-k3s1
# k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.19.14-k3s1 # k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.19.15-k3s1
# k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.19.14-k3s1 # k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.19.15-k3s1
# k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.19.14-k3s1 # k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.19.15-k3s1
# k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.19.14-k3s1 # k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.19.15-k3s1
# k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.19.14-k3s1 # k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.19.15-k3s1
# k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.19.14-k3s1 # k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.19.15-k3s1
# k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.19.14-k3s1 # k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.19.15-k3s1
# k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.19.14-k3s1 # k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.19.15-k3s1
# k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.19.14-k3s1 # k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.19.15-k3s1
# mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34 # mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment