Skip to content

Commit c58a375

Browse files
authored
Merge pull request kubernetes#89365 from notpad/feature/zone_label_ga
Add check for volume zone GA labels
2 parents 89dfebb + 98405a8 commit c58a375

File tree

3 files changed

+112
-12
lines changed

3 files changed

+112
-12
lines changed

pkg/scheduler/framework/plugins/volumezone/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ go_library(
1212
"//staging/src/k8s.io/api/core/v1:go_default_library",
1313
"//staging/src/k8s.io/api/storage/v1:go_default_library",
1414
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
15+
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
1516
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
1617
"//staging/src/k8s.io/client-go/listers/storage/v1:go_default_library",
1718
"//staging/src/k8s.io/cloud-provider/volume/helpers:go_default_library",

pkg/scheduler/framework/plugins/volumezone/volume_zone.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
v1 "k8s.io/api/core/v1"
2424
storage "k8s.io/api/storage/v1"
2525
"k8s.io/apimachinery/pkg/runtime"
26+
"k8s.io/apimachinery/pkg/util/sets"
2627
corelisters "k8s.io/client-go/listers/core/v1"
2728
storagelisters "k8s.io/client-go/listers/storage/v1"
2829
volumehelpers "k8s.io/cloud-provider/volume/helpers"
@@ -49,6 +50,13 @@ const (
4950
ErrReasonConflict = "node(s) had no available volume zone"
5051
)
5152

53+
var volumeZoneLabels = sets.NewString(
54+
v1.LabelZoneFailureDomain,
55+
v1.LabelZoneRegion,
56+
v1.LabelZoneFailureDomainStable,
57+
v1.LabelZoneRegionStable,
58+
)
59+
5260
// Name returns name of the plugin. It is used in logs, etc.
5361
func (pl *VolumeZone) Name() string {
5462
return Name
@@ -82,7 +90,7 @@ func (pl *VolumeZone) Filter(ctx context.Context, _ *framework.CycleState, pod *
8290
}
8391
nodeConstraints := make(map[string]string)
8492
for k, v := range node.ObjectMeta.Labels {
85-
if k != v1.LabelZoneFailureDomain && k != v1.LabelZoneRegion {
93+
if !volumeZoneLabels.Has(k) {
8694
continue
8795
}
8896
nodeConstraints[k] = v
@@ -145,7 +153,7 @@ func (pl *VolumeZone) Filter(ctx context.Context, _ *framework.CycleState, pod *
145153
}
146154

147155
for k, v := range pv.ObjectMeta.Labels {
148-
if k != v1.LabelZoneFailureDomain && k != v1.LabelZoneRegion {
156+
if !volumeZoneLabels.Has(k) {
149157
continue
150158
}
151159
nodeV, _ := nodeConstraints[k]

pkg/scheduler/framework/plugins/volumezone/volume_zone_test.go

Lines changed: 101 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,16 @@ func TestSingleZone(t *testing.T) {
5353
ObjectMeta: metav1.ObjectMeta{Name: "Vol_1", Labels: map[string]string{v1.LabelZoneFailureDomain: "us-west1-a"}},
5454
},
5555
{
56-
ObjectMeta: metav1.ObjectMeta{Name: "Vol_2", Labels: map[string]string{v1.LabelZoneRegion: "us-west1-b", "uselessLabel": "none"}},
56+
ObjectMeta: metav1.ObjectMeta{Name: "Vol_2", Labels: map[string]string{v1.LabelZoneRegion: "us-west1", "uselessLabel": "none"}},
5757
},
5858
{
59-
ObjectMeta: metav1.ObjectMeta{Name: "Vol_3", Labels: map[string]string{v1.LabelZoneRegion: "us-west1-c"}},
59+
ObjectMeta: metav1.ObjectMeta{Name: "Vol_3", Labels: map[string]string{v1.LabelZoneRegion: "us-west1"}},
60+
},
61+
{
62+
ObjectMeta: metav1.ObjectMeta{Name: "Vol_Stable_1", Labels: map[string]string{v1.LabelZoneFailureDomainStable: "us-west1-a"}},
63+
},
64+
{
65+
ObjectMeta: metav1.ObjectMeta{Name: "Vol_Stable_2", Labels: map[string]string{v1.LabelZoneRegionStable: "us-west1", "uselessLabel": "none"}},
6066
},
6167
}
6268

@@ -77,6 +83,14 @@ func TestSingleZone(t *testing.T) {
7783
ObjectMeta: metav1.ObjectMeta{Name: "PVC_4", Namespace: "default"},
7884
Spec: v1.PersistentVolumeClaimSpec{VolumeName: "Vol_not_exist"},
7985
},
86+
{
87+
ObjectMeta: metav1.ObjectMeta{Name: "PVC_Stable_1", Namespace: "default"},
88+
Spec: v1.PersistentVolumeClaimSpec{VolumeName: "Vol_Stable_1"},
89+
},
90+
{
91+
ObjectMeta: metav1.ObjectMeta{Name: "PVC_Stable_2", Namespace: "default"},
92+
Spec: v1.PersistentVolumeClaimSpec{VolumeName: "Vol_Stable_2"},
93+
},
8094
}
8195

8296
tests := []struct {
@@ -107,7 +121,7 @@ func TestSingleZone(t *testing.T) {
107121
},
108122
},
109123
{
110-
name: "label zone failure domain matched",
124+
name: "beta zone label matched",
111125
Pod: createPodWithVolume("pod_1", "vol_1", "PVC_1"),
112126
Node: &v1.Node{
113127
ObjectMeta: metav1.ObjectMeta{
@@ -117,28 +131,28 @@ func TestSingleZone(t *testing.T) {
117131
},
118132
},
119133
{
120-
name: "label zone region matched",
134+
name: "beta region label matched",
121135
Pod: createPodWithVolume("pod_1", "vol_1", "PVC_2"),
122136
Node: &v1.Node{
123137
ObjectMeta: metav1.ObjectMeta{
124138
Name: "host1",
125-
Labels: map[string]string{v1.LabelZoneRegion: "us-west1-b", "uselessLabel": "none"},
139+
Labels: map[string]string{v1.LabelZoneRegion: "us-west1", "uselessLabel": "none"},
126140
},
127141
},
128142
},
129143
{
130-
name: "label zone region failed match",
144+
name: "beta region label doesn't match",
131145
Pod: createPodWithVolume("pod_1", "vol_1", "PVC_2"),
132146
Node: &v1.Node{
133147
ObjectMeta: metav1.ObjectMeta{
134148
Name: "host1",
135-
Labels: map[string]string{v1.LabelZoneRegion: "no_us-west1-b", "uselessLabel": "none"},
149+
Labels: map[string]string{v1.LabelZoneRegion: "no_us-west1", "uselessLabel": "none"},
136150
},
137151
},
138152
wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, ErrReasonConflict),
139153
},
140154
{
141-
name: "label zone failure domain failed match",
155+
name: "beta zone label doesn't match",
142156
Pod: createPodWithVolume("pod_1", "vol_1", "PVC_1"),
143157
Node: &v1.Node{
144158
ObjectMeta: metav1.ObjectMeta{
@@ -148,6 +162,48 @@ func TestSingleZone(t *testing.T) {
148162
},
149163
wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, ErrReasonConflict),
150164
},
165+
{
166+
name: "zone label matched",
167+
Pod: createPodWithVolume("pod_1", "Vol_Stable_1", "PVC_Stable_1"),
168+
Node: &v1.Node{
169+
ObjectMeta: metav1.ObjectMeta{
170+
Name: "host1",
171+
Labels: map[string]string{v1.LabelZoneFailureDomainStable: "us-west1-a", "uselessLabel": "none"},
172+
},
173+
},
174+
},
175+
{
176+
name: "region label matched",
177+
Pod: createPodWithVolume("pod_1", "Vol_Stable_2", "PVC_Stable_2"),
178+
Node: &v1.Node{
179+
ObjectMeta: metav1.ObjectMeta{
180+
Name: "host1",
181+
Labels: map[string]string{v1.LabelZoneRegionStable: "us-west1", "uselessLabel": "none"},
182+
},
183+
},
184+
},
185+
{
186+
name: "region label doesn't match",
187+
Pod: createPodWithVolume("pod_1", "Vol_Stable_2", "PVC_Stable_2"),
188+
Node: &v1.Node{
189+
ObjectMeta: metav1.ObjectMeta{
190+
Name: "host1",
191+
Labels: map[string]string{v1.LabelZoneRegionStable: "no_us-west1", "uselessLabel": "none"},
192+
},
193+
},
194+
wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, ErrReasonConflict),
195+
},
196+
{
197+
name: "zone label doesn't match",
198+
Pod: createPodWithVolume("pod_1", "Vol_Stable_1", "PVC_Stable_1"),
199+
Node: &v1.Node{
200+
ObjectMeta: metav1.ObjectMeta{
201+
Name: "host1",
202+
Labels: map[string]string{v1.LabelZoneFailureDomainStable: "no_us-west1-a", "uselessLabel": "none"},
203+
},
204+
},
205+
wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, ErrReasonConflict),
206+
},
151207
}
152208

153209
for _, test := range tests {
@@ -178,6 +234,12 @@ func TestMultiZone(t *testing.T) {
178234
{
179235
ObjectMeta: metav1.ObjectMeta{Name: "Vol_3", Labels: map[string]string{v1.LabelZoneFailureDomain: "us-west1-c__us-west1-a"}},
180236
},
237+
{
238+
ObjectMeta: metav1.ObjectMeta{Name: "Vol_Stable_1", Labels: map[string]string{v1.LabelZoneFailureDomainStable: "us-west1-a"}},
239+
},
240+
{
241+
ObjectMeta: metav1.ObjectMeta{Name: "Vol_Stable_2", Labels: map[string]string{v1.LabelZoneFailureDomainStable: "us-west1-c__us-west1-a"}},
242+
},
181243
}
182244

183245
pvcLister := fakelisters.PersistentVolumeClaimLister{
@@ -197,6 +259,14 @@ func TestMultiZone(t *testing.T) {
197259
ObjectMeta: metav1.ObjectMeta{Name: "PVC_4", Namespace: "default"},
198260
Spec: v1.PersistentVolumeClaimSpec{VolumeName: "Vol_not_exist"},
199261
},
262+
{
263+
ObjectMeta: metav1.ObjectMeta{Name: "PVC_Stable_1", Namespace: "default"},
264+
Spec: v1.PersistentVolumeClaimSpec{VolumeName: "Vol_Stable_1"},
265+
},
266+
{
267+
ObjectMeta: metav1.ObjectMeta{Name: "PVC_Stable_2", Namespace: "default"},
268+
Spec: v1.PersistentVolumeClaimSpec{VolumeName: "Vol_Stable_2"},
269+
},
200270
}
201271

202272
tests := []struct {
@@ -215,7 +285,7 @@ func TestMultiZone(t *testing.T) {
215285
},
216286
},
217287
{
218-
name: "label zone failure domain matched",
288+
name: "beta zone label matched",
219289
Pod: createPodWithVolume("pod_1", "Vol_3", "PVC_3"),
220290
Node: &v1.Node{
221291
ObjectMeta: metav1.ObjectMeta{
@@ -225,7 +295,7 @@ func TestMultiZone(t *testing.T) {
225295
},
226296
},
227297
{
228-
name: "label zone failure domain failed match",
298+
name: "beta zone label doesn't match",
229299
Pod: createPodWithVolume("pod_1", "vol_1", "PVC_1"),
230300
Node: &v1.Node{
231301
ObjectMeta: metav1.ObjectMeta{
@@ -235,6 +305,27 @@ func TestMultiZone(t *testing.T) {
235305
},
236306
wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, ErrReasonConflict),
237307
},
308+
{
309+
name: "zone label matched",
310+
Pod: createPodWithVolume("pod_1", "Vol_Stable_2", "PVC_Stable_2"),
311+
Node: &v1.Node{
312+
ObjectMeta: metav1.ObjectMeta{
313+
Name: "host1",
314+
Labels: map[string]string{v1.LabelZoneFailureDomainStable: "us-west1-a", "uselessLabel": "none"},
315+
},
316+
},
317+
},
318+
{
319+
name: "zone label doesn't match",
320+
Pod: createPodWithVolume("pod_1", "Vol_Stable_1", "PVC_Stable_1"),
321+
Node: &v1.Node{
322+
ObjectMeta: metav1.ObjectMeta{
323+
Name: "host1",
324+
Labels: map[string]string{v1.LabelZoneFailureDomainStable: "us-west1-b", "uselessLabel": "none"},
325+
},
326+
},
327+
wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, ErrReasonConflict),
328+
},
238329
}
239330

240331
for _, test := range tests {

0 commit comments

Comments
 (0)