@@ -1391,22 +1391,27 @@ This capability will move to stable when the following criteria have been met.
1391
1391
- Components depending on the feature gate: kube-apiserver, kube-controller-manager, kube-proxy, and kubelet
1392
1392
1393
1393
* **Does enabling the feature change any default behavior?**
1394
- No. Pods and Services will remain single stack until cli flags have been modified
1394
+ Pods and Services will remain single- stack until cli flags have been modified
1395
1395
as described in this KEP. Once modified, existing and new services will remain
1396
- single stack until user requests otherwise. Pods will become dual-stack however
1397
- it will maintain the same ipfamily used in before enabling feature flag.
1396
+ single- stack until user requests otherwise. Pods will become dual-stack
1397
+ however will maintain the same ipfamily used before enabling feature flag.
1398
1398
1399
1399
* **Can the feature be disabled once it has been enabled (i.e. can we roll back
1400
1400
the enablement)?**
1401
- Yes. If we disable the feature gate, we must remove the CLI parameters. An
1402
- older client won't see or be able to use the new fields.
1401
+ Yes. If you decide to turn off dual-stack after turning on, ensure all
1402
+ services are converted to single-stack first (switch ipfamily to single-stack
1403
+ on all services) and then disable the feature. Remove the CLI parameters, as
1404
+ an older client won't see or be able to use the new fields. When the user
1405
+ disables dual-stack from the controller manager, new endpoints will no longer
1406
+ carry two sets, while existing endpoints may not be updated.
1403
1407
1404
1408
* **What happens if we reenable the feature if it was previously rolled back?**
1405
- Similar to enabling it the first time on a cluster. We don't load balance
1406
- across IP families, and with no selectors we don't get endpoints. If you use
1407
- the feature flag to turn off dual-stack, we do not edit your service. If you
1409
+ Whatever the user has defined will not change without intervention. If you
1408
1410
disable dual-stack from the controller manager, the service will be given
1409
- single-stack endpoints.
1411
+ single-stack endpoints. If you enable dual-stack again, it's as if you're
1412
+ enabling it for the first time on a cluster. We don't load balance across IP
1413
+ families, and with no selectors we don't get endpoints. If you use the
1414
+ feature flag to turn off dual-stack, we do not edit user input.
1410
1415
1411
1416
* **Are there any tests for feature enablement/disablement?**
1412
1417
The feature is being tested using integration tests with gate on/off. The
@@ -1420,14 +1425,23 @@ This capability will move to stable when the following criteria have been met.
1420
1425
### Rollout, Upgrade and Rollback Planning
1421
1426
1422
1427
* **How can a rollout fail? Can it impact already running workloads?**
1423
- Users **must** avoid changing existing cidrs. For both pods and services. Users
1424
- can only add to alternative ip family to existing cidrs. Changing existing cidrs
1425
- will result in nondeterministic failures depending on how the cluster networking
1426
- was configured.
1427
-
1428
- Existing workloads are not expected to be impacted during rollout. A component restart
1429
- during rollout might delay generating endpoint and endpoint slices for alternative IP families
1430
- if there are *new* workloads that depend on them they will fail.
1428
+ Users **must** avoid changing existing CIDRs for both pods and services.
1429
+ Users can only add an alternative ip family to existing CIDRs. Changing
1430
+ existing CIDRs will result in nondeterministic failures depending on how the
1431
+ cluster networking was configured.
1432
+
1433
+ Existing workloads are not expected to be impacted during rollout. When you
1434
+ disable dual-stack, existing routes aren't deleted. A component restart
1435
+ during rollout might delay generating endpoint and endpoint slices for
1436
+ alternative IP families. If there are *new* workloads that depend on them,
1437
+ they will fail.
1438
+
1439
+ Imbalance is possible if a replica set scales up or ipv6 gets turned off and
1440
+ the endpoint controller has not yet updated, but iptables and the service
1441
+ controller manager won't look at endpoints that are flagged off. (Endpoints
1442
+ can exist and not be used.) For services, the user will get an error
1443
+ immediately. If the existing rules are removed but new ones don't resolve
1444
+ correctly yet, then it has a chance to resolve on the next loop.
1431
1445
1432
1446
* **What specific metrics should inform a rollback?**
1433
1447
N/A
@@ -1455,31 +1469,38 @@ fields of API types, flags, etc.?**
1455
1469
1456
1470
* **What are the SLIs (Service Level Indicators) an operator can use to determine
1457
1471
the health of the service?**
1458
- Dual-stack networking is a functional addition, not a service with SLIs.
1472
+ Dual-stack networking is a functional addition, not a service with SLIs. Use
1473
+ existing metrics for kubelet pod creation and service creation to determine
1474
+ service health. [Validate
1475
+ IPv4/IPv6 dual-stack](https://kubernetes.io/docs/tasks/network/validate-dual-stack/)
1476
+ to ensure that node addressing, pod addressing, and services are configured
1477
+ correctly. If dual-stack services are created, they have passed validation.
1459
1478
1460
1479
* **What are the reasonable SLOs (Service Level Objectives) for the above SLIs?**
1461
- N/A
1480
+ Existing kubelet pod creation and service creation SLOs are what is needed.
1462
1481
1463
1482
* **Are there any missing metrics that would be useful to have to improve observability
1464
1483
of this feature?**
1465
1484
1466
1485
1. For services:
1467
1486
1468
- Services are not in the path of pod creation. Thus, any malfunction or
1469
- bugs in services will not affect pods.
1487
+ Whether a cluster is converted to dual-stack or converted back to
1488
+ single-stack, services will remain the same because the dual-stack
1489
+ conversation does not change user data.
1470
1490
1471
1491
Services/Endpoint selection is not in path of pod creation. It runs in
1472
- kube-controller-manager, thus this is N/A .
1492
+ kube-controller-manager, so any malfunction will not affect pods .
1473
1493
1474
1494
2. For pods:
1475
1495
1476
1496
Dual-stack components are not in path of pod creation. It is in the path
1477
1497
of reporting pod ips. So pod creation will not be affected; if it is
1478
- affected, then it is a CNI issue.
1498
+ affected, then it is a CNI issue (entirely separate from dual-stack) .
1479
1499
1480
1500
Dual-stack components are in the path of PodIPs reporting which affects
1481
1501
kubelet. If there is a problem (or if there are persistent problems)
1482
- then disabling the featuregate on api-server will mitigate.
1502
+ then it is migitated by disabling the feature gate, which turns it off
1503
+ for kube-apiserver, kube-controller-manager, kube-proxy, and kubelet.
1483
1504
1484
1505
### Dependencies
1485
1506
@@ -1497,8 +1518,7 @@ of this feature?**
1497
1518
1498
1519
* **Will enabling / using this feature result in any new calls to the cloud
1499
1520
provider?**
1500
- No. Errors are surfaced when the user makes a call. We don't focus on
1501
- metrics-server at this point.
1521
+ No. IP allocation for services only involves the API server.
1502
1522
1503
1523
* **Will enabling / using this feature result in increasing size or count of
1504
1524
the existing API objects?**
@@ -1524,7 +1544,7 @@ resource usage (CPU, RAM, disk, IO, ...) in any components?**
1524
1544
* Failure to create dual-stack services. Operator must perform the following steps:
1525
1545
1. Ensure that the cluster has `IPv6DualStack` feature enabled.
1526
1546
2. Ensure that api-server is correctly configured with multi (dual-stack) service
1527
- cidrs using `--services-cluster-ip-range` flag.
1547
+ CIDRs using `--services-cluster-ip-range` flag.
1528
1548
1529
1549
* Failure to route traffic to pod backing a dual-stack service. Operator must perform the
1530
1550
following steps:
@@ -1543,6 +1563,22 @@ resource usage (CPU, RAM, disk, IO, ...) in any components?**
1543
1563
5. If the pod is using host network then operator must ensure that the node is correctly
1544
1564
reporting dual-stack addresses.
1545
1565
1566
+ * Possible workload imbalances
1567
+
1568
+ Once a service is saved (with the appropriate feature flag and one or more
1569
+ cidrs), the controller manager scans the number of pods (seeing dual or
1570
+ single) and creates endpoint objects pointing to these pods.Each node has
1571
+ a proxy that watches for services, endpoints, endpoint slices, per family.
1572
+ If the existing rules are removed but new ones don't resolve correctly, then
1573
+ it will resolve on the next loop.
1574
+
1575
+ If allocation fails, that would translate to the pod not running if there is
1576
+ no IP allocated from the CIDR. If the pod is created but routing is not
1577
+ working correctly, there will be an error in the kube-proxy logs, so
1578
+ debugging would take place by looking at iptables, similar to how it is
1579
+ already done today. The cluster IP allocation is allocated in a syncronous
1580
+ process; if this fails the service creation will fail and the service object
1581
+ will not be persisted.
1582
+
1546
1583
* **What steps should be taken if SLOs are not being met to determine the problem?**
1547
1584
N/A
1548
-
0 commit comments