diff options
| author | KubeEdge Bot <48982446+kubeedge-bot@users.noreply.github.com> | 2024-08-19 14:30:30 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-19 14:30:30 +0800 |
| commit | 5b696a2d4b1ccd0edcbd9ce1a9c5bd58ababe683 (patch) | |
| tree | be74a9ebdddd05276e0529edc45142484ceb4976 | |
| parent | Merge pull request #5800 from wbc6080/fix-container-ci (diff) | |
| parent | Optimize the syncPod startup time for edge nodes. (diff) | |
| download | kubeedge-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.go | 34 |
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) + } +} |
