Unverified Commit d08f5ffb authored by Brian Downs's avatar Brian Downs Committed by GitHub

Update to v1.17.15 (#2674)

* Update to v1.17.15
parent 513ff1dc
...@@ -33,31 +33,31 @@ replace ( ...@@ -33,31 +33,31 @@ replace (
github.com/prometheus/client_model => github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 github.com/prometheus/client_model => github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910
github.com/prometheus/common => github.com/prometheus/common v0.0.0-20181126121408-4724e9255275 github.com/prometheus/common => github.com/prometheus/common v0.0.0-20181126121408-4724e9255275
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a
k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.17.14-k3s1 k8s.io/api => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.17.15-k3s1
k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.17.14-k3s1 k8s.io/apiextensions-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.17.15-k3s1
k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.17.14-k3s1 k8s.io/apimachinery => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.17.15-k3s1
k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.17.14-k3s1 k8s.io/apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.17.15-k3s1
k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.17.14-k3s1 k8s.io/cli-runtime => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.17.15-k3s1
k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.17.14-k3s1 k8s.io/client-go => github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.17.15-k3s1
k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.17.14-k3s1 k8s.io/cloud-provider => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.17.15-k3s1
k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.17.14-k3s1 k8s.io/cluster-bootstrap => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.17.15-k3s1
k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.17.14-k3s1 k8s.io/code-generator => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.17.15-k3s1
k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.17.14-k3s1 k8s.io/component-base => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.17.15-k3s1
k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.17.14-k3s1 k8s.io/cri-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.17.15-k3s1
k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.17.14-k3s1 k8s.io/csi-translation-lib => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.17.15-k3s1
k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.17.14-k3s1 k8s.io/kube-aggregator => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.17.15-k3s1
k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.17.14-k3s1 k8s.io/kube-controller-manager => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.17.15-k3s1
k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.17.14-k3s1 k8s.io/kube-proxy => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.17.15-k3s1
k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.17.14-k3s1 k8s.io/kube-scheduler => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.17.15-k3s1
k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.17.14-k3s1 k8s.io/kubectl => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.17.15-k3s1
k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.17.14-k3s1 k8s.io/kubelet => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.17.15-k3s1
k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.17.14-k3s1 k8s.io/kubernetes => github.com/k3s-io/kubernetes v1.17.15-k3s1
k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.17.14-k3s1 k8s.io/legacy-cloud-providers => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.17.15-k3s1
k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.17.14-k3s1 k8s.io/metrics => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.17.15-k3s1
k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.17.14-k3s1 k8s.io/node-api => github.com/k3s-io/kubernetes/staging/src/k8s.io/node-api v1.17.15-k3s1
k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.17.14-k3s1 k8s.io/sample-apiserver => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.17.15-k3s1
k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.17.14-k3s1 k8s.io/sample-cli-plugin => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.17.15-k3s1
k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.17.14-k3s1 k8s.io/sample-controller => github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-controller v1.17.15-k3s1
mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34 mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34
) )
...@@ -123,5 +123,5 @@ require ( ...@@ -123,5 +123,5 @@ require (
k8s.io/component-base v0.0.0 k8s.io/component-base v0.0.0
k8s.io/cri-api v0.0.0 k8s.io/cri-api v0.0.0
k8s.io/klog v1.0.0 k8s.io/klog v1.0.0
k8s.io/kubernetes v1.17.14 k8s.io/kubernetes v1.17.15
) )
...@@ -521,49 +521,49 @@ github.com/k3s-io/containerd v1.3.9-k3s1 h1:VeMMmcojFZDJlLkgtIr7GAmDUgtGS7ME3KvL ...@@ -521,49 +521,49 @@ github.com/k3s-io/containerd v1.3.9-k3s1 h1:VeMMmcojFZDJlLkgtIr7GAmDUgtGS7ME3KvL
github.com/k3s-io/containerd v1.3.9-k3s1/go.mod h1:eMCLnqhZCzg+cZuvfMLStYPsrx5cWGpdZL6krPhK8RI= github.com/k3s-io/containerd v1.3.9-k3s1/go.mod h1:eMCLnqhZCzg+cZuvfMLStYPsrx5cWGpdZL6krPhK8RI=
github.com/k3s-io/cri v1.3.0-k3s.9 h1:1PUJysV7YQElM5JEjnHdOQ2kgwtTiSJ5fpx1j4/WjzU= github.com/k3s-io/cri v1.3.0-k3s.9 h1:1PUJysV7YQElM5JEjnHdOQ2kgwtTiSJ5fpx1j4/WjzU=
github.com/k3s-io/cri v1.3.0-k3s.9/go.mod h1:fGPUUHMKQik/vIegSe05DtX/m4miovdtvVLqRUFAkK0= github.com/k3s-io/cri v1.3.0-k3s.9/go.mod h1:fGPUUHMKQik/vIegSe05DtX/m4miovdtvVLqRUFAkK0=
github.com/k3s-io/kubernetes v1.17.14-k3s1 h1:qI3+vAOjxo1rANfoSqpUf+e/o36tSAgXc/p7JofSYMU= github.com/k3s-io/kubernetes v1.17.15-k3s1 h1:FOF2bKmNtvi7jSbN6stpYlfst16tUQeHoAQQqqm+L5A=
github.com/k3s-io/kubernetes v1.17.14-k3s1/go.mod h1:J8bqjhrOYZ/dDhaQU8sEfM+aH81x3Urfw1uODZc7ZfU= github.com/k3s-io/kubernetes v1.17.15-k3s1/go.mod h1:J8bqjhrOYZ/dDhaQU8sEfM+aH81x3Urfw1uODZc7ZfU=
github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.17.14-k3s1 h1:Z83y7Wd7Hg6/i+rZJZ0HUf+q2k8u8jE7PJg/aLbcoIA= github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.17.15-k3s1 h1:OQlgpxRujsWkt5wARXaNADZWi53oezXOKoZ/9/NXYw4=
github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.17.14-k3s1/go.mod h1:D7sf1F7GAHEK5DOn11dKP5J/QJvUShU2AopXe/AXghk= github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.17.15-k3s1/go.mod h1:D7sf1F7GAHEK5DOn11dKP5J/QJvUShU2AopXe/AXghk=
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.17.14-k3s1 h1:FqyV2S39HNtBh0pfR4LN5acqwW5M/TTVh5uSUMZ91pk= github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.17.15-k3s1 h1:UmJdrEbz4ni12E3nIhPDPqQiFVzhl9EMc2xLA9XUCSM=
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.17.14-k3s1/go.mod h1:t7xE4B3a1No++QbRlihSWT6HFc2hJeKY7tD3hVzUH04= github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.17.15-k3s1/go.mod h1:t7xE4B3a1No++QbRlihSWT6HFc2hJeKY7tD3hVzUH04=
github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.17.14-k3s1 h1:WIF5BqIRafWA2+T3HLxcrezyY8hjjiuaL0518/biSfU= github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.17.15-k3s1 h1:2ngy2KczEd9pp4GFV+BzQ9wtmJ1cJkonYHtE3l7ybQk=
github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.17.14-k3s1/go.mod h1:SNGiMTQO86w2jZv4F8XbEzo/oxw/SVhYrUc6PeLKIUM= github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.17.15-k3s1/go.mod h1:SNGiMTQO86w2jZv4F8XbEzo/oxw/SVhYrUc6PeLKIUM=
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.17.14-k3s1 h1:37auMf8rBaqSsdWQNdxpGo3vXGEtfXdieZ6dzE5Q82k= github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.17.15-k3s1 h1:9w9AZ/cmMBWUQKi729tK/f27IE+peWpXwxNHPwUvxek=
github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.17.14-k3s1/go.mod h1:460zYYu4Oz1IQnJVEIw61q/liMtZg4rJxWa6te3TAX8= github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.17.15-k3s1/go.mod h1:460zYYu4Oz1IQnJVEIw61q/liMtZg4rJxWa6te3TAX8=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.17.14-k3s1 h1:fquYb1yPKAXC++hbam2345W5ErJ6NeQxMi9MKyUOhdQ= github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.17.15-k3s1 h1:rG02mR3ecE3B2lQYQKutUDMZBe9JptbOe5SZ2WT7L08=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.17.14-k3s1/go.mod h1:gDRxKO8EN1rpLXzjeVmzc8c9RFs0ZqY8WJf/li0tNQc= github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.17.15-k3s1/go.mod h1:gDRxKO8EN1rpLXzjeVmzc8c9RFs0ZqY8WJf/li0tNQc=
github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.17.14-k3s1 h1:dmpWdE/n7S/7V3JSgL8T8hPdDKBkBliXfKqufFdgukY= github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.17.15-k3s1 h1:nwGJjcLH5P/pSX2phlDo+7tHa5Uwph2Rw9NghApDPrw=
github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.17.14-k3s1/go.mod h1:TECGv+eYoAdQLqXqLn6lbdWb7W17Ibw22Wksad3Wad0= github.com/k3s-io/kubernetes/staging/src/k8s.io/client-go v1.17.15-k3s1/go.mod h1:TECGv+eYoAdQLqXqLn6lbdWb7W17Ibw22Wksad3Wad0=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.17.14-k3s1 h1:5TyL3B7bTd/n31DGZUEUIBRjk5JvUhmUS5sWI1CLpDg= github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.17.15-k3s1 h1:eIPEG+EWEkcFrfegatBwfnTWtBqatgySFpK7sKL/xjY=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.17.14-k3s1/go.mod h1:ycFddVBapK98UCwexOuDsvQLD3tfiVdRlXm2jjNP14c= github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.17.15-k3s1/go.mod h1:ycFddVBapK98UCwexOuDsvQLD3tfiVdRlXm2jjNP14c=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.17.14-k3s1 h1:RPhAu7O9c8EERJP1z4Wkfzbl/MDJtRkiugQ1yl0IjT0= github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.17.15-k3s1 h1:DEjF75STyLPjB8Qb/SRlR1qJbrmsl7DuUzkiMj+FsD0=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.17.14-k3s1/go.mod h1:45LXh7SMJ3p4QnHER5TrOGhYz0CWcjb3xyq6aQqnebk= github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.17.15-k3s1/go.mod h1:45LXh7SMJ3p4QnHER5TrOGhYz0CWcjb3xyq6aQqnebk=
github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.17.14-k3s1 h1:QgRZ5GJjwwR/DsTs4T06B3NMW95DXD0XTSXUS3VZWvk= github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.17.15-k3s1 h1:mmpTbz7OYCc/5pR3y8qkNQ8dryIlg+0M8WNN1ZmZmgM=
github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.17.14-k3s1/go.mod h1:SSBU1UzegXPz71t1XwnyfZzhclthC7gz/GVmpj7dezI= github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.17.15-k3s1/go.mod h1:SSBU1UzegXPz71t1XwnyfZzhclthC7gz/GVmpj7dezI=
github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.17.14-k3s1 h1:c5XFitJmI0jKkOAEd03uN6XzTSwY+dDNnvy76j3hvA8= github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.17.15-k3s1 h1:LbFnBCs3pHmaAZAeNguyo69xAb+iTs5EtT8QTaI5HZs=
github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.17.14-k3s1/go.mod h1:cTBtMr/eUcihQ4sFhgiDPlmlFpn1xBY37yQ+zNcT1IE= github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.17.15-k3s1/go.mod h1:cTBtMr/eUcihQ4sFhgiDPlmlFpn1xBY37yQ+zNcT1IE=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.17.14-k3s1 h1:kEyj3O+QjsqIFOXyrnh4FywSiZTV3ROq9pLhV1xRqOQ= github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.17.15-k3s1 h1:uf27CumJAS5ZOt9AjCYZYiTG4xJdJO+pD9VWYNNp/SY=
github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.17.14-k3s1/go.mod h1:MFtntPG6S7PSTqf06WHsjhdZ/gOTxfzFgNEzfhO5Uus= github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.17.15-k3s1/go.mod h1:MFtntPG6S7PSTqf06WHsjhdZ/gOTxfzFgNEzfhO5Uus=
github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.17.14-k3s1 h1:WfU0xPfojvgOcdOt5xg7qbPJYIAsPpHXIkRLgHQt0uA= github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.17.15-k3s1 h1:IZLqSktPBVvzhCgu7thiEy4coeZ+KZ58oO2mlkabbj4=
github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.17.14-k3s1/go.mod h1:k7r//UcXL2LipyGNpT/v/LG7Dsa9wILmaV4XyRhIPF4= github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.17.15-k3s1/go.mod h1:k7r//UcXL2LipyGNpT/v/LG7Dsa9wILmaV4XyRhIPF4=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.17.14-k3s1 h1:35DZBrhnhzwHsQYvqzmRa1sV5mvEZY8iHOsyoh0Hb2I= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.17.15-k3s1 h1:iQt+MR1QJjCMScT9pvrbXyhqA6ejJey8mUSmrKmOHyM=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.17.14-k3s1/go.mod h1:oiCmE5poHbGfbkdIVMoITelay3hTqhonrn8EPg9c4kM= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.17.15-k3s1/go.mod h1:oiCmE5poHbGfbkdIVMoITelay3hTqhonrn8EPg9c4kM=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.17.14-k3s1 h1:ruEP4K1GAQZBlrqPKx7Piv4aLO7Qi/XE6pV/ES59EW0= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.17.15-k3s1 h1:uxQwSP0OCKpyZJCIdLHKDVH28Zf4wQv+meJzSxBAok8=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.17.14-k3s1/go.mod h1:mKHow8zS1GpDcLHlAgghj2BKPOZrpEIHA30lWyRF3gg= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.17.15-k3s1/go.mod h1:mKHow8zS1GpDcLHlAgghj2BKPOZrpEIHA30lWyRF3gg=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.17.14-k3s1 h1:zwhziVEl818xKdhSXBuJ7nvhWWybSlUNsYCbtdJv0B0= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.17.15-k3s1 h1:XtIjkUIXzP7GpJz4Z0PM2OJ+iHluY304WOgV9ViXkvw=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.17.14-k3s1/go.mod h1:6SB+e2ragxZ8CPWrgNZ7F9KkCFykx5zQjnLVP2SWQ00= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.17.15-k3s1/go.mod h1:6SB+e2ragxZ8CPWrgNZ7F9KkCFykx5zQjnLVP2SWQ00=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.17.14-k3s1 h1:X2QMpwsVgizkxc0lGdB/bsyDABtDhCC14qs1fLA4UXQ= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.17.15-k3s1 h1:FvRTweks620satxG2egCvikGxHsiZnnAJMY3tf/EJO0=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.17.14-k3s1/go.mod h1:8rHmgUeQCsvaVrSy79lQc3DKD5PQp9cJH0DLw2GSAdk= github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.17.15-k3s1/go.mod h1:8rHmgUeQCsvaVrSy79lQc3DKD5PQp9cJH0DLw2GSAdk=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.17.14-k3s1 h1:RULOmB466ZhHxVUpQpaU1j0FJaa9mIYjjBh/LbI59UU= github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.17.15-k3s1 h1:eAokpA1Zm9YOnNbRXISkkXlxG4GfHwPjFaoWYjwaqg0=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.17.14-k3s1/go.mod h1:GQ+tU0gTBihZ7OA9ISKQFAVS9ur7huPo+EAfoKJfO2Q= github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.17.15-k3s1/go.mod h1:GQ+tU0gTBihZ7OA9ISKQFAVS9ur7huPo+EAfoKJfO2Q=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.17.14-k3s1 h1:KkRC1bm7MfUdcCl90cgC41QSeGb2yojiLAUtJ9c4Zpk= github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.17.15-k3s1 h1:lQZ0vmAGPK7hi1OPgjhX8fZyI5QrsuTOBYXKrtIqu6o=
github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.17.14-k3s1/go.mod h1:oHq6KV/WjiamPxKs2Np7JxcOEwHXfMybRBnLrMsTOHs= github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.17.15-k3s1/go.mod h1:oHq6KV/WjiamPxKs2Np7JxcOEwHXfMybRBnLrMsTOHs=
github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.17.14-k3s1 h1:J/1YCOOyp0pWTwTrtwXPV4hnNQ248rsiXtvd08ZjSI8= github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.17.15-k3s1 h1:+1YzJvEK7kLpf84+695o5hBzre3qRH9Ar6oDT8mN3e0=
github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.17.14-k3s1/go.mod h1:/Ay7JUxnDftnjC20qd2wU13RQSAi6jsvdbx5P3g+Rig= github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.17.15-k3s1/go.mod h1:/Ay7JUxnDftnjC20qd2wU13RQSAi6jsvdbx5P3g+Rig=
github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.17.14-k3s1 h1:4gu58KDLqvaP0vzTwQJQ5Vc49Dk7C3Xa5kbeT0llPMI= github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.17.15-k3s1 h1:zhDyvzBn7I3gWGvjyQw/5wl3cSRmUchGB9dOWQVgcw8=
github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.17.14-k3s1/go.mod h1:e70DTGI+y72YcU8iGDifilyP5uW6sPmBflDEjtiH/p0= github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.17.15-k3s1/go.mod h1:e70DTGI+y72YcU8iGDifilyP5uW6sPmBflDEjtiH/p0=
github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.17.14-k3s1/go.mod h1:Aa3q34X2DLzqzugHP1xGSjJsPsaWdzhexM9Thk/AG7g= github.com/k3s-io/kubernetes/staging/src/k8s.io/sample-apiserver v1.17.15-k3s1/go.mod h1:Aa3q34X2DLzqzugHP1xGSjJsPsaWdzhexM9Thk/AG7g=
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/keybase/go-crypto v0.0.0-20190403132359-d65b6b94177f/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M= github.com/keybase/go-crypto v0.0.0-20190403132359-d65b6b94177f/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M=
......
...@@ -59,6 +59,10 @@ type DelegatingAuthorizationOptions struct { ...@@ -59,6 +59,10 @@ type DelegatingAuthorizationOptions struct {
// AlwaysAllowGroups are groups which are allowed to take any actions. In kube, this is system:masters. // AlwaysAllowGroups are groups which are allowed to take any actions. In kube, this is system:masters.
AlwaysAllowGroups []string AlwaysAllowGroups []string
// ClientTimeout specifies a time limit for requests made by SubjectAccessReviews client.
// The default value is set to 10 seconds.
ClientTimeout time.Duration
} }
func NewDelegatingAuthorizationOptions() *DelegatingAuthorizationOptions { func NewDelegatingAuthorizationOptions() *DelegatingAuthorizationOptions {
...@@ -66,6 +70,7 @@ func NewDelegatingAuthorizationOptions() *DelegatingAuthorizationOptions { ...@@ -66,6 +70,7 @@ func NewDelegatingAuthorizationOptions() *DelegatingAuthorizationOptions {
// very low for responsiveness, but high enough to handle storms // very low for responsiveness, but high enough to handle storms
AllowCacheTTL: 10 * time.Second, AllowCacheTTL: 10 * time.Second,
DenyCacheTTL: 10 * time.Second, DenyCacheTTL: 10 * time.Second,
ClientTimeout: 10 * time.Second,
} }
} }
...@@ -81,6 +86,11 @@ func (s *DelegatingAuthorizationOptions) WithAlwaysAllowPaths(paths ...string) * ...@@ -81,6 +86,11 @@ func (s *DelegatingAuthorizationOptions) WithAlwaysAllowPaths(paths ...string) *
return s return s
} }
// WithClientTimeout sets the given timeout for SAR client used by this authorizer
func (s *DelegatingAuthorizationOptions) WithClientTimeout(timeout time.Duration) {
s.ClientTimeout = timeout
}
func (s *DelegatingAuthorizationOptions) Validate() []error { func (s *DelegatingAuthorizationOptions) Validate() []error {
allErrors := []error{} allErrors := []error{}
return allErrors return allErrors
...@@ -186,6 +196,7 @@ func (s *DelegatingAuthorizationOptions) getClient() (kubernetes.Interface, erro ...@@ -186,6 +196,7 @@ func (s *DelegatingAuthorizationOptions) getClient() (kubernetes.Interface, erro
// set high qps/burst limits since this will effectively limit API server responsiveness // set high qps/burst limits since this will effectively limit API server responsiveness
clientConfig.QPS = 200 clientConfig.QPS = 200
clientConfig.Burst = 400 clientConfig.Burst = 400
clientConfig.Timeout = s.ClientTimeout
return kubernetes.NewForConfig(clientConfig) return kubernetes.NewForConfig(clientConfig)
} }
...@@ -172,8 +172,10 @@ func (i *indexedWatchers) terminateAll(objectType reflect.Type, done func(*cache ...@@ -172,8 +172,10 @@ func (i *indexedWatchers) terminateAll(objectType reflect.Type, done func(*cache
// second in a bucket, and pop up them once at the timeout. To be more specific, // second in a bucket, and pop up them once at the timeout. To be more specific,
// if you set fire time at X, you can get the bookmark within (X-1,X+1) period. // if you set fire time at X, you can get the bookmark within (X-1,X+1) period.
type watcherBookmarkTimeBuckets struct { type watcherBookmarkTimeBuckets struct {
lock sync.Mutex lock sync.Mutex
// the key of watcherBuckets is the number of seconds since createTime
watchersBuckets map[int64][]*cacheWatcher watchersBuckets map[int64][]*cacheWatcher
createTime time.Time
startBucketID int64 startBucketID int64
clock clock.Clock clock clock.Clock
} }
...@@ -181,7 +183,8 @@ type watcherBookmarkTimeBuckets struct { ...@@ -181,7 +183,8 @@ type watcherBookmarkTimeBuckets struct {
func newTimeBucketWatchers(clock clock.Clock) *watcherBookmarkTimeBuckets { func newTimeBucketWatchers(clock clock.Clock) *watcherBookmarkTimeBuckets {
return &watcherBookmarkTimeBuckets{ return &watcherBookmarkTimeBuckets{
watchersBuckets: make(map[int64][]*cacheWatcher), watchersBuckets: make(map[int64][]*cacheWatcher),
startBucketID: clock.Now().Unix(), createTime: clock.Now(),
startBucketID: 0,
clock: clock, clock: clock,
} }
} }
...@@ -193,7 +196,7 @@ func (t *watcherBookmarkTimeBuckets) addWatcher(w *cacheWatcher) bool { ...@@ -193,7 +196,7 @@ func (t *watcherBookmarkTimeBuckets) addWatcher(w *cacheWatcher) bool {
if !ok { if !ok {
return false return false
} }
bucketID := nextTime.Unix() bucketID := int64(nextTime.Sub(t.createTime) / time.Second)
t.lock.Lock() t.lock.Lock()
defer t.lock.Unlock() defer t.lock.Unlock()
if bucketID < t.startBucketID { if bucketID < t.startBucketID {
...@@ -205,7 +208,7 @@ func (t *watcherBookmarkTimeBuckets) addWatcher(w *cacheWatcher) bool { ...@@ -205,7 +208,7 @@ func (t *watcherBookmarkTimeBuckets) addWatcher(w *cacheWatcher) bool {
} }
func (t *watcherBookmarkTimeBuckets) popExpiredWatchers() [][]*cacheWatcher { func (t *watcherBookmarkTimeBuckets) popExpiredWatchers() [][]*cacheWatcher {
currentBucketID := t.clock.Now().Unix() currentBucketID := int64(t.clock.Since(t.createTime) / time.Second)
// There should be one or two elements in almost all cases // There should be one or two elements in almost all cases
expiredWatchers := make([][]*cacheWatcher, 0, 2) expiredWatchers := make([][]*cacheWatcher, 0, 2)
t.lock.Lock() t.lock.Lock()
......
...@@ -3,8 +3,8 @@ package version ...@@ -3,8 +3,8 @@ package version
var ( var (
gitMajor = "1" gitMajor = "1"
gitMinor = "17" gitMinor = "17"
gitVersion = "v1.17.14-k3s1" gitVersion = "v1.17.15-k3s1"
gitCommit = "e6b7a7ca314e53c3539e5e70bd93fda6bd22c416" gitCommit = "6de5b4e17702a4184de16f8595a8abe7fbed209d"
gitTreeState = "clean" gitTreeState = "clean"
buildDate = "2020-11-11T21:47:59Z" buildDate = "2020-12-10T00:24:25Z"
) )
...@@ -3,8 +3,8 @@ package version ...@@ -3,8 +3,8 @@ package version
var ( var (
gitMajor = "1" gitMajor = "1"
gitMinor = "17" gitMinor = "17"
gitVersion = "v1.17.14-k3s1" gitVersion = "v1.17.15-k3s1"
gitCommit = "e6b7a7ca314e53c3539e5e70bd93fda6bd22c416" gitCommit = "6de5b4e17702a4184de16f8595a8abe7fbed209d"
gitTreeState = "clean" gitTreeState = "clean"
buildDate = "2020-11-11T21:47:59Z" buildDate = "2020-12-10T00:24:25Z"
) )
...@@ -9,6 +9,7 @@ load( ...@@ -9,6 +9,7 @@ load(
go_test( go_test(
name = "go_default_test", name = "go_default_test",
srcs = [ srcs = [
"init_windows_test.go",
"server_bootstrap_test.go", "server_bootstrap_test.go",
"server_test.go", "server_test.go",
], ],
...@@ -158,6 +159,7 @@ go_library( ...@@ -158,6 +159,7 @@ go_library(
], ],
"@io_bazel_rules_go//go/platform:windows": [ "@io_bazel_rules_go//go/platform:windows": [
"//pkg/windows/service:go_default_library", "//pkg/windows/service:go_default_library",
"//vendor/golang.org/x/sys/windows:go_default_library",
], ],
"//conditions:default": [], "//conditions:default": [],
}), }),
......
...@@ -18,6 +18,6 @@ limitations under the License. ...@@ -18,6 +18,6 @@ limitations under the License.
package app package app
func initForOS(service bool) error { func initForOS(service bool, priorityClass string) error {
return nil return nil
} }
...@@ -19,6 +19,10 @@ limitations under the License. ...@@ -19,6 +19,10 @@ limitations under the License.
package app package app
import ( import (
"fmt"
"golang.org/x/sys/windows"
"k8s.io/klog"
"k8s.io/kubernetes/pkg/windows/service" "k8s.io/kubernetes/pkg/windows/service"
) )
...@@ -26,7 +30,36 @@ const ( ...@@ -26,7 +30,36 @@ const (
serviceName = "kubelet" serviceName = "kubelet"
) )
func initForOS(windowsService bool) error { // getPriorityValue returns the value associated with a Windows process priorityClass
// Ref: https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/setpriority-method-in-class-win32-process
func getPriorityValue(priorityClassName string) uint32 {
var priorityClassMap = map[string]uint32{
"IDLE_PRIORITY_CLASS": uint32(64),
"BELOW_NORMAL_PRIORITY_CLASS": uint32(16384),
"NORMAL_PRIORITY_CLASS": uint32(32),
"ABOVE_NORMAL_PRIORITY_CLASS": uint32(32768),
"HIGH_PRIORITY_CLASS": uint32(128),
"REALTIME_PRIORITY_CLASS": uint32(256),
}
return priorityClassMap[priorityClassName]
}
func initForOS(windowsService bool, windowsPriorityClass string) error {
priority := getPriorityValue(windowsPriorityClass)
if priority == 0 {
return fmt.Errorf("unknown priority class %s, valid ones are available at "+
"https://docs.microsoft.com/en-us/windows/win32/procthread/scheduling-priorities", windowsPriorityClass)
}
kubeletProcessHandle, err := windows.GetCurrentProcess()
if err != nil {
return err
}
// Set the priority of the kubelet process to given priority
klog.Infof("Setting the priority of kubelet process to %s", windowsPriorityClass)
if err := windows.SetPriorityClass(kubeletProcessHandle, priority); err != nil {
return err
}
if windowsService { if windowsService {
return service.InitService(serviceName) return service.InitService(serviceName)
} }
......
...@@ -126,6 +126,13 @@ type KubeletFlags struct { ...@@ -126,6 +126,13 @@ type KubeletFlags struct {
// Its corresponding flag only gets registered in Windows builds. // Its corresponding flag only gets registered in Windows builds.
WindowsService bool WindowsService bool
// WindowsPriorityClass sets the priority class associated with the Kubelet process
// Its corresponding flag only gets registered in Windows builds
// The default priority class associated with any process in Windows is NORMAL_PRIORITY_CLASS. Keeping it as is
// to maintain backwards compatibility.
// Source: https://docs.microsoft.com/en-us/windows/win32/procthread/scheduling-priorities
WindowsPriorityClass string
// remoteRuntimeEndpoint is the endpoint of remote runtime service // remoteRuntimeEndpoint is the endpoint of remote runtime service
RemoteRuntimeEndpoint string RemoteRuntimeEndpoint string
// remoteImageEndpoint is the endpoint of remote image service // remoteImageEndpoint is the endpoint of remote image service
......
...@@ -24,4 +24,10 @@ import ( ...@@ -24,4 +24,10 @@ import (
func (f *KubeletFlags) addOSFlags(fs *pflag.FlagSet) { func (f *KubeletFlags) addOSFlags(fs *pflag.FlagSet) {
fs.BoolVar(&f.WindowsService, "windows-service", f.WindowsService, "Enable Windows Service Control Manager API integration") fs.BoolVar(&f.WindowsService, "windows-service", f.WindowsService, "Enable Windows Service Control Manager API integration")
// The default priority class associated with any process in Windows is NORMAL_PRIORITY_CLASS. Keeping it as is
// to maintain backwards compatibility.
// Source: https://docs.microsoft.com/en-us/windows/win32/procthread/scheduling-priorities
fs.StringVar(&f.WindowsPriorityClass, "windows-priorityclass", "NORMAL_PRIORITY_CLASS",
"Set the PriorityClass associated with kubelet process, the default ones are available at "+
"https://docs.microsoft.com/en-us/windows/win32/procthread/scheduling-priorities")
} }
...@@ -410,7 +410,7 @@ func UnsecuredDependencies(s *options.KubeletServer, featureGate featuregate.Fea ...@@ -410,7 +410,7 @@ func UnsecuredDependencies(s *options.KubeletServer, featureGate featuregate.Fea
func Run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, featureGate featuregate.FeatureGate, stopCh <-chan struct{}) error { func Run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, featureGate featuregate.FeatureGate, stopCh <-chan struct{}) error {
// To help debugging, immediately log version // To help debugging, immediately log version
klog.Infof("Version: %+v", version.Get()) klog.Infof("Version: %+v", version.Get())
if err := initForOS(s.KubeletFlags.WindowsService); err != nil { if err := initForOS(s.KubeletFlags.WindowsService, s.KubeletFlags.WindowsPriorityClass); err != nil {
return fmt.Errorf("failed OS init: %v", err) return fmt.Errorf("failed OS init: %v", err)
} }
if err := run(s, kubeDeps, featureGate, stopCh); err != nil { if err := run(s, kubeDeps, featureGate, stopCh); err != nil {
......
...@@ -21,6 +21,7 @@ package ipam ...@@ -21,6 +21,7 @@ package ipam
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"fmt"
"net" "net"
"k8s.io/klog" "k8s.io/klog"
...@@ -60,8 +61,12 @@ func newAdapter(k8s clientset.Interface, cloud *gce.Cloud) *adapter { ...@@ -60,8 +61,12 @@ func newAdapter(k8s clientset.Interface, cloud *gce.Cloud) *adapter {
return ret return ret
} }
func (a *adapter) Alias(ctx context.Context, nodeName string) (*net.IPNet, error) { func (a *adapter) Alias(ctx context.Context, node *v1.Node) (*net.IPNet, error) {
cidrs, err := a.cloud.AliasRanges(types.NodeName(nodeName)) if node.Spec.ProviderID == "" {
return nil, fmt.Errorf("node %s doesn't have providerID", node.Name)
}
cidrs, err := a.cloud.AliasRangesByProviderID(node.Spec.ProviderID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -72,7 +77,7 @@ func (a *adapter) Alias(ctx context.Context, nodeName string) (*net.IPNet, error ...@@ -72,7 +77,7 @@ func (a *adapter) Alias(ctx context.Context, nodeName string) (*net.IPNet, error
case 1: case 1:
break break
default: default:
klog.Warningf("Node %q has more than one alias assigned (%v), defaulting to the first", nodeName, cidrs) klog.Warningf("Node %q has more than one alias assigned (%v), defaulting to the first", node.Name, cidrs)
} }
_, cidrRange, err := net.ParseCIDR(cidrs[0]) _, cidrRange, err := net.ParseCIDR(cidrs[0])
...@@ -83,8 +88,12 @@ func (a *adapter) Alias(ctx context.Context, nodeName string) (*net.IPNet, error ...@@ -83,8 +88,12 @@ func (a *adapter) Alias(ctx context.Context, nodeName string) (*net.IPNet, error
return cidrRange, nil return cidrRange, nil
} }
func (a *adapter) AddAlias(ctx context.Context, nodeName string, cidrRange *net.IPNet) error { func (a *adapter) AddAlias(ctx context.Context, node *v1.Node, cidrRange *net.IPNet) error {
return a.cloud.AddAliasToInstance(types.NodeName(nodeName), cidrRange) if node.Spec.ProviderID == "" {
return fmt.Errorf("node %s doesn't have providerID", node.Name)
}
return a.cloud.AddAliasToInstanceByProviderID(node.Spec.ProviderID, cidrRange)
} }
func (a *adapter) Node(ctx context.Context, name string) (*v1.Node, error) { func (a *adapter) Node(ctx context.Context, name string) (*v1.Node, error) {
......
...@@ -249,8 +249,11 @@ func (ca *cloudCIDRAllocator) updateCIDRAllocation(nodeName string) error { ...@@ -249,8 +249,11 @@ func (ca *cloudCIDRAllocator) updateCIDRAllocation(nodeName string) error {
klog.Errorf("Failed while getting node %v for updating Node.Spec.PodCIDR: %v", nodeName, err) klog.Errorf("Failed while getting node %v for updating Node.Spec.PodCIDR: %v", nodeName, err)
return err return err
} }
if node.Spec.ProviderID == "" {
return fmt.Errorf("node %s doesn't have providerID", nodeName)
}
cidrs, err := ca.cloud.AliasRanges(types.NodeName(nodeName)) cidrs, err := ca.cloud.AliasRangesByProviderID(node.Spec.ProviderID)
if err != nil { if err != nil {
nodeutil.RecordNodeStatusChange(ca.recorder, node, "CIDRNotAvailable") nodeutil.RecordNodeStatusChange(ca.recorder, node, "CIDRNotAvailable")
return fmt.Errorf("failed to allocate cidr: %v", err) return fmt.Errorf("failed to allocate cidr: %v", err)
......
...@@ -43,9 +43,9 @@ const ( ...@@ -43,9 +43,9 @@ const (
// cloudAlias is the interface to the cloud platform APIs. // cloudAlias is the interface to the cloud platform APIs.
type cloudAlias interface { type cloudAlias interface {
// Alias returns the IP alias for the node. // Alias returns the IP alias for the node.
Alias(ctx context.Context, nodeName string) (*net.IPNet, error) Alias(ctx context.Context, node *v1.Node) (*net.IPNet, error)
// AddAlias adds an alias to the node. // AddAlias adds an alias to the node.
AddAlias(ctx context.Context, nodeName string, cidrRange *net.IPNet) error AddAlias(ctx context.Context, node *v1.Node, cidrRange *net.IPNet) error
} }
// kubeAPI is the interface to the Kubernetes APIs. // kubeAPI is the interface to the Kubernetes APIs.
...@@ -204,7 +204,7 @@ func (op *updateOp) run(sync *NodeSync) error { ...@@ -204,7 +204,7 @@ func (op *updateOp) run(sync *NodeSync) error {
op.node = node op.node = node
} }
aliasRange, err := sync.cloudAlias.Alias(ctx, sync.nodeName) aliasRange, err := sync.cloudAlias.Alias(ctx, op.node)
if err != nil { if err != nil {
klog.Errorf("Error getting cloud alias for node %q: %v", sync.nodeName, err) klog.Errorf("Error getting cloud alias for node %q: %v", sync.nodeName, err)
return err return err
...@@ -293,7 +293,7 @@ func (op *updateOp) updateAliasFromNode(ctx context.Context, sync *NodeSync, nod ...@@ -293,7 +293,7 @@ func (op *updateOp) updateAliasFromNode(ctx context.Context, sync *NodeSync, nod
return err return err
} }
if err := sync.cloudAlias.AddAlias(ctx, node.Name, aliasRange); err != nil { if err := sync.cloudAlias.AddAlias(ctx, node, aliasRange); err != nil {
klog.Errorf("Could not add alias %v for node %q: %v", aliasRange, node.Name, err) klog.Errorf("Could not add alias %v for node %q: %v", aliasRange, node.Name, err)
return err return err
} }
...@@ -325,7 +325,7 @@ func (op *updateOp) allocateRange(ctx context.Context, sync *NodeSync, node *v1. ...@@ -325,7 +325,7 @@ func (op *updateOp) allocateRange(ctx context.Context, sync *NodeSync, node *v1.
// If addAlias returns a hard error, cidrRange will be leaked as there // If addAlias returns a hard error, cidrRange will be leaked as there
// is no durable record of the range. The missing space will be // is no durable record of the range. The missing space will be
// recovered on the next restart of the controller. // recovered on the next restart of the controller.
if err := sync.cloudAlias.AddAlias(ctx, node.Name, cidrRange); err != nil { if err := sync.cloudAlias.AddAlias(ctx, node, cidrRange); err != nil {
klog.Errorf("Could not add alias %v for node %q: %v", cidrRange, node.Name, err) klog.Errorf("Could not add alias %v for node %q: %v", cidrRange, node.Name, err)
return err return err
} }
......
...@@ -510,19 +510,30 @@ func (m *kubeGenericRuntimeManager) computePodActions(pod *v1.Pod, podStatus *ku ...@@ -510,19 +510,30 @@ func (m *kubeGenericRuntimeManager) computePodActions(pod *v1.Pod, podStatus *ku
changes.CreateSandbox = false changes.CreateSandbox = false
return changes return changes
} }
// Get the containers to start, excluding the ones that succeeded if RestartPolicy is OnFailure.
var containersToStart []int
for idx, c := range pod.Spec.Containers {
if pod.Spec.RestartPolicy == v1.RestartPolicyOnFailure && containerSucceeded(&c, podStatus) {
continue
}
containersToStart = append(containersToStart, idx)
}
// We should not create a sandbox for a Pod if initialization is done and there is no container to start.
if len(containersToStart) == 0 {
_, _, done := findNextInitContainerToRun(pod, podStatus)
if done {
changes.CreateSandbox = false
return changes
}
}
if len(pod.Spec.InitContainers) != 0 { if len(pod.Spec.InitContainers) != 0 {
// Pod has init containers, return the first one. // Pod has init containers, return the first one.
changes.NextInitContainerToStart = &pod.Spec.InitContainers[0] changes.NextInitContainerToStart = &pod.Spec.InitContainers[0]
return changes return changes
} }
// Start all containers by default but exclude the ones that succeeded if changes.ContainersToStart = containersToStart
// RestartPolicy is OnFailure.
for idx, c := range pod.Spec.Containers {
if containerSucceeded(&c, podStatus) && pod.Spec.RestartPolicy == v1.RestartPolicyOnFailure {
continue
}
changes.ContainersToStart = append(changes.ContainersToStart, idx)
}
return changes return changes
} }
......
...@@ -74,7 +74,9 @@ var maxDataDiskCountMap = map[string]int64{ ...@@ -74,7 +74,9 @@ var maxDataDiskCountMap = map[string]int64{
"STANDARD_D16DS_V4": 32, "STANDARD_D16DS_V4": 32,
"STANDARD_D16D_V4": 32, "STANDARD_D16D_V4": 32,
"STANDARD_D16S_V3": 32, "STANDARD_D16S_V3": 32,
"STANDARD_D16S_V4": 32,
"STANDARD_D16_V3": 32, "STANDARD_D16_V3": 32,
"STANDARD_D16_V4": 32,
"STANDARD_D1_V2": 4, "STANDARD_D1_V2": 4,
"STANDARD_D2": 8, "STANDARD_D2": 8,
"STANDARD_D2AS_V4": 4, "STANDARD_D2AS_V4": 4,
...@@ -82,16 +84,20 @@ var maxDataDiskCountMap = map[string]int64{ ...@@ -82,16 +84,20 @@ var maxDataDiskCountMap = map[string]int64{
"STANDARD_D2DS_V4": 4, "STANDARD_D2DS_V4": 4,
"STANDARD_D2D_V4": 4, "STANDARD_D2D_V4": 4,
"STANDARD_D2S_V3": 4, "STANDARD_D2S_V3": 4,
"STANDARD_D2S_V4": 4,
"STANDARD_D2_V2": 8, "STANDARD_D2_V2": 8,
"STANDARD_D2_V2_PROMO": 8, "STANDARD_D2_V2_PROMO": 8,
"STANDARD_D2_V3": 4, "STANDARD_D2_V3": 4,
"STANDARD_D2_V4": 4,
"STANDARD_D3": 16, "STANDARD_D3": 16,
"STANDARD_D32AS_V4": 32, "STANDARD_D32AS_V4": 32,
"STANDARD_D32A_V4": 32, "STANDARD_D32A_V4": 32,
"STANDARD_D32DS_V4": 32, "STANDARD_D32DS_V4": 32,
"STANDARD_D32D_V4": 32, "STANDARD_D32D_V4": 32,
"STANDARD_D32S_V3": 32, "STANDARD_D32S_V3": 32,
"STANDARD_D32S_V4": 32,
"STANDARD_D32_V3": 32, "STANDARD_D32_V3": 32,
"STANDARD_D32_V4": 32,
"STANDARD_D3_V2": 16, "STANDARD_D3_V2": 16,
"STANDARD_D3_V2_PROMO": 16, "STANDARD_D3_V2_PROMO": 16,
"STANDARD_D4": 32, "STANDARD_D4": 32,
...@@ -100,15 +106,19 @@ var maxDataDiskCountMap = map[string]int64{ ...@@ -100,15 +106,19 @@ var maxDataDiskCountMap = map[string]int64{
"STANDARD_D48DS_V4": 32, "STANDARD_D48DS_V4": 32,
"STANDARD_D48D_V4": 32, "STANDARD_D48D_V4": 32,
"STANDARD_D48S_V3": 32, "STANDARD_D48S_V3": 32,
"STANDARD_D48S_V4": 32,
"STANDARD_D48_V3": 32, "STANDARD_D48_V3": 32,
"STANDARD_D48_V4": 32,
"STANDARD_D4AS_V4": 8, "STANDARD_D4AS_V4": 8,
"STANDARD_D4A_V4": 8, "STANDARD_D4A_V4": 8,
"STANDARD_D4DS_V4": 8, "STANDARD_D4DS_V4": 8,
"STANDARD_D4D_V4": 8, "STANDARD_D4D_V4": 8,
"STANDARD_D4S_V3": 8, "STANDARD_D4S_V3": 8,
"STANDARD_D4S_V4": 8,
"STANDARD_D4_V2": 32, "STANDARD_D4_V2": 32,
"STANDARD_D4_V2_PROMO": 32, "STANDARD_D4_V2_PROMO": 32,
"STANDARD_D4_V3": 8, "STANDARD_D4_V3": 8,
"STANDARD_D4_V4": 8,
"STANDARD_D5_V2": 64, "STANDARD_D5_V2": 64,
"STANDARD_D5_V2_PROMO": 64, "STANDARD_D5_V2_PROMO": 64,
"STANDARD_D64AS_V4": 32, "STANDARD_D64AS_V4": 32,
...@@ -116,13 +126,17 @@ var maxDataDiskCountMap = map[string]int64{ ...@@ -116,13 +126,17 @@ var maxDataDiskCountMap = map[string]int64{
"STANDARD_D64DS_V4": 32, "STANDARD_D64DS_V4": 32,
"STANDARD_D64D_V4": 32, "STANDARD_D64D_V4": 32,
"STANDARD_D64S_V3": 32, "STANDARD_D64S_V3": 32,
"STANDARD_D64S_V4": 32,
"STANDARD_D64_V3": 32, "STANDARD_D64_V3": 32,
"STANDARD_D64_V4": 32,
"STANDARD_D8AS_V4": 16, "STANDARD_D8AS_V4": 16,
"STANDARD_D8A_V4": 16, "STANDARD_D8A_V4": 16,
"STANDARD_D8DS_V4": 16, "STANDARD_D8DS_V4": 16,
"STANDARD_D8D_V4": 16, "STANDARD_D8D_V4": 16,
"STANDARD_D8S_V3": 16, "STANDARD_D8S_V3": 16,
"STANDARD_D8S_V4": 16,
"STANDARD_D8_V3": 16, "STANDARD_D8_V3": 16,
"STANDARD_D8_V4": 16,
"STANDARD_D96AS_V4": 32, "STANDARD_D96AS_V4": 32,
"STANDARD_D96A_V4": 32, "STANDARD_D96A_V4": 32,
"STANDARD_DC1S_V2": 1, "STANDARD_DC1S_V2": 1,
...@@ -130,6 +144,7 @@ var maxDataDiskCountMap = map[string]int64{ ...@@ -130,6 +144,7 @@ var maxDataDiskCountMap = map[string]int64{
"STANDARD_DC2S_V2": 2, "STANDARD_DC2S_V2": 2,
"STANDARD_DC4S": 4, "STANDARD_DC4S": 4,
"STANDARD_DC4S_V2": 4, "STANDARD_DC4S_V2": 4,
"STANDARD_DC8S": 8,
"STANDARD_DC8_V2": 8, "STANDARD_DC8_V2": 8,
"STANDARD_DS11-1_V2": 8, "STANDARD_DS11-1_V2": 8,
"STANDARD_DS11": 8, "STANDARD_DS11": 8,
...@@ -164,55 +179,82 @@ var maxDataDiskCountMap = map[string]int64{ ...@@ -164,55 +179,82 @@ var maxDataDiskCountMap = map[string]int64{
"STANDARD_DS4_V2_PROMO": 32, "STANDARD_DS4_V2_PROMO": 32,
"STANDARD_DS5_V2": 64, "STANDARD_DS5_V2": 64,
"STANDARD_DS5_V2_PROMO": 64, "STANDARD_DS5_V2_PROMO": 64,
"STANDARD_E16-4AS_V4": 32,
"STANDARD_E16-4DS_V4": 32, "STANDARD_E16-4DS_V4": 32,
"STANDARD_E16-4S_V3": 32, "STANDARD_E16-4S_V3": 32,
"STANDARD_E16-4S_V4": 32,
"STANDARD_E16-8AS_V4": 32,
"STANDARD_E16-8DS_V4": 32, "STANDARD_E16-8DS_V4": 32,
"STANDARD_E16-8S_V3": 32, "STANDARD_E16-8S_V3": 32,
"STANDARD_E16-8S_V4": 32,
"STANDARD_E16AS_V4": 32, "STANDARD_E16AS_V4": 32,
"STANDARD_E16A_V4": 32, "STANDARD_E16A_V4": 32,
"STANDARD_E16DS_V4": 32, "STANDARD_E16DS_V4": 32,
"STANDARD_E16D_V4": 32, "STANDARD_E16D_V4": 32,
"STANDARD_E16S_V3": 32, "STANDARD_E16S_V3": 32,
"STANDARD_E16S_V4": 32,
"STANDARD_E16_V3": 32, "STANDARD_E16_V3": 32,
"STANDARD_E16_V4": 32,
"STANDARD_E20AS_V4": 32, "STANDARD_E20AS_V4": 32,
"STANDARD_E20A_V4": 32, "STANDARD_E20A_V4": 32,
"STANDARD_E20DS_V4": 32, "STANDARD_E20DS_V4": 32,
"STANDARD_E20D_V4": 32, "STANDARD_E20D_V4": 32,
"STANDARD_E20S_V3": 32, "STANDARD_E20S_V3": 32,
"STANDARD_E20S_V4": 32,
"STANDARD_E20_V3": 32, "STANDARD_E20_V3": 32,
"STANDARD_E20_V4": 32,
"STANDARD_E2AS_V4": 4, "STANDARD_E2AS_V4": 4,
"STANDARD_E2A_V4": 4, "STANDARD_E2A_V4": 4,
"STANDARD_E2DS_V4": 4, "STANDARD_E2DS_V4": 4,
"STANDARD_E2D_V4": 4, "STANDARD_E2D_V4": 4,
"STANDARD_E2S_V3": 4, "STANDARD_E2S_V3": 4,
"STANDARD_E2S_V4": 4,
"STANDARD_E2_V3": 4, "STANDARD_E2_V3": 4,
"STANDARD_E2_V4": 4,
"STANDARD_E32-16AS_V4": 32,
"STANDARD_E32-16DS_V4": 32, "STANDARD_E32-16DS_V4": 32,
"STANDARD_E32-16S_V3": 32, "STANDARD_E32-16S_V3": 32,
"STANDARD_E32-16S_V4": 32,
"STANDARD_E32-8AS_V4": 32,
"STANDARD_E32-8DS_V4": 32, "STANDARD_E32-8DS_V4": 32,
"STANDARD_E32-8S_V3": 32, "STANDARD_E32-8S_V3": 32,
"STANDARD_E32-8S_V4": 32,
"STANDARD_E32AS_V4": 32, "STANDARD_E32AS_V4": 32,
"STANDARD_E32A_V4": 32, "STANDARD_E32A_V4": 32,
"STANDARD_E32DS_V4": 32, "STANDARD_E32DS_V4": 32,
"STANDARD_E32D_V4": 32, "STANDARD_E32D_V4": 32,
"STANDARD_E32S_V3": 32, "STANDARD_E32S_V3": 32,
"STANDARD_E32S_V4": 32,
"STANDARD_E32_V3": 32, "STANDARD_E32_V3": 32,
"STANDARD_E32_V4": 32,
"STANDARD_E4-2AS_V4": 8,
"STANDARD_E4-2DS_V4": 8, "STANDARD_E4-2DS_V4": 8,
"STANDARD_E4-2S_V3": 8, "STANDARD_E4-2S_V3": 8,
"STANDARD_E4-2S_V4": 8,
"STANDARD_E48AS_V4": 32, "STANDARD_E48AS_V4": 32,
"STANDARD_E48A_V4": 32, "STANDARD_E48A_V4": 32,
"STANDARD_E48DS_V4": 32, "STANDARD_E48DS_V4": 32,
"STANDARD_E48D_V4": 32, "STANDARD_E48D_V4": 32,
"STANDARD_E48S_V3": 32, "STANDARD_E48S_V3": 32,
"STANDARD_E48S_V4": 32,
"STANDARD_E48_V3": 32, "STANDARD_E48_V3": 32,
"STANDARD_E48_V4": 32,
"STANDARD_E4AS_V4": 8, "STANDARD_E4AS_V4": 8,
"STANDARD_E4A_V4": 8, "STANDARD_E4A_V4": 8,
"STANDARD_E4DS_V4": 8, "STANDARD_E4DS_V4": 8,
"STANDARD_E4D_V4": 8, "STANDARD_E4D_V4": 8,
"STANDARD_E4S_V3": 8, "STANDARD_E4S_V3": 8,
"STANDARD_E4S_V4": 8,
"STANDARD_E4_V3": 8, "STANDARD_E4_V3": 8,
"STANDARD_E4_V4": 8,
"STANDARD_E64-16AS_V4": 32,
"STANDARD_E64-16DS_V4": 32, "STANDARD_E64-16DS_V4": 32,
"STANDARD_E64-16S_V3": 32, "STANDARD_E64-16S_V3": 32,
"STANDARD_E64-16S_V4": 32,
"STANDARD_E64-32AS_V4": 32,
"STANDARD_E64-32DS_V4": 32,
"STANDARD_E64-32S_V3": 32, "STANDARD_E64-32S_V3": 32,
"STANDARD_E64-32S_V4": 32,
"STANDARD_E64AS_V4": 32, "STANDARD_E64AS_V4": 32,
"STANDARD_E64A_V4": 32, "STANDARD_E64A_V4": 32,
"STANDARD_E64DS_V4": 32, "STANDARD_E64DS_V4": 32,
...@@ -220,17 +262,29 @@ var maxDataDiskCountMap = map[string]int64{ ...@@ -220,17 +262,29 @@ var maxDataDiskCountMap = map[string]int64{
"STANDARD_E64IS_V3": 32, "STANDARD_E64IS_V3": 32,
"STANDARD_E64I_V3": 32, "STANDARD_E64I_V3": 32,
"STANDARD_E64S_V3": 32, "STANDARD_E64S_V3": 32,
"STANDARD_E64S_V4": 32,
"STANDARD_E64_V3": 32, "STANDARD_E64_V3": 32,
"STANDARD_E64_V4": 32,
"STANDARD_E80IDS_V4": 32,
"STANDARD_E80IS_V4": 32,
"STANDARD_E8-2AS_V4": 16,
"STANDARD_E8-2DS_V4": 16, "STANDARD_E8-2DS_V4": 16,
"STANDARD_E8-2S_V3": 16, "STANDARD_E8-2S_V3": 16,
"STANDARD_E8-2S_V4": 16,
"STANDARD_E8-4AS_V4": 16,
"STANDARD_E8-4DS_V4": 16, "STANDARD_E8-4DS_V4": 16,
"STANDARD_E8-4S_V3": 16, "STANDARD_E8-4S_V3": 16,
"STANDARD_E8-4S_V4": 16,
"STANDARD_E8AS_V4": 16, "STANDARD_E8AS_V4": 16,
"STANDARD_E8A_V4": 16, "STANDARD_E8A_V4": 16,
"STANDARD_E8DS_V4": 16, "STANDARD_E8DS_V4": 16,
"STANDARD_E8D_V4": 16, "STANDARD_E8D_V4": 16,
"STANDARD_E8S_V3": 16, "STANDARD_E8S_V3": 16,
"STANDARD_E8S_V4": 16,
"STANDARD_E8_V3": 16, "STANDARD_E8_V3": 16,
"STANDARD_E8_V4": 16,
"STANDARD_E96-24AS_V4": 32,
"STANDARD_E96-48AS_V4": 32,
"STANDARD_E96AS_V4": 32, "STANDARD_E96AS_V4": 32,
"STANDARD_E96A_V4": 32, "STANDARD_E96A_V4": 32,
"STANDARD_F1": 4, "STANDARD_F1": 4,
...@@ -324,6 +378,7 @@ var maxDataDiskCountMap = map[string]int64{ ...@@ -324,6 +378,7 @@ var maxDataDiskCountMap = map[string]int64{
"STANDARD_NC12_PROMO": 48, "STANDARD_NC12_PROMO": 48,
"STANDARD_NC12S_V2": 24, "STANDARD_NC12S_V2": 24,
"STANDARD_NC12S_V3": 24, "STANDARD_NC12S_V3": 24,
"STANDARD_NC16AS_T4_V3": 32,
"STANDARD_NC24": 64, "STANDARD_NC24": 64,
"STANDARD_NC24_PROMO": 64, "STANDARD_NC24_PROMO": 64,
"STANDARD_NC24R": 64, "STANDARD_NC24R": 64,
...@@ -332,10 +387,13 @@ var maxDataDiskCountMap = map[string]int64{ ...@@ -332,10 +387,13 @@ var maxDataDiskCountMap = map[string]int64{
"STANDARD_NC24RS_V3": 32, "STANDARD_NC24RS_V3": 32,
"STANDARD_NC24S_V2": 32, "STANDARD_NC24S_V2": 32,
"STANDARD_NC24S_V3": 32, "STANDARD_NC24S_V3": 32,
"STANDARD_NC4AS_T4_V3": 8,
"STANDARD_NC6": 24, "STANDARD_NC6": 24,
"STANDARD_NC64AS_T4_V3": 32,
"STANDARD_NC6_PROMO": 24, "STANDARD_NC6_PROMO": 24,
"STANDARD_NC6S_V2": 12, "STANDARD_NC6S_V2": 12,
"STANDARD_NC6S_V3": 12, "STANDARD_NC6S_V3": 12,
"STANDARD_NC8AS_T4_V3": 16,
"STANDARD_ND12S": 24, "STANDARD_ND12S": 24,
"STANDARD_ND24RS": 32, "STANDARD_ND24RS": 32,
"STANDARD_ND24S": 32, "STANDARD_ND24S": 32,
......
...@@ -278,7 +278,7 @@ func (az *Cloud) CreateOrUpdateLB(service *v1.Service, lb network.LoadBalancer) ...@@ -278,7 +278,7 @@ func (az *Cloud) CreateOrUpdateLB(service *v1.Service, lb network.LoadBalancer)
az.lbCache.Delete(*lb.Name) az.lbCache.Delete(*lb.Name)
} }
// The LB update may fail because the referenced PIP is not in the Succeeded provisioning state // The LB update may fail because the referenced PIP is not in the Succeeded provisioning state
if strings.Contains(strings.ToLower(err.Error()), strings.ToLower(referencedResourceNotProvisionedMessageCode)) { if err != nil && strings.Contains(strings.ToLower(err.Error()), strings.ToLower(referencedResourceNotProvisionedMessageCode)) {
matches := pipErrorMessageRE.FindStringSubmatch(err.Error()) matches := pipErrorMessageRE.FindStringSubmatch(err.Error())
if len(matches) != 3 { if len(matches) != 3 {
klog.Warningf("Failed to parse the retry error message %s", err.Error()) klog.Warningf("Failed to parse the retry error message %s", err.Error())
......
...@@ -278,6 +278,9 @@ func (c *ManagedDiskController) ResizeDisk(diskURI string, oldSize resource.Quan ...@@ -278,6 +278,9 @@ func (c *ManagedDiskController) ResizeDisk(diskURI string, oldSize resource.Quan
return newSizeQuant, nil return newSizeQuant, nil
} }
if result.DiskProperties.DiskState != compute.Unattached {
return oldSize, fmt.Errorf("azureDisk - disk resize is only supported on Unattached disk, current disk state: %s, already attached to %s", result.DiskProperties.DiskState, to.String(result.ManagedBy))
}
result.DiskProperties.DiskSizeGB = &requestGiB result.DiskProperties.DiskSizeGB = &requestGiB
ctx, cancel = getContextWithCancel() ctx, cancel = getContextWithCancel()
......
...@@ -99,6 +99,13 @@ type Cloud struct { ...@@ -99,6 +99,13 @@ type Cloud struct {
// for the cloudprovider to start watching the configmap. // for the cloudprovider to start watching the configmap.
ClusterID ClusterID ClusterID ClusterID
// initializer is used for lazy initialization of subnetworkURL
// and isLegacyNetwork fields if they are not passed via the config.
// The reason is to avoid GCE API calls to initialize them if they
// will never be used. This is especially important when
// it is run from Kubelets, as there can be thousands of them.
subnetworkURLAndIsLegacyNetworkInitializer sync.Once
service *compute.Service service *compute.Service
serviceBeta *computebeta.Service serviceBeta *computebeta.Service
serviceAlpha *computealpha.Service serviceAlpha *computealpha.Service
...@@ -115,10 +122,14 @@ type Cloud struct { ...@@ -115,10 +122,14 @@ type Cloud struct {
// managedZones will be set to the 1 zone if running a single zone cluster // managedZones will be set to the 1 zone if running a single zone cluster
// it will be set to ALL zones in region for any multi-zone cluster // it will be set to ALL zones in region for any multi-zone cluster
// Use GetAllCurrentZones to get only zones that contain nodes // Use GetAllCurrentZones to get only zones that contain nodes
managedZones []string managedZones []string
networkURL string networkURL string
isLegacyNetwork bool // unsafeIsLegacyNetwork should be used only via IsLegacyNetwork() accessor,
subnetworkURL string // to ensure it was properly initialized.
unsafeIsLegacyNetwork bool
// unsafeSubnetworkURL should be used only via SubnetworkURL() accessor,
// to ensure it was properly initialized.
unsafeSubnetworkURL string
secondaryRangeName string secondaryRangeName string
networkProjectID string networkProjectID string
onXPN bool onXPN bool
...@@ -465,32 +476,12 @@ func CreateGCECloud(config *CloudConfig) (*Cloud, error) { ...@@ -465,32 +476,12 @@ func CreateGCECloud(config *CloudConfig) (*Cloud, error) {
subnetURL = config.SubnetworkURL subnetURL = config.SubnetworkURL
} else if config.SubnetworkName != "" { } else if config.SubnetworkName != "" {
subnetURL = gceSubnetworkURL(config.APIEndpoint, netProjID, config.Region, config.SubnetworkName) subnetURL = gceSubnetworkURL(config.APIEndpoint, netProjID, config.Region, config.SubnetworkName)
} else {
// Determine the type of network and attempt to discover the correct subnet for AUTO mode.
// Gracefully fail because kubelet calls CreateGCECloud without any config, and minions
// lack the proper credentials for API calls.
if networkName := lastComponent(networkURL); networkName != "" {
var n *compute.Network
if n, err = getNetwork(service, netProjID, networkName); err != nil {
klog.Warningf("Could not retrieve network %q; err: %v", networkName, err)
} else {
switch typeOfNetwork(n) {
case netTypeLegacy:
klog.Infof("Network %q is type legacy - no subnetwork", networkName)
isLegacyNetwork = true
case netTypeCustom:
klog.Warningf("Network %q is type custom - cannot auto select a subnetwork", networkName)
case netTypeAuto:
subnetURL, err = determineSubnetURL(service, netProjID, networkName, config.Region)
if err != nil {
klog.Warningf("Could not determine subnetwork for network %q and region %v; err: %v", networkName, config.Region, err)
} else {
klog.Infof("Auto selecting subnetwork %q", subnetURL)
}
}
}
}
} }
// If neither SubnetworkURL nor SubnetworkName are provided, defer to
// lazy initialization. Determining subnetURL and isLegacyNetwork requires
// GCE API call. Given that it's not used in many cases and the fact that
// the provider is initialized also for Kubelets (and there can be thousands
// of them) we defer to lazy initialization here.
if len(config.ManagedZones) == 0 { if len(config.ManagedZones) == 0 {
config.ManagedZones, err = getZonesForRegion(service, config.ProjectID, config.Region) config.ManagedZones, err = getZonesForRegion(service, config.ProjectID, config.Region)
...@@ -518,8 +509,8 @@ func CreateGCECloud(config *CloudConfig) (*Cloud, error) { ...@@ -518,8 +509,8 @@ func CreateGCECloud(config *CloudConfig) (*Cloud, error) {
localZone: config.Zone, localZone: config.Zone,
managedZones: config.ManagedZones, managedZones: config.ManagedZones,
networkURL: networkURL, networkURL: networkURL,
isLegacyNetwork: isLegacyNetwork, unsafeIsLegacyNetwork: isLegacyNetwork,
subnetworkURL: subnetURL, unsafeSubnetworkURL: subnetURL,
secondaryRangeName: config.SecondaryRangeName, secondaryRangeName: config.SecondaryRangeName,
nodeTags: config.NodeTags, nodeTags: config.NodeTags,
nodeInstancePrefix: config.NodeInstancePrefix, nodeInstancePrefix: config.NodeInstancePrefix,
...@@ -542,6 +533,45 @@ func CreateGCECloud(config *CloudConfig) (*Cloud, error) { ...@@ -542,6 +533,45 @@ func CreateGCECloud(config *CloudConfig) (*Cloud, error) {
return gce, nil return gce, nil
} }
// initializeNetworkConfig() is supposed to be called under sync.Once()
// for accessors to subnetworkURL and isLegacyNetwork fields.
func (g *Cloud) initializeSubnetworkURLAndIsLegacyNetwork() {
if g.unsafeSubnetworkURL != "" {
// This has already been initialized via the config.
return
}
var subnetURL string
var isLegacyNetwork bool
// Determine the type of network and attempt to discover the correct subnet for AUTO mode.
// Gracefully fail because kubelet calls CreateGCECloud without any config, and minions
// lack the proper credentials for API calls.
if networkName := lastComponent(g.NetworkURL()); networkName != "" {
if n, err := getNetwork(g.service, g.NetworkProjectID(), networkName); err != nil {
klog.Warningf("Could not retrieve network %q; err: %v", networkName, err)
} else {
switch typeOfNetwork(n) {
case netTypeLegacy:
klog.Infof("Network %q is type legacy - no subnetwork", networkName)
isLegacyNetwork = true
case netTypeCustom:
klog.Warningf("Network %q is type custom - cannot auto select a subnetwork", networkName)
case netTypeAuto:
subnetURL, err = determineSubnetURL(g.service, g.NetworkProjectID(), networkName, g.Region())
if err != nil {
klog.Warningf("Could not determine subnetwork for network %q and region %v; err: %v", networkName, g.Region(), err)
} else {
klog.Infof("Auto selecting subnetwork %q", subnetURL)
}
}
}
}
g.unsafeSubnetworkURL = subnetURL
g.unsafeIsLegacyNetwork = isLegacyNetwork
}
// SetRateLimiter adds a custom cloud.RateLimiter implementation. // SetRateLimiter adds a custom cloud.RateLimiter implementation.
// WARNING: Calling this could have unexpected behavior if you have in-flight // WARNING: Calling this could have unexpected behavior if you have in-flight
// requests. It is best to use this immediately after creating a Cloud. // requests. It is best to use this immediately after creating a Cloud.
...@@ -672,12 +702,14 @@ func (g *Cloud) NetworkURL() string { ...@@ -672,12 +702,14 @@ func (g *Cloud) NetworkURL() string {
// SubnetworkURL returns the subnetwork url // SubnetworkURL returns the subnetwork url
func (g *Cloud) SubnetworkURL() string { func (g *Cloud) SubnetworkURL() string {
return g.subnetworkURL g.subnetworkURLAndIsLegacyNetworkInitializer.Do(g.initializeSubnetworkURLAndIsLegacyNetwork)
return g.unsafeSubnetworkURL
} }
// IsLegacyNetwork returns true if the cluster is still running a legacy network configuration. // IsLegacyNetwork returns true if the cluster is still running a legacy network configuration.
func (g *Cloud) IsLegacyNetwork() bool { func (g *Cloud) IsLegacyNetwork() bool {
return g.isLegacyNetwork g.subnetworkURLAndIsLegacyNetworkInitializer.Do(g.initializeSubnetworkURLAndIsLegacyNetwork)
return g.unsafeIsLegacyNetwork
} }
// SetInformers sets up the zone handlers we need watching for node changes. // SetInformers sets up the zone handlers we need watching for node changes.
......
...@@ -361,21 +361,20 @@ func (g *Cloud) CurrentNodeName(ctx context.Context, hostname string) (types.Nod ...@@ -361,21 +361,20 @@ func (g *Cloud) CurrentNodeName(ctx context.Context, hostname string) (types.Nod
return types.NodeName(hostname), nil return types.NodeName(hostname), nil
} }
// AliasRanges returns a list of CIDR ranges that are assigned to the // AliasRangesByProviderID returns a list of CIDR ranges that are assigned to the
// `node` for allocation to pods. Returns a list of the form // `node` for allocation to pods. Returns a list of the form
// "<ip>/<netmask>". // "<ip>/<netmask>".
func (g *Cloud) AliasRanges(nodeName types.NodeName) (cidrs []string, err error) { func (g *Cloud) AliasRangesByProviderID(providerID string) (cidrs []string, err error) {
ctx, cancel := cloud.ContextWithCallTimeout() ctx, cancel := cloud.ContextWithCallTimeout()
defer cancel() defer cancel()
var instance *gceInstance _, zone, name, err := splitProviderID(providerID)
instance, err = g.getInstanceByName(mapNodeNameToInstanceName(nodeName))
if err != nil { if err != nil {
return return nil, err
} }
var res *computebeta.Instance var res *computebeta.Instance
res, err = g.c.BetaInstances().Get(ctx, meta.ZonalKey(instance.Name, lastComponent(instance.Zone))) res, err = g.c.BetaInstances().Get(ctx, meta.ZonalKey(canonicalizeInstanceName(name), zone))
if err != nil { if err != nil {
return return
} }
...@@ -388,28 +387,29 @@ func (g *Cloud) AliasRanges(nodeName types.NodeName) (cidrs []string, err error) ...@@ -388,28 +387,29 @@ func (g *Cloud) AliasRanges(nodeName types.NodeName) (cidrs []string, err error)
return return
} }
// AddAliasToInstance adds an alias to the given instance from the named // AddAliasToInstanceByProviderID adds an alias to the given instance from the named
// secondary range. // secondary range.
func (g *Cloud) AddAliasToInstance(nodeName types.NodeName, alias *net.IPNet) error { func (g *Cloud) AddAliasToInstanceByProviderID(providerID string, alias *net.IPNet) error {
ctx, cancel := cloud.ContextWithCallTimeout() ctx, cancel := cloud.ContextWithCallTimeout()
defer cancel() defer cancel()
v1instance, err := g.getInstanceByName(mapNodeNameToInstanceName(nodeName)) _, zone, name, err := splitProviderID(providerID)
if err != nil { if err != nil {
return err return err
} }
instance, err := g.c.BetaInstances().Get(ctx, meta.ZonalKey(v1instance.Name, lastComponent(v1instance.Zone)))
instance, err := g.c.BetaInstances().Get(ctx, meta.ZonalKey(canonicalizeInstanceName(name), zone))
if err != nil { if err != nil {
return err return err
} }
switch len(instance.NetworkInterfaces) { switch len(instance.NetworkInterfaces) {
case 0: case 0:
return fmt.Errorf("instance %q has no network interfaces", nodeName) return fmt.Errorf("instance %q has no network interfaces", providerID)
case 1: case 1:
default: default:
klog.Warningf("Instance %q has more than one network interface, using only the first (%v)", klog.Warningf("Instance %q has more than one network interface, using only the first (%v)",
nodeName, instance.NetworkInterfaces) providerID, instance.NetworkInterfaces)
} }
iface := &computebeta.NetworkInterface{} iface := &computebeta.NetworkInterface{}
...@@ -420,7 +420,7 @@ func (g *Cloud) AddAliasToInstance(nodeName types.NodeName, alias *net.IPNet) er ...@@ -420,7 +420,7 @@ func (g *Cloud) AddAliasToInstance(nodeName types.NodeName, alias *net.IPNet) er
SubnetworkRangeName: g.secondaryRangeName, SubnetworkRangeName: g.secondaryRangeName,
}) })
mc := newInstancesMetricContext("add_alias", v1instance.Zone) mc := newInstancesMetricContext("add_alias", zone)
err = g.c.BetaInstances().UpdateNetworkInterface(ctx, meta.ZonalKey(instance.Name, lastComponent(instance.Zone)), iface.Name, iface) err = g.c.BetaInstances().UpdateNetworkInterface(ctx, meta.ZonalKey(instance.Name, lastComponent(instance.Zone)), iface.Name, iface)
return mc.Observe(err) return mc.Observe(err)
} }
......
...@@ -33,7 +33,6 @@ import ( ...@@ -33,7 +33,6 @@ import (
servicehelpers "k8s.io/cloud-provider/service/helpers" servicehelpers "k8s.io/cloud-provider/service/helpers"
utilnet "k8s.io/utils/net" utilnet "k8s.io/utils/net"
computealpha "google.golang.org/api/compute/v0.alpha"
compute "google.golang.org/api/compute/v1" compute "google.golang.org/api/compute/v1"
"k8s.io/klog" "k8s.io/klog"
) )
...@@ -932,30 +931,18 @@ func createForwardingRule(s CloudForwardingRuleService, name, serviceName, regio ...@@ -932,30 +931,18 @@ func createForwardingRule(s CloudForwardingRuleService, name, serviceName, regio
desc := makeServiceDescription(serviceName) desc := makeServiceDescription(serviceName)
ipProtocol := string(ports[0].Protocol) ipProtocol := string(ports[0].Protocol)
switch netTier { rule := &compute.ForwardingRule{
case cloud.NetworkTierPremium: Name: name,
rule := &compute.ForwardingRule{ Description: desc,
Name: name, IPAddress: ipAddress,
Description: desc, IPProtocol: ipProtocol,
IPAddress: ipAddress, PortRange: portRange,
IPProtocol: ipProtocol, Target: target,
PortRange: portRange, NetworkTier: netTier.ToGCEValue(),
Target: target,
}
err = s.CreateRegionForwardingRule(rule, region)
default:
rule := &computealpha.ForwardingRule{
Name: name,
Description: desc,
IPAddress: ipAddress,
IPProtocol: ipProtocol,
PortRange: portRange,
Target: target,
NetworkTier: netTier.ToGCEValue(),
}
err = s.CreateAlphaRegionForwardingRule(rule, region)
} }
err = s.CreateRegionForwardingRule(rule, region)
if err != nil && !isHTTPErrorCode(err, http.StatusConflict) { if err != nil && !isHTTPErrorCode(err, http.StatusConflict) {
return err return err
} }
...@@ -1045,27 +1032,15 @@ func ensureStaticIP(s CloudAddressService, name, serviceName, region, existingIP ...@@ -1045,27 +1032,15 @@ func ensureStaticIP(s CloudAddressService, name, serviceName, region, existingIP
desc := makeServiceDescription(serviceName) desc := makeServiceDescription(serviceName)
var creationErr error var creationErr error
switch netTier { addressObj := &compute.Address{
case cloud.NetworkTierPremium: Name: name,
addressObj := &compute.Address{ Description: desc,
Name: name, NetworkTier: netTier.ToGCEValue(),
Description: desc, }
} if existingIP != "" {
if existingIP != "" { addressObj.Address = existingIP
addressObj.Address = existingIP
}
creationErr = s.ReserveRegionAddress(addressObj, region)
default:
addressObj := &computealpha.Address{
Name: name,
Description: desc,
NetworkTier: netTier.ToGCEValue(),
}
if existingIP != "" {
addressObj.Address = existingIP
}
creationErr = s.ReserveAlphaRegionAddress(addressObj, region)
} }
creationErr = s.ReserveRegionAddress(addressObj, region)
if creationErr != nil { if creationErr != nil {
// GCE returns StatusConflict if the name conflicts; it returns // GCE returns StatusConflict if the name conflicts; it returns
......
...@@ -57,7 +57,7 @@ func (g *Cloud) ensureInternalLoadBalancer(clusterName, clusterID string, svc *v ...@@ -57,7 +57,7 @@ func (g *Cloud) ensureInternalLoadBalancer(clusterName, clusterID string, svc *v
} }
scheme := cloud.SchemeInternal scheme := cloud.SchemeInternal
options := getILBOptions(svc) options := getILBOptions(svc)
if g.isLegacyNetwork { if g.IsLegacyNetwork() {
g.eventRecorder.Event(svc, v1.EventTypeWarning, "ILBOptionsIgnored", "Internal LoadBalancer options are not supported with Legacy Networks.") g.eventRecorder.Event(svc, v1.EventTypeWarning, "ILBOptionsIgnored", "Internal LoadBalancer options are not supported with Legacy Networks.")
options = ILBOptions{} options = ILBOptions{}
} }
......
...@@ -1137,7 +1137,7 @@ gopkg.in/square/go-jose.v2/jwt ...@@ -1137,7 +1137,7 @@ gopkg.in/square/go-jose.v2/jwt
gopkg.in/warnings.v0 gopkg.in/warnings.v0
# gopkg.in/yaml.v2 v2.2.8 # gopkg.in/yaml.v2 v2.2.8
gopkg.in/yaml.v2 gopkg.in/yaml.v2
# k8s.io/api v0.17.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.17.14-k3s1 # k8s.io/api v0.17.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/api v1.17.15-k3s1
k8s.io/api/admission/v1 k8s.io/api/admission/v1
k8s.io/api/admission/v1beta1 k8s.io/api/admission/v1beta1
k8s.io/api/admissionregistration/v1 k8s.io/api/admissionregistration/v1
...@@ -1181,7 +1181,7 @@ k8s.io/api/settings/v1alpha1 ...@@ -1181,7 +1181,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.17.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.17.14-k3s1 # k8s.io/apiextensions-apiserver v0.17.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.17.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
...@@ -1229,7 +1229,7 @@ k8s.io/apiextensions-apiserver/pkg/generated/openapi ...@@ -1229,7 +1229,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.17.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.17.14-k3s1 # k8s.io/apimachinery v0.17.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apimachinery v1.17.15-k3s1
k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/equality
k8s.io/apimachinery/pkg/api/errors k8s.io/apimachinery/pkg/api/errors
k8s.io/apimachinery/pkg/api/meta k8s.io/apimachinery/pkg/api/meta
...@@ -1291,7 +1291,7 @@ k8s.io/apimachinery/pkg/watch ...@@ -1291,7 +1291,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.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.17.14-k3s1 # k8s.io/apiserver v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/apiserver v1.17.15-k3s1
k8s.io/apiserver/pkg/admission k8s.io/apiserver/pkg/admission
k8s.io/apiserver/pkg/admission/configuration k8s.io/apiserver/pkg/admission/configuration
k8s.io/apiserver/pkg/admission/initializer k8s.io/apiserver/pkg/admission/initializer
...@@ -1408,7 +1408,7 @@ k8s.io/apiserver/plugin/pkg/authenticator/request/basicauth ...@@ -1408,7 +1408,7 @@ k8s.io/apiserver/plugin/pkg/authenticator/request/basicauth
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.17.14-k3s1 # k8s.io/cli-runtime v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cli-runtime v1.17.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
...@@ -1421,7 +1421,7 @@ k8s.io/cli-runtime/pkg/kustomize/k8sdeps/transformer/patch ...@@ -1421,7 +1421,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.17.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.17.15-k3s1
k8s.io/client-go/discovery k8s.io/client-go/discovery
k8s.io/client-go/discovery/cached k8s.io/client-go/discovery/cached
k8s.io/client-go/discovery/cached/disk k8s.io/client-go/discovery/cached/disk
...@@ -1614,20 +1614,20 @@ k8s.io/client-go/util/jsonpath ...@@ -1614,20 +1614,20 @@ 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.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.17.14-k3s1 # k8s.io/cloud-provider v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cloud-provider v1.17.15-k3s1
k8s.io/cloud-provider k8s.io/cloud-provider
k8s.io/cloud-provider/node/helpers k8s.io/cloud-provider/node/helpers
k8s.io/cloud-provider/service/helpers 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.17.14-k3s1 # k8s.io/cluster-bootstrap v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.17.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.17.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.17.14-k3s1 # k8s.io/code-generator v0.17.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/code-generator v1.17.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
...@@ -1642,7 +1642,7 @@ k8s.io/code-generator/cmd/lister-gen/args ...@@ -1642,7 +1642,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.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.17.14-k3s1 # k8s.io/component-base v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/component-base v1.17.15-k3s1
k8s.io/component-base/cli/flag k8s.io/component-base/cli/flag
k8s.io/component-base/cli/globalflag k8s.io/component-base/cli/globalflag
k8s.io/component-base/codec k8s.io/component-base/codec
...@@ -1659,10 +1659,10 @@ k8s.io/component-base/metrics/prometheus/version ...@@ -1659,10 +1659,10 @@ k8s.io/component-base/metrics/prometheus/version
k8s.io/component-base/metrics/prometheus/workqueue k8s.io/component-base/metrics/prometheus/workqueue
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.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.17.14-k3s1 # k8s.io/cri-api v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/cri-api v1.17.15-k3s1
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.17.14-k3s1 # k8s.io/csi-translation-lib v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/csi-translation-lib v1.17.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-20191120174120-e74f70b9b27e # k8s.io/gengo v0.0.0-20191120174120-e74f70b9b27e
...@@ -1677,7 +1677,7 @@ k8s.io/gengo/types ...@@ -1677,7 +1677,7 @@ k8s.io/gengo/types
k8s.io/heapster/metrics/api/v1/types k8s.io/heapster/metrics/api/v1/types
# k8s.io/klog v1.0.0 # k8s.io/klog v1.0.0
k8s.io/klog k8s.io/klog
# k8s.io/kube-aggregator v0.17.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.17.14-k3s1 # k8s.io/kube-aggregator v0.17.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-aggregator v1.17.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
...@@ -1705,7 +1705,7 @@ k8s.io/kube-aggregator/pkg/controllers/status ...@@ -1705,7 +1705,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.17.14-k3s1 # k8s.io/kube-controller-manager v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-controller-manager v1.17.15-k3s1
k8s.io/kube-controller-manager/config/v1alpha1 k8s.io/kube-controller-manager/config/v1alpha1
# k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29 # k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29
k8s.io/kube-openapi/pkg/aggregator k8s.io/kube-openapi/pkg/aggregator
...@@ -1716,12 +1716,12 @@ k8s.io/kube-openapi/pkg/schemaconv ...@@ -1716,12 +1716,12 @@ 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.17.14-k3s1 # k8s.io/kube-proxy v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-proxy v1.17.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.17.14-k3s1 # k8s.io/kube-scheduler v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kube-scheduler v1.17.15-k3s1
k8s.io/kube-scheduler/config/v1 k8s.io/kube-scheduler/config/v1
k8s.io/kube-scheduler/config/v1alpha1 k8s.io/kube-scheduler/config/v1alpha1
# k8s.io/kubectl v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.17.14-k3s1 # k8s.io/kubectl v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubectl v1.17.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
...@@ -1797,11 +1797,11 @@ k8s.io/kubectl/pkg/util/storage ...@@ -1797,11 +1797,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.17.14-k3s1 # k8s.io/kubelet v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/kubelet v1.17.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.17.14 => github.com/k3s-io/kubernetes v1.17.14-k3s1 # k8s.io/kubernetes v1.17.15 => github.com/k3s-io/kubernetes v1.17.15-k3s1
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
k8s.io/kubernetes/cmd/cloud-controller-manager/app/apis/config/scheme k8s.io/kubernetes/cmd/cloud-controller-manager/app/apis/config/scheme
...@@ -2538,7 +2538,7 @@ k8s.io/kubernetes/third_party/forked/gonum/graph ...@@ -2538,7 +2538,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.17.14-k3s1 # k8s.io/legacy-cloud-providers v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.17.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
...@@ -2547,7 +2547,7 @@ k8s.io/legacy-cloud-providers/openstack ...@@ -2547,7 +2547,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.17.14-k3s1 # k8s.io/metrics v0.0.0 => github.com/k3s-io/kubernetes/staging/src/k8s.io/metrics v1.17.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
......
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