【kubernetes/k8s原始碼分析】kubelet原始碼分析之cdvisor原始碼分析
阿新 • • 發佈:2018-11-06
資料流
UnsecuredDependencies -> run
1. cadvisor.New初始化
if kubeDeps.CAdvisorInterface == nil { imageFsInfoProvider := cadvisor.NewImageFsInfoProvider(s.ContainerRuntime, s.RemoteRuntimeEndpoint) kubeDeps.CAdvisorInterface, err = cadvisor.New(imageFsInfoProvider, s.RootDirectory, cadvisor.UsingLegacyCadvisorStats(s.ContainerRuntime, s.RemoteRuntimeEndpoint)) if err != nil { return err } }
1.1 New函式
建立root path,以及建立客戶端
// New creates a cAdvisor and exports its API on the specified port if port > 0. func New(imageFsInfoProvider ImageFsInfoProvider, rootPath string, usingLegacyStats bool) (Interface, error) { sysFs := sysfs.NewRealSysFs() includedMetrics := cadvisormetrics.MetricSet{ cadvisormetrics.CpuUsageMetrics: struct{}{}, cadvisormetrics.MemoryUsageMetrics: struct{}{}, cadvisormetrics.CpuLoadMetrics: struct{}{}, cadvisormetrics.DiskIOMetrics: struct{}{}, cadvisormetrics.NetworkUsageMetrics: struct{}{}, cadvisormetrics.AcceleratorUsageMetrics: struct{}{}, cadvisormetrics.AppMetrics: struct{}{}, } if usingLegacyStats { includedMetrics[cadvisormetrics.DiskUsageMetrics] = struct{}{} } // collect metrics for all cgroups rawContainerCgroupPathPrefixWhiteList := []string{"/"} // Create and start the cAdvisor container manager. m, err := manager.New(memory.New(statsCacheDuration, nil), sysFs, maxHousekeepingInterval, allowDynamicHousekeeping, includedMetrics, http.DefaultClient, rawContainerCgroupPathPrefixWhiteList) if err != nil { return nil, err } if _, err := os.Stat(rootPath); err != nil { if os.IsNotExist(err) { if err := os.MkdirAll(path.Clean(rootPath), 0750); err != nil { return nil, fmt.Errorf("error creating root directory %q: %v", rootPath, err) } } else { return nil, fmt.Errorf("failed to Stat %q: %v", rootPath, err) } } cadvisorClient := &cadvisorClient{ imageFsInfoProvider: imageFsInfoProvider, rootPath: rootPath, Manager: m, } return cadvisorClient, nil }