mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 18:00:08 +00:00
Merge pull request #14348 from jiangyaoguo/fix-kubeproxy-e2e
Auto commit by PR queue bot
This commit is contained in:
commit
2eae864f26
@ -31,6 +31,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/latest"
|
"k8s.io/kubernetes/pkg/api/latest"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
)
|
)
|
||||||
@ -471,7 +472,18 @@ func (config *KubeProxyTestConfig) deleteNetProxyPod() {
|
|||||||
pod := config.endpointPods[0]
|
pod := config.endpointPods[0]
|
||||||
config.getPodClient().Delete(pod.Name, nil)
|
config.getPodClient().Delete(pod.Name, nil)
|
||||||
config.endpointPods = config.endpointPods[1:]
|
config.endpointPods = config.endpointPods[1:]
|
||||||
time.Sleep(5 * time.Second) // wait for kube-proxy to catch up with the pod being deleted.
|
// wait for pod being deleted.
|
||||||
|
err := waitForPodToDisappear(config.f.Client, config.f.Namespace.Name, pod.Name, labels.Everything(), time.Second, util.ForeverTestTimeout)
|
||||||
|
if err != nil {
|
||||||
|
Failf("Failed to delete %s pod: %v", pod.Name, err)
|
||||||
|
}
|
||||||
|
// wait for endpoint being removed.
|
||||||
|
err = waitForServiceEndpointsNum(config.f.Client, config.f.Namespace.Name, nodePortServiceName, len(config.endpointPods), time.Second, util.ForeverTestTimeout)
|
||||||
|
if err != nil {
|
||||||
|
Failf("Failed to remove endpoint from service: %s", nodePortServiceName)
|
||||||
|
}
|
||||||
|
// wait for kube-proxy to catch up with the pod being deleted.
|
||||||
|
time.Sleep(5 * time.Second)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *KubeProxyTestConfig) createPod(pod *api.Pod) *api.Pod {
|
func (config *KubeProxyTestConfig) createPod(pod *api.Pod) *api.Pod {
|
||||||
|
@ -641,11 +641,8 @@ func waitForRCPodOnNode(c *client.Client, ns, rcName, node string) (*api.Pod, er
|
|||||||
return p, err
|
return p, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// waitForRCPodToDisappear returns nil if the pod from the given replication controller (described by rcName) no longer exists.
|
func waitForPodToDisappear(c *client.Client, ns, podName string, label labels.Selector, interval, timeout time.Duration) error {
|
||||||
// In case of failure or too long waiting time, an error is returned.
|
return wait.Poll(interval, timeout, func() (bool, error) {
|
||||||
func waitForRCPodToDisappear(c *client.Client, ns, rcName, podName string) error {
|
|
||||||
label := labels.SelectorFromSet(labels.Set(map[string]string{"name": rcName}))
|
|
||||||
return wait.Poll(20*time.Second, 5*time.Minute, func() (bool, error) {
|
|
||||||
Logf("Waiting for pod %s to disappear", podName)
|
Logf("Waiting for pod %s to disappear", podName)
|
||||||
pods, err := c.Pods(ns).List(label, fields.Everything())
|
pods, err := c.Pods(ns).List(label, fields.Everything())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -666,6 +663,13 @@ func waitForRCPodToDisappear(c *client.Client, ns, rcName, podName string) error
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// waitForRCPodToDisappear returns nil if the pod from the given replication controller (described by rcName) no longer exists.
|
||||||
|
// In case of failure or too long waiting time, an error is returned.
|
||||||
|
func waitForRCPodToDisappear(c *client.Client, ns, rcName, podName string) error {
|
||||||
|
label := labels.SelectorFromSet(labels.Set(map[string]string{"name": rcName}))
|
||||||
|
return waitForPodToDisappear(c, ns, podName, label, 20*time.Second, 5*time.Minute)
|
||||||
|
}
|
||||||
|
|
||||||
// waitForService waits until the service appears (exist == true), or disappears (exist == false)
|
// waitForService waits until the service appears (exist == true), or disappears (exist == false)
|
||||||
func waitForService(c *client.Client, namespace, name string, exist bool, interval, timeout time.Duration) error {
|
func waitForService(c *client.Client, namespace, name string, exist bool, interval, timeout time.Duration) error {
|
||||||
err := wait.Poll(interval, timeout, func() (bool, error) {
|
err := wait.Poll(interval, timeout, func() (bool, error) {
|
||||||
@ -695,6 +699,32 @@ func waitForService(c *client.Client, namespace, name string, exist bool, interv
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//waitForServiceEndpointsNum waits until the amount of endpoints that implement service to expectNum.
|
||||||
|
func waitForServiceEndpointsNum(c *client.Client, namespace, serviceName string, expectNum int, interval, timeout time.Duration) error {
|
||||||
|
return wait.Poll(interval, timeout, func() (bool, error) {
|
||||||
|
Logf("Waiting for amount of service:%s endpoints to %d", serviceName, expectNum)
|
||||||
|
list, err := c.Endpoints(namespace).List(labels.Everything())
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, e := range list.Items {
|
||||||
|
if e.Name == serviceName && countEndpointsNum(&e) == expectNum {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func countEndpointsNum(e *api.Endpoints) int {
|
||||||
|
num := 0
|
||||||
|
for _, sub := range e.Subsets {
|
||||||
|
num += len(sub.Addresses)
|
||||||
|
}
|
||||||
|
return num
|
||||||
|
}
|
||||||
|
|
||||||
// waitForReplicationController waits until the RC appears (exist == true), or disappears (exist == false)
|
// waitForReplicationController waits until the RC appears (exist == true), or disappears (exist == false)
|
||||||
func waitForReplicationController(c *client.Client, namespace, name string, exist bool, interval, timeout time.Duration) error {
|
func waitForReplicationController(c *client.Client, namespace, name string, exist bool, interval, timeout time.Duration) error {
|
||||||
err := wait.Poll(interval, timeout, func() (bool, error) {
|
err := wait.Poll(interval, timeout, func() (bool, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user