Skip to content

Commit 586e2e0

Browse files
author
Cheng Pan
committed
Implement CSI migration logic for volume resize
1 parent c398721 commit 586e2e0

File tree

10 files changed

+1134
-4
lines changed

10 files changed

+1134
-4
lines changed

Gopkg.lock

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/resizer/csi_resizer.go

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ import (
3333
"k8s.io/client-go/informers"
3434
"k8s.io/client-go/kubernetes"
3535
storagev1listers "k8s.io/client-go/listers/storage/v1"
36+
37+
csitranslationlib "k8s.io/csi-translation-lib"
3638
"k8s.io/klog"
3739
)
3840

@@ -118,7 +120,13 @@ func (r *csiResizer) Name() string {
118120
return r.name
119121
}
120122

123+
// CanSupport returns whether the PV is supported by resizer
124+
// Resizer will resize the volume if it is CSI volume or is migration enabled in-tree volume
121125
func (r *csiResizer) CanSupport(pv *v1.PersistentVolume) bool {
126+
if csitranslationlib.IsMigratedCSIDriverByName(r.name) /* && migration enabled*/ {
127+
return true
128+
}
129+
122130
source := pv.Spec.CSI
123131
if source == nil {
124132
klog.V(4).Infof("PV %s is not a CSI volume, skip it", pv.Name)
@@ -131,14 +139,30 @@ func (r *csiResizer) CanSupport(pv *v1.PersistentVolume) bool {
131139
return true
132140
}
133141

142+
// Resize resizes the persistence volume given request size
143+
// It supports both CSI volume and migrated in-tree volume
134144
func (r *csiResizer) Resize(pv *v1.PersistentVolume, requestSize resource.Quantity) (resource.Quantity, bool, error) {
135145
oldSize := pv.Spec.Capacity[v1.ResourceStorage]
136146

137-
source := pv.Spec.CSI
138-
if source == nil {
139-
return oldSize, false, errors.New("not a CSI volume")
147+
var volumeID string
148+
if pv.Spec.CSI != nil {
149+
// handle CSI volume
150+
source := pv.Spec.CSI
151+
volumeID = source.VolumeHandle
152+
} else {
153+
if csitranslationlib.IsMigratedCSIDriverByName(r.name) /* && migration enabled*/ {
154+
// handle migrated in-tree volume
155+
csiPV, err := csitranslationlib.TranslateInTreePVToCSI(pv)
156+
if err != nil {
157+
return oldSize, false, fmt.Errorf("failed to translate persistenc volume: %v", err)
158+
}
159+
volumeID = csiPV.Spec.CSI.VolumeHandle
160+
} else {
161+
// non-migrated in-tree volume
162+
return oldSize, false, errors.New("un-supported volume type")
163+
}
140164
}
141-
volumeID := source.VolumeHandle
165+
142166
if len(volumeID) == 0 {
143167
return oldSize, false, errors.New("empty volume handle")
144168
}

vendor/k8s.io/cloud-provider/LICENSE

Lines changed: 201 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/k8s.io/cloud-provider/volume/constants.go

Lines changed: 26 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)