在边缘管理容器化的应用程序,edged实际上是kubelet的精简版本,复用了kubelet的主要功能,实现了和其他edgecore组件的通信同步功能,代码很多,按照流程简单过一遍
重点看一下consumePodAddition
func (e *edged) consumePodAddition(namespacedName *types.NamespacedName) error { podName := namespacedName.Name klog.Infof("start to consume added pod [%s]", podName) pod, ok := e.podManager.GetPodByName(namespacedName.Namespace, podName) if !ok || pod.DeletionTimestamp != nil { return apis.ErrPodNotFound } if err := e.makePodDataDirs(pod); err != nil { klog.Errorf("Unable to make pod data directories for pod %q: %v", format.Pod(pod), err) return err } if err := e.volumeManager.WaitForAttachAndMount(pod); err != nil { klog.Errorf("Unable to mount volumes for pod %q: %v; skipping pod", format.Pod(pod), err) return err } secrets, err := e.getSecretsFromMetaManager(pod) if err != nil { return err } curPodStatus, err := e.podCache.Get(pod.GetUID()) if err != nil { klog.Errorf("Pod status for %s from cache failed: %v", podName, err) return err } result := e.containerRuntime.SyncPod(pod, curPodStatus, secrets, e.podAdditionBackoff) if err := result.Error(); err != nil { // Do not return error if the only failures were pods in backoff for _, r := range result.SyncResults { if r.Error != kubecontainer.ErrCrashLoopBackOff && r.Error != images.ErrImagePullBackOff { // Do not record an event here, as we keep all event logging for sync pod failures // local to container runtime so we get better errors return err } } return nil } e.workQueue.Enqueue(pod.UID, utilwait.Jitter(time.Minute, workerResyncIntervalJitterFactor)) klog.Infof("consume added pod [%s] successfully\n", podName) return nil}在edgecore启动的时间发送一个获取pod列表的消息给metamanager,当启动时间,从metamanager获取configmap和secret从而保证离线时间依旧能够运行