@@ -187,10 +187,69 @@ The feature should continue to work just fine.
187
187
188
188
###### Are there any tests for feature enablement/disablement?
189
189
190
- In addition to the unit tests, we will manually confirm that restarting kubelet with the
191
- feature gate toggled has the expected behavior (that it sets ` kubeProxyVersion ` if the
192
- feature gate is disabled, even if it doesn't also need to set ` kubeletVersion ` , and that
193
- it clears ` kubeProxyVersion ` if the feature gate is enabled).
190
+ I manually confirmed that restarting kubelet behaves as expected with feature gate enabled/disabled.
191
+
192
+ I've tried to simulate this manually by running (using `local-cluster-up.sh).
193
+
194
+ Cluster Version v1.31+, ` FEATURE_GATES=DisableNodeKubeProxyVersion=false ` (manual setting):
195
+
196
+ ```
197
+ ~ kubectl get nodes 127.0.0.1 -oyaml
198
+ apiVersion: v1
199
+ kind: Node
200
+ ...
201
+ name: 127.0.0.1
202
+ uid: e74238e1-9e3c-41c5-a4ca-3a30941cd16c
203
+ ...
204
+ kubeProxyVersion: v0.0.0-master+$Format:%H$
205
+ ...
206
+ ```
207
+
208
+ * Change the value of ` DisableNodeKubeProxyVersion ` to true and restart kubelet, The value of the ` kubeProxyVersion ` field in nodeInfo is empty.
209
+
210
+ ```
211
+ ~ sudo sed -i s@DisableNodeKubeProxyVersion:\ false@DisableNodeKubeProxyVersion:\ true@g /tmp/local-up-cluster.sh.VABqgo/kubelet.yaml
212
+ ➜ kubernetes git:(master) ✗ sudo -E /home/bing/go/src/k8s.io/kubernetes/kubernetes/_output/local/bin/linux/arm64/kubelet \
213
+ --v=3 --vmodule= --hostname-override=127.0.0.1 --cloud-provider= \
214
+ --cloud-config= --bootstrap-kubeconfig=/var/run/kubernetes/kubelet.kubeconfig \
215
+ --kubeconfig=/var/run/kubernetes/kubelet-rotated.kubeconfig \
216
+ --config=/tmp/local-up-cluster.sh.VABqgo/kubelet.yaml
217
+ ```
218
+
219
+ ```
220
+ ➜ ~ kubectl get nodes 127.0.0.1 -oyaml
221
+ apiVersion: v1
222
+ kind: Node
223
+ ...
224
+ name: 127.0.0.1
225
+ uid: e74238e1-9e3c-41c5-a4ca-3a30941cd16c
226
+ ...
227
+ kubeProxyVersion: ""
228
+ ...
229
+ ```
230
+
231
+ * Change the value of ` DisableNodeKubeProxyVersion ` to false and restart kubelet, The value of the ` kubeProxyVersion ` field in nodeInfo is not empty.
232
+
233
+ ```
234
+ ~ sudo sed -i s@DisableNodeKubeProxyVersion:\ true@DisableNodeKubeProxyVersion:\ false@g /tmp/local-up-cluster.sh.VABqgo/kubelet.yaml
235
+ ➜ kubernetes git:(master) ✗ sudo -E /home/bing/go/src/k8s.io/kubernetes/kubernetes/_output/local/bin/linux/arm64/kubelet \
236
+ --v=3 --vmodule= --hostname-override=127.0.0.1 --cloud-provider= \
237
+ --cloud-config= --bootstrap-kubeconfig=/var/run/kubernetes/kubelet.kubeconfig \
238
+ --kubeconfig=/var/run/kubernetes/kubelet-rotated.kubeconfig \
239
+ --config=/tmp/local-up-cluster.sh.VABqgo/kubelet.yaml
240
+ ```
241
+
242
+ ```
243
+ ~ kubectl get nodes 127.0.0.1 -oyaml
244
+ apiVersion: v1
245
+ kind: Node
246
+ ...
247
+ name: 127.0.0.1
248
+ uid: e74238e1-9e3c-41c5-a4ca-3a30941cd16c
249
+ ...
250
+ kubeProxyVersion: v0.0.0-master+$Format:%H$
251
+ ...
252
+ ```
194
253
195
254
### Rollout, Upgrade and Rollback Planning
196
255
@@ -204,11 +263,107 @@ N/A
204
263
205
264
###### Were upgrade and rollback tested? Was the upgrade->downgrade->upgrade path tested?
206
265
207
- N/A
266
+ I've tried to simulate this manually by running (using ` local-cluster-up.sh ` with ` PRESERVE_ETCD=true ` ):
267
+
268
+ 1 . Cluster Version v1.30 ` FEATURE_GATES=DisableNodeKubeProxyVersion=false ` (default value)
269
+
270
+ ```
271
+ git checkout release-1.30
272
+ Switched to branch 'release-1.30'
273
+ Your branch is up to date with 'upstream/release-1.30'.
274
+ ➜ kubernetes git:(release-1.30)
275
+ ➜ kubernetes git:(release-1.30) sudo -E env PATH=$PATH PRESERVE_ETCD=true \
276
+ ETCD_DIR=/tmp/etcd-temp ./hack/local-up-cluster.sh
277
+ ```
278
+
279
+ ```
280
+ ~ kubectl get nodes 127.0.0.1 -oyaml
281
+ apiVersion: v1
282
+ kind: Node
283
+ ...
284
+ name: 127.0.0.1
285
+ uid: e74238e1-9e3c-41c5-a4ca-3a30941cd16c
286
+ ...
287
+ kubeProxyVersion: v0.0.0-master+$Format:%H$
288
+ ...
289
+ ```
290
+
291
+ * The value of the ` kubeProxyVersion ` field in nodeInfo is not empty.
292
+
293
+ 2 . Cluster Version v1.31+ ` FEATURE_GATES=DisableNodeKubeProxyVersion=true ` (default value)
294
+
295
+ ```
296
+ git checkout master
297
+ Switched to branch 'master'
298
+ ➜ kubernetes git:(master) sudo -E env PATH=$PATH PRESERVE_ETCD=true \
299
+ ETCD_DIR=/tmp/etcd-temp ./hack/local-up-cluster.sh
300
+
301
+ ```
302
+ ```
303
+ ➜ ~ kubectl get nodes 127.0.0.1 -oyaml
304
+ apiVersion: v1
305
+ kind: Node
306
+ ...
307
+ name: 127.0.0.1
308
+ uid: e74238e1-9e3c-41c5-a4ca-3a30941cd16c
309
+ ...
310
+ kubeProxyVersion: ""
311
+ ...
312
+ ```
313
+
314
+ * The value of the ` kubeProxyVersion ` field in nodeInfo is empty.
315
+
316
+ 3 . Cluster Version v1.30 ` FEATURE_GATES=DisableNodeKubeProxyVersion=true ` (manual setting)
317
+
318
+ ```
319
+ git checkout release-1.30
320
+ Already on 'release-1.30'
321
+ Your branch is up to date with 'upstream/release-1.30'.
322
+ ➜ kubernetes git:(release-1.30)
323
+ ➜ kubernetes git:(release-1.30) sudo -E env PATH=$PATH PRESERVE_ETCD=true \
324
+ ETCD_DIR=/tmp/etcd-temp FEATURE_GATES=DisableNodeKubeProxyVersion=true ./hack/local-up-cluster.sh
325
+ ```
326
+
327
+ ```
328
+ ➜ ~ kubectl get nodes 127.0.0.1 -oyaml
329
+ apiVersion: v1
330
+ kind: Node
331
+ ...
332
+ name: 127.0.0.1
333
+ uid: e74238e1-9e3c-41c5-a4ca-3a30941cd16c
334
+ ...
335
+ kubeProxyVersion: ""
336
+ ...
337
+ ```
338
+
339
+ * The value of the ` kubeProxyVersion ` field in nodeInfo is empty.
340
+
341
+ 4 . Cluster Version v1.31+ ` FEATURE_GATES=DisableNodeKubeProxyVersion=false ` (manual setting)
342
+
343
+ ```
344
+ git checkout master
345
+ Switched to branch 'master'
346
+ ➜ kubernetes git:(master) ✗ sudo -E env PATH=$PATH PRESERVE_ETCD=true \
347
+ ETCD_DIR=/tmp/etcd-temp FEATURE_GATES=DisableNodeKubeProxyVersion=false ./hack/local-up-cluster.sh
348
+ ```
349
+
350
+ ```
351
+ ~ kubectl get nodes 127.0.0.1 -oyaml
352
+ apiVersion: v1
353
+ kind: Node
354
+ ...
355
+ name: 127.0.0.1
356
+ uid: e74238e1-9e3c-41c5-a4ca-3a30941cd16c
357
+ ...
358
+ kubeProxyVersion: v0.0.0-master+$Format:%H$
359
+ ...
360
+ ```
361
+
362
+ * The value of the ` kubeProxyVersion ` field in nodeInfo is not empty.
208
363
209
364
###### Is the rollout accompanied by any deprecations and/or removals of features, APIs, fields of API types, flags, etc.?
210
365
211
- No
366
+ * We will deprecate the ` kubeProxyVersion ` field in ` v1.Node ` .
212
367
213
368
### Monitoring Requirements
214
369
252
407
253
408
###### How does this feature react if the API server and/or etcd is unavailable?
254
409
410
+ There will be no impact, because when the API server and etcd are not available, we will not be able to get the Node object.
411
+
255
412
###### What are other known failure modes?
256
413
414
+ N/A.
415
+
257
416
###### What steps should be taken if SLOs are not being met to determine the problem?
258
417
418
+ N/A.
419
+
259
420
## Implementation History
260
421
261
422
\- 2023-05-15: Initial draft KEP
262
423
424
+ \- 2024-06-10: Promoted to beta and add manual upgrade and rollback tests
425
+
263
426
## Drawbacks
264
427
265
428
## Alternatives
0 commit comments