summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKubeEdge Bot <48982446+kubeedge-bot@users.noreply.github.com>2024-08-19 14:30:30 +0800
committerGitHub <noreply@github.com>2024-08-19 14:30:30 +0800
commit5b696a2d4b1ccd0edcbd9ce1a9c5bd58ababe683 (patch)
treebe74a9ebdddd05276e0529edc45142484ceb4976
parentMerge pull request #5800 from wbc6080/fix-container-ci (diff)
parentOptimize the syncPod startup time for edge nodes. (diff)
downloadkubeedge-5b696a2d4b1ccd0edcbd9ce1a9c5bd58ababe683.tar.gz
Merge pull request #5804 from luomengY/fix_edged_start
Optimize the syncPod startup time for edge nodes.
-rw-r--r--edge/pkg/edged/edged.go34
1 files changed, 30 insertions, 4 deletions
diff --git a/edge/pkg/edged/edged.go b/edge/pkg/edged/edged.go
index 065f7c30f..d02359740 100644
--- a/edge/pkg/edged/edged.go
+++ b/edge/pkg/edged/edged.go
@@ -28,6 +28,7 @@ import (
"context"
"encoding/json"
"fmt"
+ "net/http"
"os"
"reflect"
"strconv"
@@ -148,9 +149,8 @@ func (e *edged) Start() {
}
}()
- // block until kubelet is ready to sync pods
- startWaiter := time.NewTimer(10 * time.Second)
- defer startWaiter.Stop()
+ kubeletReadyChan := make(chan struct{}, 1)
+ go kubeletHealthCheck(e.KubeletServer.ReadOnlyPort, kubeletReadyChan)
select {
case <-beehiveContext.Done():
@@ -159,7 +159,7 @@ func (e *edged) Start() {
case err := <-kubeletErrChan:
klog.Errorf("Failed to start edged, err: %v", err)
return
- case <-startWaiter.C:
+ case <-kubeletReadyChan:
klog.Info("Start sync pod")
}
@@ -491,3 +491,29 @@ func (e *edged) controllerUnpublishVolume(content []byte) (interface{}, error) {
func filterPodByNodeName(pod *v1.Pod, nodeName string) bool {
return pod.Spec.NodeName == nodeName
}
+
+func kubeletHealthCheck(port int32, kubeletReadyChan chan struct{}) {
+ url := fmt.Sprintf("http://localhost:%d/healthz/syncloop", port)
+ for {
+ resp, err := http.Get(url)
+ if err != nil {
+ klog.Warningf("failed to get kubelet healthz syncloop, err: %v", err)
+ time.Sleep(50 * time.Millisecond)
+ continue
+ }
+
+ statusCode := resp.StatusCode
+ err = resp.Body.Close()
+ if err != nil {
+ klog.Errorf("failed to close response's body with err:%v", err)
+ }
+
+ if statusCode != http.StatusOK {
+ klog.Warningf("internal error and status code: %d", resp.StatusCode)
+ } else {
+ kubeletReadyChan <- struct{}{}
+ break
+ }
+ time.Sleep(50 * time.Millisecond)
+ }
+}