mirror of https://github.com/k3s-io/k3s
Merge pull request #24047 from derekwaynecarr/reuse_summary_provider
Automatic merge from submit-queue Expose SummaryProvider for reuse by other parts of kubelet To support out of resource killing in the kubelet, we will introduce a new top-level module that will ensure node stability by checking if eviction thresholds have been met for memory and file-system usage on the node. In addition, it will then need information about pod memory and disk usage in order to make an eviction selection. Currently, this information is collected in `SummaryProvider` but it's hidden away and not available for re-use by other top-level modules of the kubelet. This initial refactor adds the ability to get summary stat information from the `ResourceAnalyzer` so it can be reused by other top-level modules. I suspect we will further re-factor this area as code evolves, but this unblocks further progress on out-of-resource killing. /cc @vishh @timothysc @kubernetes/sig-node @kubernetes/rh-cluster-infrapull/6/head
commit
9637b09f69
|
@ -55,8 +55,8 @@ type handler struct {
|
|||
summaryProvider SummaryProvider
|
||||
}
|
||||
|
||||
func CreateHandlers(provider StatsProvider, resourceAnalyzer ResourceAnalyzer) *restful.WebService {
|
||||
h := &handler{provider, NewSummaryProvider(provider, resourceAnalyzer)}
|
||||
func CreateHandlers(provider StatsProvider, summaryProvider SummaryProvider) *restful.WebService {
|
||||
h := &handler{provider, summaryProvider}
|
||||
|
||||
ws := &restful.WebService{}
|
||||
ws.Path("/stats/").
|
||||
|
|
|
@ -23,18 +23,22 @@ type ResourceAnalyzer interface {
|
|||
Start()
|
||||
|
||||
fsResourceAnalyzerInterface
|
||||
SummaryProvider
|
||||
}
|
||||
|
||||
// resourceAnalyzer implements ResourceAnalyzer
|
||||
type resourceAnalyzer struct {
|
||||
*fsResourceAnalyzer
|
||||
SummaryProvider
|
||||
}
|
||||
|
||||
var _ ResourceAnalyzer = &resourceAnalyzer{}
|
||||
|
||||
// NewResourceAnalyzer returns a new ResourceAnalyzer
|
||||
func NewResourceAnalyzer(statsProvider StatsProvider, calVolumeFrequency time.Duration) ResourceAnalyzer {
|
||||
return &resourceAnalyzer{newFsResourceAnalyzer(statsProvider, calVolumeFrequency)}
|
||||
fsAnalyzer := newFsResourceAnalyzer(statsProvider, calVolumeFrequency)
|
||||
summaryProvider := NewSummaryProvider(statsProvider, fsAnalyzer)
|
||||
return &resourceAnalyzer{fsAnalyzer, summaryProvider}
|
||||
}
|
||||
|
||||
// Start starts background functions necessary for the ResourceAnalyzer to function
|
||||
|
|
|
@ -43,17 +43,17 @@ type SummaryProvider interface {
|
|||
}
|
||||
|
||||
type summaryProviderImpl struct {
|
||||
provider StatsProvider
|
||||
resourceAnalyzer ResourceAnalyzer
|
||||
provider StatsProvider
|
||||
fsResourceAnalyzer fsResourceAnalyzerInterface
|
||||
}
|
||||
|
||||
var _ SummaryProvider = &summaryProviderImpl{}
|
||||
|
||||
// NewSummaryProvider returns a new SummaryProvider
|
||||
func NewSummaryProvider(statsProvider StatsProvider, resourceAnalyzer ResourceAnalyzer) SummaryProvider {
|
||||
func NewSummaryProvider(statsProvider StatsProvider, fsResourceAnalyzer fsResourceAnalyzerInterface) SummaryProvider {
|
||||
stackBuff := []byte{}
|
||||
runtime.Stack(stackBuff, false)
|
||||
return &summaryProviderImpl{statsProvider, resourceAnalyzer}
|
||||
return &summaryProviderImpl{statsProvider, fsResourceAnalyzer}
|
||||
}
|
||||
|
||||
// Get implements the SummaryProvider interface
|
||||
|
@ -84,18 +84,18 @@ func (sp *summaryProviderImpl) Get() (*stats.Summary, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
sb := &summaryBuilder{sp.resourceAnalyzer, node, nodeConfig, rootFsInfo, imageFsInfo, infos}
|
||||
sb := &summaryBuilder{sp.fsResourceAnalyzer, node, nodeConfig, rootFsInfo, imageFsInfo, infos}
|
||||
return sb.build()
|
||||
}
|
||||
|
||||
// summaryBuilder aggregates the datastructures provided by cadvisor into a Summary result
|
||||
type summaryBuilder struct {
|
||||
resourceAnalyzer ResourceAnalyzer
|
||||
node *api.Node
|
||||
nodeConfig cm.NodeConfig
|
||||
rootFsInfo cadvisorapiv2.FsInfo
|
||||
imageFsInfo cadvisorapiv2.FsInfo
|
||||
infos map[string]cadvisorapiv2.ContainerInfo
|
||||
fsResourceAnalyzer fsResourceAnalyzerInterface
|
||||
node *api.Node
|
||||
nodeConfig cm.NodeConfig
|
||||
rootFsInfo cadvisorapiv2.FsInfo
|
||||
imageFsInfo cadvisorapiv2.FsInfo
|
||||
infos map[string]cadvisorapiv2.ContainerInfo
|
||||
}
|
||||
|
||||
// build returns a Summary from aggregating the input data
|
||||
|
@ -222,7 +222,7 @@ func (sb *summaryBuilder) buildSummaryPods() []stats.PodStats {
|
|||
for _, podStats := range podToStats {
|
||||
// Lookup the volume stats for each pod
|
||||
podUID := types.UID(podStats.PodRef.UID)
|
||||
if vstats, found := sb.resourceAnalyzer.GetPodVolumeStats(podUID); found {
|
||||
if vstats, found := sb.fsResourceAnalyzer.GetPodVolumeStats(podUID); found {
|
||||
podStats.VolumeStats = vstats.Volumes
|
||||
}
|
||||
result = append(result, *podStats)
|
||||
|
|
Loading…
Reference in New Issue