diff --git a/test/e2e/framework/endpointslice/ports.go b/test/e2e/framework/endpointslice/ports.go index f8aa01d154f..c61230c7d2a 100644 --- a/test/e2e/framework/endpointslice/ports.go +++ b/test/e2e/framework/endpointslice/ports.go @@ -17,7 +17,7 @@ limitations under the License. package endpointslice import ( - discoveryv1beta1 "k8s.io/api/discovery/v1beta1" + discoveryv1 "k8s.io/api/discovery/v1" "k8s.io/apimachinery/pkg/types" ) @@ -25,7 +25,7 @@ import ( type PortsByPodUID map[types.UID][]int // GetContainerPortsByPodUID returns a PortsByPodUID map on the given endpoints. -func GetContainerPortsByPodUID(eps []discoveryv1beta1.EndpointSlice) PortsByPodUID { +func GetContainerPortsByPodUID(eps []discoveryv1.EndpointSlice) PortsByPodUID { m := PortsByPodUID{} for _, es := range eps { diff --git a/test/e2e/framework/service/jig.go b/test/e2e/framework/service/jig.go index bb1f7ac68ec..ed9ee809f8c 100644 --- a/test/e2e/framework/service/jig.go +++ b/test/e2e/framework/service/jig.go @@ -27,7 +27,7 @@ import ( "github.com/onsi/ginkgo" v1 "k8s.io/api/core/v1" - discoveryv1beta1 "k8s.io/api/discovery/v1beta1" + discoveryv1 "k8s.io/api/discovery/v1" policyv1beta1 "k8s.io/api/policy/v1beta1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -392,52 +392,47 @@ func (j *TestJig) waitForAvailableEndpoint(timeout time.Duration) error { go controller.Run(stopCh) - // If EndpointSlice API is enabled, then validate if appropriate EndpointSlice objects were also create/updated/deleted. - if _, err := j.Client.Discovery().ServerResourcesForGroupVersion(discoveryv1beta1.SchemeGroupVersion.String()); err == nil { - var esController cache.Controller - _, esController = cache.NewInformer( - &cache.ListWatch{ - ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { - options.LabelSelector = "kubernetes.io/service-name=" + j.Name - obj, err := j.Client.DiscoveryV1beta1().EndpointSlices(j.Namespace).List(context.TODO(), options) - return runtime.Object(obj), err - }, - WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { - options.LabelSelector = "kubernetes.io/service-name=" + j.Name - return j.Client.DiscoveryV1beta1().EndpointSlices(j.Namespace).Watch(context.TODO(), options) - }, + var esController cache.Controller + _, esController = cache.NewInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + options.LabelSelector = "kubernetes.io/service-name=" + j.Name + obj, err := j.Client.DiscoveryV1().EndpointSlices(j.Namespace).List(context.TODO(), options) + return runtime.Object(obj), err }, - &discoveryv1beta1.EndpointSlice{}, - 0, - cache.ResourceEventHandlerFuncs{ - AddFunc: func(obj interface{}) { - if es, ok := obj.(*discoveryv1beta1.EndpointSlice); ok { - // TODO: currently we only consider addreses in 1 slice, but services with - // a large number of endpoints (>1000) may have multiple slices. Some slices - // with only a few addresses. We should check the addresses in all slices. - if len(es.Endpoints) > 0 && len(es.Endpoints[0].Addresses) > 0 { - endpointSliceAvailable = true - } - } - }, - UpdateFunc: func(old, cur interface{}) { - if es, ok := cur.(*discoveryv1beta1.EndpointSlice); ok { - // TODO: currently we only consider addreses in 1 slice, but services with - // a large number of endpoints (>1000) may have multiple slices. Some slices - // with only a few addresses. We should check the addresses in all slices. - if len(es.Endpoints) > 0 && len(es.Endpoints[0].Addresses) > 0 { - endpointSliceAvailable = true - } - } - }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + options.LabelSelector = "kubernetes.io/service-name=" + j.Name + return j.Client.DiscoveryV1().EndpointSlices(j.Namespace).Watch(context.TODO(), options) }, - ) + }, + &discoveryv1.EndpointSlice{}, + 0, + cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + if es, ok := obj.(*discoveryv1.EndpointSlice); ok { + // TODO: currently we only consider addreses in 1 slice, but services with + // a large number of endpoints (>1000) may have multiple slices. Some slices + // with only a few addresses. We should check the addresses in all slices. + if len(es.Endpoints) > 0 && len(es.Endpoints[0].Addresses) > 0 { + endpointSliceAvailable = true + } + } + }, + UpdateFunc: func(old, cur interface{}) { + if es, ok := cur.(*discoveryv1.EndpointSlice); ok { + // TODO: currently we only consider addreses in 1 slice, but services with + // a large number of endpoints (>1000) may have multiple slices. Some slices + // with only a few addresses. We should check the addresses in all slices. + if len(es.Endpoints) > 0 && len(es.Endpoints[0].Addresses) > 0 { + endpointSliceAvailable = true + } + } + }, + }, + ) - go esController.Run(stopCh) + go esController.Run(stopCh) - } else { - endpointSliceAvailable = true - } err := wait.Poll(1*time.Second, timeout, func() (bool, error) { return endpointAvailable && endpointSliceAvailable, nil }) diff --git a/test/e2e/network/endpointslice.go b/test/e2e/network/endpointslice.go index f7a578dfc9e..745b82999c2 100644 --- a/test/e2e/network/endpointslice.go +++ b/test/e2e/network/endpointslice.go @@ -23,7 +23,7 @@ import ( "time" v1 "k8s.io/api/core/v1" - discoveryv1beta1 "k8s.io/api/discovery/v1beta1" + discoveryv1 "k8s.io/api/discovery/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" @@ -58,7 +58,7 @@ var _ = common.SIGDescribe("EndpointSlice", func() { } endpointSubset := endpoints.Subsets[0] - endpointSlice, err := cs.DiscoveryV1beta1().EndpointSlices(namespace).Get(context.TODO(), name, metav1.GetOptions{}) + endpointSlice, err := cs.DiscoveryV1().EndpointSlices(namespace).Get(context.TODO(), name, metav1.GetOptions{}) framework.ExpectNoError(err, "error creating EndpointSlice resource") if len(endpointSlice.Ports) != len(endpointSubset.Ports) { framework.Failf("Expected EndpointSlice to have %d ports, got %d: %#v", len(endpointSubset.Ports), len(endpointSlice.Ports), endpointSlice.Ports) @@ -99,9 +99,9 @@ var _ = common.SIGDescribe("EndpointSlice", func() { } // Expect EndpointSlice resource to be created. - var endpointSlice discoveryv1beta1.EndpointSlice + var endpointSlice discoveryv1.EndpointSlice if err := wait.PollImmediate(2*time.Second, wait.ForeverTestTimeout, func() (bool, error) { - endpointSliceList, err := cs.DiscoveryV1beta1().EndpointSlices(svc.Namespace).List(context.TODO(), metav1.ListOptions{ + endpointSliceList, err := cs.DiscoveryV1().EndpointSlices(svc.Namespace).List(context.TODO(), metav1.ListOptions{ LabelSelector: "kubernetes.io/service-name=" + svc.Name, }) if err != nil { @@ -117,12 +117,12 @@ var _ = common.SIGDescribe("EndpointSlice", func() { } // Ensure EndpointSlice has expected values. - managedBy, ok := endpointSlice.Labels[discoveryv1beta1.LabelManagedBy] + managedBy, ok := endpointSlice.Labels[discoveryv1.LabelManagedBy] expectedManagedBy := "endpointslice-controller.k8s.io" if !ok { - framework.Failf("Expected EndpointSlice to have %s label, got %#v", discoveryv1beta1.LabelManagedBy, endpointSlice.Labels) + framework.Failf("Expected EndpointSlice to have %s label, got %#v", discoveryv1.LabelManagedBy, endpointSlice.Labels) } else if managedBy != expectedManagedBy { - framework.Failf("Expected EndpointSlice to have %s label with %s value, got %s", discoveryv1beta1.LabelManagedBy, expectedManagedBy, managedBy) + framework.Failf("Expected EndpointSlice to have %s label with %s value, got %s", discoveryv1.LabelManagedBy, expectedManagedBy, managedBy) } if len(endpointSlice.Endpoints) != 0 { framework.Failf("Expected EndpointSlice to have 0 endpoints, got %d: %#v", len(endpointSlice.Endpoints), endpointSlice.Endpoints) @@ -150,7 +150,7 @@ var _ = common.SIGDescribe("EndpointSlice", func() { // and may need to retry informer resync at some point during an e2e // run. if err := wait.PollImmediate(2*time.Second, 90*time.Second, func() (bool, error) { - endpointSliceList, err := cs.DiscoveryV1beta1().EndpointSlices(svc.Namespace).List(context.TODO(), metav1.ListOptions{ + endpointSliceList, err := cs.DiscoveryV1().EndpointSlices(svc.Namespace).List(context.TODO(), metav1.ListOptions{ LabelSelector: "kubernetes.io/service-name=" + svc.Name, }) if err != nil { @@ -313,7 +313,7 @@ var _ = common.SIGDescribe("EndpointSlice", func() { // and takes some shortcuts with the assumption that those test cases will be // the only caller of this function. func expectEndpointsAndSlices(cs clientset.Interface, ns string, svc *v1.Service, pods []*v1.Pod, numSubsets, numSlices int, namedPort bool) { - endpointSlices := []discoveryv1beta1.EndpointSlice{} + endpointSlices := []discoveryv1.EndpointSlice{} if err := wait.PollImmediate(5*time.Second, 2*time.Minute, func() (bool, error) { endpointSlicesFound, hasMatchingSlices := hasMatchingEndpointSlices(cs, ns, svc.Name, len(pods), numSlices) if !hasMatchingSlices { @@ -479,12 +479,12 @@ func expectEndpointsAndSlices(cs clientset.Interface, ns string, svc *v1.Service // deleteEndpointSlices deletes EndpointSlices for the specified Service. func deleteEndpointSlices(cs clientset.Interface, ns string, svc *v1.Service) { - listOptions := metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", discoveryv1beta1.LabelServiceName, svc.Name)} - esList, err := cs.DiscoveryV1beta1().EndpointSlices(ns).List(context.TODO(), listOptions) + listOptions := metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", discoveryv1.LabelServiceName, svc.Name)} + esList, err := cs.DiscoveryV1().EndpointSlices(ns).List(context.TODO(), listOptions) framework.ExpectNoError(err, "Error fetching EndpointSlices for %s/%s Service", ns, svc.Name) for _, endpointSlice := range esList.Items { - err := cs.DiscoveryV1beta1().EndpointSlices(ns).Delete(context.TODO(), endpointSlice.Name, metav1.DeleteOptions{}) + err := cs.DiscoveryV1().EndpointSlices(ns).Delete(context.TODO(), endpointSlice.Name, metav1.DeleteOptions{}) framework.ExpectNoError(err, "Error deleting %s/%s EndpointSlice", ns, endpointSlice.Name) } } @@ -492,14 +492,14 @@ func deleteEndpointSlices(cs clientset.Interface, ns string, svc *v1.Service) { // hasMatchingEndpointSlices returns any EndpointSlices that match the // conditions along with a boolean indicating if all the conditions have been // met. -func hasMatchingEndpointSlices(cs clientset.Interface, ns, svcName string, numEndpoints, numSlices int) ([]discoveryv1beta1.EndpointSlice, bool) { - listOptions := metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", discoveryv1beta1.LabelServiceName, svcName)} - esList, err := cs.DiscoveryV1beta1().EndpointSlices(ns).List(context.TODO(), listOptions) +func hasMatchingEndpointSlices(cs clientset.Interface, ns, svcName string, numEndpoints, numSlices int) ([]discoveryv1.EndpointSlice, bool) { + listOptions := metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", discoveryv1.LabelServiceName, svcName)} + esList, err := cs.DiscoveryV1().EndpointSlices(ns).List(context.TODO(), listOptions) framework.ExpectNoError(err, "Error fetching EndpointSlice for Service %s/%s", ns, svcName) if len(esList.Items) == 0 { framework.Logf("EndpointSlice for Service %s/%s not found", ns, svcName) - return []discoveryv1beta1.EndpointSlice{}, false + return []discoveryv1.EndpointSlice{}, false } // In some cases the EndpointSlice controller will create more // EndpointSlices than necessary resulting in some duplication. This is diff --git a/test/e2e/network/endpointslicemirroring.go b/test/e2e/network/endpointslicemirroring.go index 52d7eef19b3..93385b746c5 100644 --- a/test/e2e/network/endpointslicemirroring.go +++ b/test/e2e/network/endpointslicemirroring.go @@ -23,7 +23,7 @@ import ( "github.com/onsi/ginkgo" v1 "k8s.io/api/core/v1" - discoveryv1beta1 "k8s.io/api/discovery/v1beta1" + discoveryv1 "k8s.io/api/discovery/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" clientset "k8s.io/client-go/kubernetes" @@ -73,8 +73,8 @@ var _ = common.SIGDescribe("EndpointSliceMirroring", func() { framework.ExpectNoError(err, "Unexpected error creating Endpoints") if err := wait.PollImmediate(2*time.Second, 12*time.Second, func() (bool, error) { - esList, err := cs.DiscoveryV1beta1().EndpointSlices(f.Namespace.Name).List(context.TODO(), metav1.ListOptions{ - LabelSelector: discoveryv1beta1.LabelServiceName + "=" + svc.Name, + esList, err := cs.DiscoveryV1().EndpointSlices(f.Namespace.Name).List(context.TODO(), metav1.ListOptions{ + LabelSelector: discoveryv1.LabelServiceName + "=" + svc.Name, }) if err != nil { framework.Logf("Error listing EndpointSlices: %v", err) @@ -125,8 +125,8 @@ var _ = common.SIGDescribe("EndpointSliceMirroring", func() { // Expect mirrored EndpointSlice resource to be updated. if err := wait.PollImmediate(2*time.Second, 12*time.Second, func() (bool, error) { - esList, err := cs.DiscoveryV1beta1().EndpointSlices(f.Namespace.Name).List(context.TODO(), metav1.ListOptions{ - LabelSelector: discoveryv1beta1.LabelServiceName + "=" + svc.Name, + esList, err := cs.DiscoveryV1().EndpointSlices(f.Namespace.Name).List(context.TODO(), metav1.ListOptions{ + LabelSelector: discoveryv1.LabelServiceName + "=" + svc.Name, }) if err != nil { return false, err @@ -172,8 +172,8 @@ var _ = common.SIGDescribe("EndpointSliceMirroring", func() { // Expect mirrored EndpointSlice resource to be updated. if err := wait.PollImmediate(2*time.Second, 12*time.Second, func() (bool, error) { - esList, err := cs.DiscoveryV1beta1().EndpointSlices(f.Namespace.Name).List(context.TODO(), metav1.ListOptions{ - LabelSelector: discoveryv1beta1.LabelServiceName + "=" + svc.Name, + esList, err := cs.DiscoveryV1().EndpointSlices(f.Namespace.Name).List(context.TODO(), metav1.ListOptions{ + LabelSelector: discoveryv1.LabelServiceName + "=" + svc.Name, }) if err != nil { return false, err diff --git a/test/e2e/network/networking_perf.go b/test/e2e/network/networking_perf.go index 767790c9493..ef81ba83d10 100644 --- a/test/e2e/network/networking_perf.go +++ b/test/e2e/network/networking_perf.go @@ -20,12 +20,12 @@ package network import ( "context" "fmt" - discoveryv1beta1 "k8s.io/api/discovery/v1beta1" "time" "github.com/onsi/ginkgo" appsv1 "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" + discoveryv1 "k8s.io/api/discovery/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" clientset "k8s.io/client-go/kubernetes" @@ -212,8 +212,8 @@ var _ = common.SIGDescribe("Networking IPerf2 [Feature:Networking-Performance]", // Make sure the server is ready to go framework.Logf("waiting for iperf2 server endpoints") err = wait.Poll(2*time.Second, largeClusterTimeout, func() (done bool, err error) { - listOptions := metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", discoveryv1beta1.LabelServiceName, serverServiceName)} - esList, err := f.ClientSet.DiscoveryV1beta1().EndpointSlices(f.Namespace.Name).List(context.TODO(), listOptions) + listOptions := metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", discoveryv1.LabelServiceName, serverServiceName)} + esList, err := f.ClientSet.DiscoveryV1().EndpointSlices(f.Namespace.Name).List(context.TODO(), listOptions) framework.ExpectNoError(err, "Error fetching EndpointSlice for Service %s/%s", f.Namespace.Name, serverServiceName) if len(esList.Items) == 0 { diff --git a/test/e2e/network/service.go b/test/e2e/network/service.go index 7040dbca8dc..b6bbbfd2d88 100644 --- a/test/e2e/network/service.go +++ b/test/e2e/network/service.go @@ -36,7 +36,7 @@ import ( appsv1 "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" - discoveryv1beta1 "k8s.io/api/discovery/v1beta1" + discoveryv1 "k8s.io/api/discovery/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime/schema" @@ -2781,11 +2781,11 @@ func validateEndpointsPortsOrFail(c clientset.Interface, namespace, serviceName // If EndpointSlice API is enabled, then validate if appropriate EndpointSlice objects // were also create/updated/deleted. - if _, err := c.Discovery().ServerResourcesForGroupVersion(discoveryv1beta1.SchemeGroupVersion.String()); err == nil { + if _, err := c.Discovery().ServerResourcesForGroupVersion(discoveryv1.SchemeGroupVersion.String()); err == nil { opts := metav1.ListOptions{ LabelSelector: "kubernetes.io/service-name=" + serviceName, } - es, err := c.DiscoveryV1beta1().EndpointSlices(namespace).List(context.TODO(), opts) + es, err := c.DiscoveryV1().EndpointSlices(namespace).List(context.TODO(), opts) if err != nil { framework.Logf("Failed go list EndpointSlice objects: %v", err) // Retry the error diff --git a/test/integration/dualstack/dualstack_endpoints_test.go b/test/integration/dualstack/dualstack_endpoints_test.go index f3055f39670..a4c98dea26d 100644 --- a/test/integration/dualstack/dualstack_endpoints_test.go +++ b/test/integration/dualstack/dualstack_endpoints_test.go @@ -24,7 +24,7 @@ import ( "time" v1 "k8s.io/api/core/v1" - discovery "k8s.io/api/discovery/v1beta1" + discovery "k8s.io/api/discovery/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" @@ -253,7 +253,7 @@ func TestDualStackEndpoints(t *testing.T) { // wait until the endpoint slices are created err = wait.PollImmediate(1*time.Second, wait.ForeverTestTimeout, func() (bool, error) { lSelector := discovery.LabelServiceName + "=" + svc.Name - esList, err := client.DiscoveryV1beta1().EndpointSlices(ns.Name).List(context.TODO(), metav1.ListOptions{LabelSelector: lSelector}) + esList, err := client.DiscoveryV1().EndpointSlices(ns.Name).List(context.TODO(), metav1.ListOptions{LabelSelector: lSelector}) if err != nil { t.Logf("Error listing EndpointSlices: %v", err) return false, nil diff --git a/test/integration/endpointslice/endpointslicemirroring_test.go b/test/integration/endpointslice/endpointslicemirroring_test.go index 67030ac9b27..d10bad6ba54 100644 --- a/test/integration/endpointslice/endpointslicemirroring_test.go +++ b/test/integration/endpointslice/endpointslicemirroring_test.go @@ -194,7 +194,7 @@ func TestEndpointSliceMirroring(t *testing.T) { err = wait.PollImmediate(1*time.Second, wait.ForeverTestTimeout, func() (bool, error) { lSelector := discovery.LabelServiceName + "=" + resourceName - esList, err := client.DiscoveryV1beta1().EndpointSlices(ns.Name).List(context.TODO(), metav1.ListOptions{LabelSelector: lSelector}) + esList, err := client.DiscoveryV1().EndpointSlices(ns.Name).List(context.TODO(), metav1.ListOptions{LabelSelector: lSelector}) if err != nil { t.Logf("Error listing EndpointSlices: %v", err) return false, err