Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
38ce9c3
node topology worker should run and replace topology informer Run wit…
bai3shuo4 Apr 25, 2021
b2be509
Fix migration metric registration
jsafrane May 4, 2021
2890de3
Merge pull request #620 from jsafrane/fix-migration-metrics
k8s-ci-robot May 4, 2021
918baa0
Squashed 'release-tools/' changes from a1e11275b..6616a6b52
pohly May 5, 2021
72edaec
Merge commit 'e5c382118ae6b71e935e54d049e901de482cc162' into prow-upd…
pohly May 5, 2021
f71827b
Merge pull request #617 from bai3shuo4/bai3shuo4/fix-topology-worker
k8s-ci-robot May 5, 2021
47f883a
capacity: simplify topology informer
pohly May 7, 2021
6f779f3
Remove dependency to k8s.io/kubernetes
ialidzhikov May 3, 2021
a9b470d
Merge pull request #618 from ialidzhikov/cleanup/dependency
k8s-ci-robot May 7, 2021
6cff5d6
Merge pull request #629 from pohly/capacity-runner
k8s-ci-robot May 19, 2021
359a0e0
Merge pull request #623 from pohly/prow-update-master
k8s-ci-robot May 19, 2021
7d7a6fe
Squashed 'release-tools/' changes from 6616a6b52..f3255906a
pohly May 21, 2021
5d11fc2
Merge commit '9d196291c50917ce006861f40e4e6d3a1a9d08b7' into prow-upd…
pohly May 21, 2021
b5186db
Fix env name for capacity-ownerref-level option
bells17 May 23, 2021
a4d465e
Add SupportsBlock method to provisionWrapper for being able to use bl…
bells17 May 23, 2021
864aac2
Add ShouldProvision method to provisionWrapper
bells17 May 23, 2021
f712e0e
Merge pull request #636 from bells17/fix-env-name
k8s-ci-robot May 24, 2021
95bde59
OWNERS update with aliases
pohly May 21, 2021
5f57746
Merge pull request #633 from pohly/prow-update-master
k8s-ci-robot May 25, 2021
495c327
Merge pull request #635 from bells17/fix-provisionWrapper
k8s-ci-robot May 26, 2021
571be5a
capacity test: create CSIStorageObject before instantiating client-set
pohly May 31, 2021
b430834
Merge pull request #640 from pohly/fix-capacity-unit-test-flake
k8s-ci-robot Jun 8, 2021
2bfaf0f
Add command line arguments to configure leader election options
RaunakShah Jun 10, 2021
c316a91
Use CSI spec v1.5.0
chrishenzie Jun 14, 2021
54c1b62
Add documentation for new leader election parameters
RaunakShah Jun 14, 2021
8af096b
Merge pull request #644 from chrishenzie/csi-spec-v1.5.0
k8s-ci-robot Jun 14, 2021
6d23280
Merge pull request #643 from RaunakShah/le_prov
k8s-ci-robot Jun 14, 2021
2561c08
Use sig-storage-lib-external-provisioner v7.0.1
Jun 29, 2021
c879121
Run go mod tidy && go mod vendor
Jun 29, 2021
61317e2
Merge pull request #646 from wongma7/libv7
k8s-ci-robot Jun 29, 2021
8ec7017
Squashed 'release-tools/' changes from f3255906a..c0a4fb1dd
pohly Jul 6, 2021
7e437b1
Merge commit 'a1b8ea17d8aa18d979f2f214fc44ba8bdb38ba97' into prow-upd…
pohly Jul 6, 2021
ee0b25e
Merge pull request #648 from pohly/prow-update-master
k8s-ci-robot Jul 6, 2021
97ef258
Fix data race in cloning protection controller
Jul 15, 2021
bd836d5
Update k8s dependencies to v1.22.0-rc.0
chrishenzie Jul 27, 2021
fc0208b
Merge pull request #656 from chrishenzie/k8s-v1.22
k8s-ci-robot Jul 28, 2021
90518b5
Update external-snapshotter client version to v4.1.0
xinyanw409 Jul 13, 2021
9b9d22f
Skip jobs for Kubernetes 1.19 and earlier
xing-yang Jul 21, 2021
c664bde
Merge pull request #659 from xing-yang/test_ci
k8s-ci-robot Aug 4, 2021
4442ea6
Update k8s dependencies to v1.22.0
chrishenzie Jul 28, 2021
564a581
Update README for compatible CSI spec, K8s feature status
chrishenzie Aug 4, 2021
6a13359
Merge pull request #660 from chrishenzie/k8s-v1.22
k8s-ci-robot Aug 5, 2021
251509c
Map PV access modes to CSI access modes based on driver capability
chrishenzie Mar 10, 2021
229003c
Merge pull request #650 from xinyanw409/update-external-snapshotter-c…
k8s-ci-robot Aug 5, 2021
74d3c4c
Merge pull request #630 from chrishenzie/single-node-access-modes
k8s-ci-robot Aug 5, 2021
7a44dc6
remove dangling leaderelection interface from provisioner
humblec Jul 6, 2021
9e5ceea
Merge pull request #651 from zlabjp/fix-race-in-cloning-protection-co…
k8s-ci-robot Aug 9, 2021
8d6b0d8
Add ROX capability based on provisioner arg and ROX accessmode
humblec Aug 10, 2021
c0d7087
Merge pull request #469 from humblec/some-fox
k8s-ci-robot Aug 10, 2021
e88610a
Clean up .travis.yml
ialidzhikov Aug 10, 2021
529db10
Merge pull request #664 from ialidzhikov/cleanup/travis-file
k8s-ci-robot Aug 10, 2021
d27ee0b
Update snapshot support level in the readme to GA from beta
humblec Aug 11, 2021
f6880ed
Merge pull request #666 from humblec/snap
k8s-ci-robot Aug 11, 2021
c6ad4fa
Add changelog for v3.0.0
chrishenzie Aug 10, 2021
3ebac48
Merge pull request #665 from chrishenzie/changelog-v2.3.0
k8s-ci-robot Aug 12, 2021
437d9f0
Merge tag 'v3.0.0' into rebase-v3.0.0
dobsonj Aug 18, 2021
e4defd4
Update OWNERS_ALIASES
dobsonj Aug 18, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 6 additions & 5 deletions .prow.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@

. release-tools/prow.sh

# This check assumes that the current configuration uses a driver deployment
# which has been updated to use v1 APIs that aren't available in Kubernetes < 1.17.
# TODO: The check can be removed when all Prow jobs for Kubernetes < 1.17 are removed.
if ! (version_gt "${CSI_PROW_KUBERNETES_VERSION}" "1.16.255" || [ "${CSI_PROW_KUBERNETES_VERSION}" == "latest" ]); then
# External-provisioner is updated to use VolumeSnapshot v1 APIs. As a result,
# tesing on Kubernetes version < 1.20 are no longer supported because they use
# v1beta1 or earlier VolumeSnapshot APIs.
# TODO: The check can be removed when all Prow jobs for Kubernetes < 1.20 are removed.
if ! (version_gt "${CSI_PROW_KUBERNETES_VERSION}" "1.19.255" || [ "${CSI_PROW_KUBERNETES_VERSION}" == "latest" ]); then
filtered_tests=
skipped_tests=
for test in ${CSI_PROW_TESTS}; do
case "$test" in
parallel | parallel | serial | parallel-alpha | serial-alpha)
parallel | serial | parallel-alpha | serial-alpha)
skipped_tests="$skipped_tests $test"
;;
*)
Expand Down
1 change: 0 additions & 1 deletion .travis.yml

This file was deleted.

355 changes: 355 additions & 0 deletions CHANGELOG/CHANGELOG-3.0.md

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions OWNERS
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# See the OWNERS docs at https://go.k8s.io/owners

approvers:
- openshift-storage-maintainers
component: "Storage"
2 changes: 1 addition & 1 deletion OWNERS_ALIASES
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ aliases:
- tsmetana
- gnufied
- bertinatto
- huffmanca
- dobsonj
16 changes: 11 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
[![Build Status](https://travis-ci.org/kubernetes-csi/external-provisioner.svg?branch=master)](https://travis-ci.org/kubernetes-csi/external-provisioner)

# CSI provisioner

The external-provisioner is a sidecar container that dynamically provisions volumes by calling `CreateVolume` and `DeleteVolume` functions of CSI drivers. It is necessary because internal persistent volume controller running in Kubernetes controller-manager does not have any direct interfaces to CSI drivers.
Expand All @@ -13,7 +11,7 @@ This information reflects the head of this branch.

| Compatible with CSI Version | Container Image | [Min K8s Version](https://kubernetes-csi.github.io/docs/kubernetes-compatibility.html#minimum-version) | [Recommended K8s Version](https://kubernetes-csi.github.io/docs/kubernetes-compatibility.html#recommended-version) |
| ------------------------------------------------------------------------------------------ | -------------------------------| --------------- | ------------- |
| [CSI Spec v1.4.0](https://github.com/container-storage-interface/spec/releases/tag/v1.4.0) | k8s.gcr.io/sig-storage/csi-provisioner | 1.17 | 1.21 |
| [CSI Spec v1.5.0](https://github.com/container-storage-interface/spec/releases/tag/v1.5.0) | k8s.gcr.io/sig-storage/csi-provisioner | 1.20 | 1.22 |

## Feature status

Expand All @@ -23,9 +21,10 @@ Following table reflects the head of this branch.

| Feature | Status | Default | Description | Provisioner Feature Gate Required |
| -------------- | ------- | ------- | --------------------------------------------------------------------------------------------- | --------------------------------- |
| Snapshots | Beta | On | [Snapshots and Restore](https://kubernetes-csi.github.io/docs/snapshot-restore-feature.html). | No |
| Snapshots | GA | On | [Snapshots and Restore](https://kubernetes-csi.github.io/docs/snapshot-restore-feature.html). | No |
| CSIMigration | Beta | On | [Migrating in-tree volume plugins to CSI](https://kubernetes.io/docs/concepts/storage/volumes/#csi-migration). | No |
| CSIStorageCapacity | Beta | On | Publish [capacity information](https://kubernetes.io/docs/concepts/storage/volumes/#storage-capacity) for the Kubernetes scheduler. | No |
| CSIStorageCapacity | Beta | On | Publish [capacity information](https://kubernetes.io/docs/concepts/storage/volumes/#storage-capacity) for the Kubernetes scheduler. | No |
| ReadWriteOncePod | Alpha | Off | [Single pod access mode for PersistentVolumes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes). | No |

All other external-provisioner features and the external-provisioner itself is considered GA and fully supported.

Expand All @@ -50,6 +49,12 @@ Note that the external-provisioner does not scale with more replicas. Only one e

* `--leader-election-namespace`: Namespace where leader election object will be created. It is recommended that this parameter is populated from Kubernetes DownwardAPI with the namespace where the external-provisioner runs in.

* `--leader-election-lease-duration <duration>`: Duration, in seconds, that non-leader candidates will wait to force acquire leadership. Defaults to 15 seconds.

* `--leader-election-renew-deadline <duration>`: Duration, in seconds, that the acting leader will retry refreshing leadership before giving up. Defaults to 10 seconds.

* `--leader-election-retry-period <duration>`: Duration, in seconds, the LeaderElector clients should wait between tries of actions. Defaults to 5 seconds.

* `--timeout <duration>`: Timeout of all calls to CSI driver. It should be set to value that accommodates majority of `ControllerCreateVolume` and `ControllerDeleteVolume` calls. See [CSI error and timeout handling](#csi-error-and-timeout-handling) for details. 15 seconds is used by default.

* `--retry-interval-start <duration>`: Initial retry interval of failed provisioning or deletion. It doubles with each failure, up to `--retry-interval-max` and then it stops increasing. Default value is 1 second. See [CSI error and timeout handling](#csi-error-and-timeout-handling) for details.
Expand All @@ -70,6 +75,7 @@ Note that the external-provisioner does not scale with more replicas. Only one e

* `--extra-create-metadata`: Enables the injection of extra PVC and PV metadata as parameters when calling `CreateVolume` on the driver (keys: "csi.storage.k8s.io/pvc/name", "csi.storage.k8s.io/pvc/namespace", "csi.storage.k8s.io/pv/name")

* `controller-publish-readonly`: This option enables PV to be marked as readonly at controller publish volume call if PVC accessmode has been set to ROX. Defaults to `false`.
##### Storage capacity arguments

See the [storage capacity section](#capacity-support) below for details.
Expand Down
34 changes: 16 additions & 18 deletions cmd/csi-provisioner/csi-provisioner.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ import (
_ "k8s.io/component-base/metrics/prometheus/workqueue" // register work queues in the default legacy registry
csitrans "k8s.io/csi-translation-lib"
"k8s.io/klog/v2"
"sigs.k8s.io/sig-storage-lib-external-provisioner/v6/controller"
"sigs.k8s.io/sig-storage-lib-external-provisioner/v7/controller"

"github.com/kubernetes-csi/csi-lib-utils/leaderelection"
"github.com/kubernetes-csi/csi-lib-utils/metrics"
"github.com/kubernetes-csi/external-provisioner/pkg/capacity"
"github.com/kubernetes-csi/external-provisioner/pkg/capacity/topology"
ctrl "github.com/kubernetes-csi/external-provisioner/pkg/controller"
"github.com/kubernetes-csi/external-provisioner/pkg/owner"
snapclientset "github.com/kubernetes-csi/external-snapshotter/client/v3/clientset/versioned"
snapclientset "github.com/kubernetes-csi/external-snapshotter/client/v4/clientset/versioned"
)

var (
Expand All @@ -85,6 +85,10 @@ var (
httpEndpoint = flag.String("http-endpoint", "", "The TCP network address where the HTTP server for diagnostics, including metrics and leader election health check, will listen (example: `:8080`). The default is empty string, which means the server is disabled. Only one of `--metrics-address` and `--http-endpoint` can be set.")
metricsPath = flag.String("metrics-path", "/metrics", "The HTTP path where prometheus metrics will be exposed. Default is `/metrics`.")

leaderElectionLeaseDuration = flag.Duration("leader-election-lease-duration", 15*time.Second, "Duration, in seconds, that non-leader candidates will wait to force acquire leadership. Defaults to 15 seconds.")
leaderElectionRenewDeadline = flag.Duration("leader-election-renew-deadline", 10*time.Second, "Duration, in seconds, that the acting leader will retry refreshing leadership before giving up. Defaults to 10 seconds.")
leaderElectionRetryPeriod = flag.Duration("leader-election-retry-period", 5*time.Second, "Duration, in seconds, the LeaderElector clients should wait between tries of actions. Defaults to 5 seconds.")

defaultFSType = flag.String("default-fstype", "", "The default filesystem type of the volume to provision when fstype is unspecified in the StorageClass. If the default is not set and fstype is unset in the StorageClass, then no fstype will be set")

kubeAPIQPS = flag.Float32("kube-api-qps", 5, "QPS to use while communicating with the kubernetes apiserver. Defaults to 5.0.")
Expand All @@ -93,23 +97,19 @@ var (
enableCapacity = flag.Bool("enable-capacity", false, "This enables producing CSIStorageCapacity objects with capacity information from the driver's GetCapacity call.")
capacityImmediateBinding = flag.Bool("capacity-for-immediate-binding", false, "Enables producing capacity information for storage classes with immediate binding. Not needed for the Kubernetes scheduler, maybe useful for other consumers or for debugging.")
capacityPollInterval = flag.Duration("capacity-poll-interval", time.Minute, "How long the external-provisioner waits before checking for storage capacity changes.")
capacityOwnerrefLevel = flag.Int("capacity-ownerref-level", 1, "The level indicates the number of objects that need to be traversed starting from the pod identified by the POD_NAME and POD_NAMESPACE environment variables to reach the owning object for CSIStorageCapacity objects: -1 for no owner, 0 for the pod itself, 1 for a StatefulSet or DaemonSet, 2 for a Deployment, etc.")
capacityOwnerrefLevel = flag.Int("capacity-ownerref-level", 1, "The level indicates the number of objects that need to be traversed starting from the pod identified by the POD_NAME and NAMESPACE environment variables to reach the owning object for CSIStorageCapacity objects: -1 for no owner, 0 for the pod itself, 1 for a StatefulSet or DaemonSet, 2 for a Deployment, etc.")

enableNodeDeployment = flag.Bool("node-deployment", false, "Enables deploying the external-provisioner together with a CSI driver on nodes to manage node-local volumes.")
nodeDeploymentImmediateBinding = flag.Bool("node-deployment-immediate-binding", true, "Determines whether immediate binding is supported when deployed on each node.")
nodeDeploymentBaseDelay = flag.Duration("node-deployment-base-delay", 20*time.Second, "Determines how long the external-provisioner sleeps initially before trying to own a PVC with immediate binding.")
nodeDeploymentMaxDelay = flag.Duration("node-deployment-max-delay", 60*time.Second, "Determines how long the external-provisioner sleeps at most before trying to own a PVC with immediate binding.")
controllerPublishReadOnly = flag.Bool("controller-publish-readonly", false, "This option enables PV to be marked as readonly at controller publish volume call if PVC accessmode has been set to ROX.")

featureGates map[string]bool
provisionController *controller.ProvisionController
version = "unknown"
)

type leaderElection interface {
Run() error
WithNamespace(namespace string)
}

func main() {
var config *rest.Config
var err error
Expand Down Expand Up @@ -173,19 +173,12 @@ func main() {
klog.Fatalf("Failed to create client: %v", err)
}

// snapclientset.NewForConfig creates a new Clientset for VolumesnapshotV1beta1Client
// snapclientset.NewForConfig creates a new Clientset for VolumesnapshotV1Client
snapClient, err := snapclientset.NewForConfig(config)
if err != nil {
klog.Fatalf("Failed to create snapshot client: %v", err)
}

// The controller needs to know what the server version is because out-of-tree
// provisioners aren't officially supported until 1.5
serverVersion, err := clientset.Discovery().ServerVersion()
if err != nil {
klog.Fatalf("Error getting server version: %v", err)
}

metricsManager := metrics.NewCSIMetricsManagerWithOptions("", /* driverName */
// Will be provided via default gatherer.
metrics.WithProcessStartTime(false),
Expand Down Expand Up @@ -395,6 +388,7 @@ func main() {
*extraCreateMetadata,
*defaultFSType,
nodeDeployment,
*controllerPublishReadOnly,
)

var capacityController *capacity.Controller
Expand Down Expand Up @@ -441,6 +435,7 @@ func main() {
klog.Infof("producing CSIStorageCapacity objects with fixed topology segment %s", segment)
topologyInformer = topology.NewFixedNodeTopology(&segment)
}
go topologyInformer.RunWorker(context.Background())

managedByID := "external-provisioner"
if *enableNodeDeployment {
Expand Down Expand Up @@ -486,7 +481,6 @@ func main() {
clientset,
provisionerName,
csiProvisioner,
serverVersion.GitVersion,
provisionerOptions...,
)

Expand Down Expand Up @@ -549,7 +543,7 @@ func main() {
if !*enableLeaderElection {
run(context.TODO())
} else {
// this lock name pattern is also copied from sigs.k8s.io/sig-storage-lib-external-provisioner/v6/controller
// this lock name pattern is also copied from sigs.k8s.io/sig-storage-lib-external-provisioner/controller
// to preserve backwards compatibility
lockName := strings.Replace(provisionerName, "/", "-", -1)

Expand All @@ -568,6 +562,10 @@ func main() {
le.WithNamespace(*leaderElectionNamespace)
}

le.WithLeaseDuration(*leaderElectionLeaseDuration)
le.WithRenewDeadline(*leaderElectionRenewDeadline)
le.WithRetryPeriod(*leaderElectionRetryPeriod)

if err := le.Run(); err != nil {
klog.Fatalf("failed to initialize leader election: %v", err)
}
Expand Down
94 changes: 14 additions & 80 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,98 +3,32 @@ module github.com/kubernetes-csi/external-provisioner
go 1.16

require (
github.com/container-storage-interface/spec v1.4.0
github.com/container-storage-interface/spec v1.5.0
github.com/golang/mock v1.4.4
github.com/golang/protobuf v1.5.1 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/uuid v1.2.0 // indirect
github.com/googleapis/gnostic v0.5.4 // indirect
github.com/imdario/mergo v0.3.12 // indirect
github.com/kubernetes-csi/csi-lib-utils v0.9.1
github.com/kubernetes-csi/csi-lib-utils v0.10.0
github.com/kubernetes-csi/csi-test/v4 v4.0.2
github.com/kubernetes-csi/external-snapshotter/client/v3 v3.0.0
github.com/kubernetes-csi/external-snapshotter/client/v4 v4.1.0
github.com/miekg/dns v1.1.40 // indirect
github.com/prometheus/client_golang v1.9.0
github.com/prometheus/common v0.19.0 // indirect
github.com/prometheus/procfs v0.6.0 // indirect
github.com/prometheus/client_golang v1.11.0
github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.7.0
golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670 // indirect
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4 // indirect
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 // indirect
golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e // indirect
golang.org/x/term v0.0.0-20210317153231-de623e64d2a6 // indirect
golang.org/x/text v0.3.5 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20210317182105-75c7a8546eb9 // indirect
google.golang.org/grpc v1.36.0
google.golang.org/grpc v1.38.0
google.golang.org/protobuf v1.26.0
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
k8s.io/api v0.21.0
k8s.io/apimachinery v0.21.0
k8s.io/apiserver v0.21.0
k8s.io/client-go v0.21.0
k8s.io/component-base v0.21.0
k8s.io/component-helpers v0.21.0
k8s.io/csi-translation-lib v0.21.0
k8s.io/klog/v2 v2.8.0
k8s.io/kube-openapi v0.0.0-20210305164622-f622666832c1 // indirect
k8s.io/kubernetes v1.21.0
k8s.io/utils v0.0.0-20210305010621-2afb4311ab10 // indirect
k8s.io/api v0.22.0
k8s.io/apimachinery v0.22.0
k8s.io/apiserver v0.22.0
k8s.io/client-go v0.22.0
k8s.io/component-base v0.22.0
k8s.io/component-helpers v0.22.0
k8s.io/csi-translation-lib v0.22.0
k8s.io/klog/v2 v2.9.0
sigs.k8s.io/controller-runtime v0.8.3
sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0
sigs.k8s.io/sig-storage-lib-external-provisioner/v7 v7.0.1
)

replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.21.0

replace k8s.io/cli-runtime => k8s.io/cli-runtime v0.21.0

replace k8s.io/cloud-provider => k8s.io/cloud-provider v0.21.0

replace k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.21.0

replace k8s.io/code-generator => k8s.io/code-generator v0.21.0

replace k8s.io/cri-api => k8s.io/cri-api v0.21.0

replace k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.21.0

replace k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.21.0

replace k8s.io/kube-proxy => k8s.io/kube-proxy v0.21.0

replace k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.21.0

replace k8s.io/kubectl => k8s.io/kubectl v0.21.0

replace k8s.io/kubelet => k8s.io/kubelet v0.21.0

replace k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.21.0

replace k8s.io/metrics => k8s.io/metrics v0.21.0

replace k8s.io/node-api => k8s.io/node-api v0.21.0

replace k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.21.0

replace k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.21.0

replace k8s.io/sample-controller => k8s.io/sample-controller v0.21.0

replace k8s.io/api => k8s.io/api v0.21.0

replace k8s.io/apimachinery => k8s.io/apimachinery v0.21.0

replace k8s.io/apiserver => k8s.io/apiserver v0.21.0

replace k8s.io/client-go => k8s.io/client-go v0.21.0

replace k8s.io/component-base => k8s.io/component-base v0.21.0

replace k8s.io/controller-manager => k8s.io/controller-manager v0.21.0

replace k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.21.0

replace k8s.io/component-helpers => k8s.io/component-helpers v0.21.0

replace k8s.io/mount-utils => k8s.io/mount-utils v0.21.0
Loading