mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 06:54:01 +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/unversioned"
|
||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/labels"
|
||||
"k8s.io/kubernetes/pkg/util"
|
||||
"k8s.io/kubernetes/pkg/util/wait"
|
||||
)
|
||||
@ -471,7 +472,18 @@ func (config *KubeProxyTestConfig) deleteNetProxyPod() {
|
||||
pod := config.endpointPods[0]
|
||||
config.getPodClient().Delete(pod.Name, nil)
|
||||
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 {
|
||||
|
@ -641,11 +641,8 @@ func waitForRCPodOnNode(c *client.Client, ns, rcName, node string) (*api.Pod, er
|
||||
return p, err
|
||||
}
|
||||
|
||||
// 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 wait.Poll(20*time.Second, 5*time.Minute, func() (bool, error) {
|
||||
func waitForPodToDisappear(c *client.Client, ns, podName string, label labels.Selector, interval, timeout time.Duration) error {
|
||||
return wait.Poll(interval, timeout, func() (bool, error) {
|
||||
Logf("Waiting for pod %s to disappear", podName)
|
||||
pods, err := c.Pods(ns).List(label, fields.Everything())
|
||||
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)
|
||||
func waitForService(c *client.Client, namespace, name string, exist bool, interval, timeout time.Duration) 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
|
||||
}
|
||||
|
||||
//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)
|
||||
func waitForReplicationController(c *client.Client, namespace, name string, exist bool, interval, timeout time.Duration) error {
|
||||
err := wait.Poll(interval, timeout, func() (bool, error) {
|
||||
|
Loading…
Reference in New Issue
Block a user