mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 05:03:09 +00:00
Merge pull request #108855 from haircommander/podStatsFix
kubelet/stats: deduplicate makePodStorageStats
This commit is contained in:
commit
6d1e9150d0
@ -142,25 +142,9 @@ func (p *cadvisorStatsProvider) ListPodStats() ([]statsapi.PodStats, error) {
|
|||||||
// Add each PodStats to the result.
|
// Add each PodStats to the result.
|
||||||
result := make([]statsapi.PodStats, 0, len(podToStats))
|
result := make([]statsapi.PodStats, 0, len(podToStats))
|
||||||
for _, podStats := range podToStats {
|
for _, podStats := range podToStats {
|
||||||
// Lookup the volume stats for each pod.
|
makePodStorageStats(podStats, &rootFsInfo, p.resourceAnalyzer, p.hostStatsProvider, false)
|
||||||
|
|
||||||
podUID := types.UID(podStats.PodRef.UID)
|
podUID := types.UID(podStats.PodRef.UID)
|
||||||
var ephemeralStats []statsapi.VolumeStats
|
|
||||||
if vstats, found := p.resourceAnalyzer.GetPodVolumeStats(podUID); found {
|
|
||||||
ephemeralStats = make([]statsapi.VolumeStats, len(vstats.EphemeralVolumes))
|
|
||||||
copy(ephemeralStats, vstats.EphemeralVolumes)
|
|
||||||
podStats.VolumeStats = append(append([]statsapi.VolumeStats{}, vstats.EphemeralVolumes...), vstats.PersistentVolumes...)
|
|
||||||
}
|
|
||||||
|
|
||||||
logStats, err := p.hostStatsProvider.getPodLogStats(podStats.PodRef.Namespace, podStats.PodRef.Name, podUID, &rootFsInfo)
|
|
||||||
if err != nil {
|
|
||||||
klog.ErrorS(err, "Unable to fetch pod log stats", "pod", klog.KRef(podStats.PodRef.Namespace, podStats.PodRef.Name))
|
|
||||||
}
|
|
||||||
etcHostsStats, err := p.hostStatsProvider.getPodEtcHostsStats(podUID, &rootFsInfo)
|
|
||||||
if err != nil {
|
|
||||||
klog.ErrorS(err, "Unable to fetch pod etc hosts stats", "pod", klog.KRef(podStats.PodRef.Namespace, podStats.PodRef.Name))
|
|
||||||
}
|
|
||||||
|
|
||||||
podStats.EphemeralStorage = calcEphemeralStorage(podStats.Containers, ephemeralStats, &rootFsInfo, logStats, etcHostsStats, false)
|
|
||||||
// Lookup the pod-level cgroup's CPU and memory stats
|
// Lookup the pod-level cgroup's CPU and memory stats
|
||||||
podInfo := getCadvisorPodInfoFromPodUID(podUID, allInfos)
|
podInfo := getCadvisorPodInfoFromPodUID(podUID, allInfos)
|
||||||
if podInfo != nil {
|
if podInfo != nil {
|
||||||
|
@ -220,7 +220,7 @@ func (p *criStatsProvider) listPodStatsPartiallyFromCRI(updateCPUNanoCoreUsage b
|
|||||||
|
|
||||||
result := make([]statsapi.PodStats, 0, len(sandboxIDToPodStats))
|
result := make([]statsapi.PodStats, 0, len(sandboxIDToPodStats))
|
||||||
for _, s := range sandboxIDToPodStats {
|
for _, s := range sandboxIDToPodStats {
|
||||||
p.makePodStorageStats(s, rootFsInfo)
|
makePodStorageStats(s, rootFsInfo, p.resourceAnalyzer, p.hostStatsProvider, true)
|
||||||
result = append(result, *s)
|
result = append(result, *s)
|
||||||
}
|
}
|
||||||
return result, nil
|
return result, nil
|
||||||
@ -257,7 +257,7 @@ func (p *criStatsProvider) listPodStatsStrictlyFromCRI(updateCPUNanoCoreUsage bo
|
|||||||
addCRIPodCPUStats(ps, criSandboxStat)
|
addCRIPodCPUStats(ps, criSandboxStat)
|
||||||
addCRIPodMemoryStats(ps, criSandboxStat)
|
addCRIPodMemoryStats(ps, criSandboxStat)
|
||||||
addCRIPodProcessStats(ps, criSandboxStat)
|
addCRIPodProcessStats(ps, criSandboxStat)
|
||||||
p.makePodStorageStats(ps, rootFsInfo)
|
makePodStorageStats(ps, rootFsInfo, p.resourceAnalyzer, p.hostStatsProvider, true)
|
||||||
summarySandboxStats = append(summarySandboxStats, *ps)
|
summarySandboxStats = append(summarySandboxStats, *ps)
|
||||||
}
|
}
|
||||||
return summarySandboxStats, nil
|
return summarySandboxStats, nil
|
||||||
@ -469,32 +469,6 @@ func buildPodStats(podSandbox *runtimeapi.PodSandbox) *statsapi.PodStats {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *criStatsProvider) makePodStorageStats(s *statsapi.PodStats, rootFsInfo *cadvisorapiv2.FsInfo) {
|
|
||||||
podNs := s.PodRef.Namespace
|
|
||||||
podName := s.PodRef.Name
|
|
||||||
podUID := types.UID(s.PodRef.UID)
|
|
||||||
vstats, found := p.resourceAnalyzer.GetPodVolumeStats(podUID)
|
|
||||||
if !found {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
logStats, err := p.hostStatsProvider.getPodLogStats(podNs, podName, podUID, rootFsInfo)
|
|
||||||
if err != nil {
|
|
||||||
klog.ErrorS(err, "Unable to fetch pod log stats", "pod", klog.KRef(podNs, podName))
|
|
||||||
// If people do in-place upgrade, there might be pods still using
|
|
||||||
// the old log path. For those pods, no pod log stats is returned.
|
|
||||||
// We should continue generating other stats in that case.
|
|
||||||
// calcEphemeralStorage tolerants logStats == nil.
|
|
||||||
}
|
|
||||||
etcHostsStats, err := p.hostStatsProvider.getPodEtcHostsStats(podUID, rootFsInfo)
|
|
||||||
if err != nil {
|
|
||||||
klog.ErrorS(err, "Unable to fetch pod etc hosts stats", "pod", klog.KRef(podNs, podName))
|
|
||||||
}
|
|
||||||
ephemeralStats := make([]statsapi.VolumeStats, len(vstats.EphemeralVolumes))
|
|
||||||
copy(ephemeralStats, vstats.EphemeralVolumes)
|
|
||||||
s.VolumeStats = append(append([]statsapi.VolumeStats{}, vstats.EphemeralVolumes...), vstats.PersistentVolumes...)
|
|
||||||
s.EphemeralStorage = calcEphemeralStorage(s.Containers, ephemeralStats, rootFsInfo, logStats, etcHostsStats, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *criStatsProvider) addPodNetworkStats(
|
func (p *criStatsProvider) addPodNetworkStats(
|
||||||
ps *statsapi.PodStats,
|
ps *statsapi.PodStats,
|
||||||
podSandboxID string,
|
podSandboxID string,
|
||||||
|
@ -23,9 +23,11 @@ import (
|
|||||||
cadvisorapiv1 "github.com/google/cadvisor/info/v1"
|
cadvisorapiv1 "github.com/google/cadvisor/info/v1"
|
||||||
cadvisorapiv2 "github.com/google/cadvisor/info/v2"
|
cadvisorapiv2 "github.com/google/cadvisor/info/v2"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
statsapi "k8s.io/kubelet/pkg/apis/stats/v1alpha1"
|
statsapi "k8s.io/kubelet/pkg/apis/stats/v1alpha1"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cadvisor"
|
"k8s.io/kubernetes/pkg/kubelet/cadvisor"
|
||||||
|
"k8s.io/kubernetes/pkg/kubelet/server/stats"
|
||||||
)
|
)
|
||||||
|
|
||||||
// defaultNetworkInterfaceName is used for collectng network stats.
|
// defaultNetworkInterfaceName is used for collectng network stats.
|
||||||
@ -415,3 +417,29 @@ func addUsage(first, second *uint64) *uint64 {
|
|||||||
total := *first + *second
|
total := *first + *second
|
||||||
return &total
|
return &total
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func makePodStorageStats(s *statsapi.PodStats, rootFsInfo *cadvisorapiv2.FsInfo, resourceAnalyzer stats.ResourceAnalyzer, hostStatsProvider HostStatsProvider, isCRIStatsProvider bool) {
|
||||||
|
podNs := s.PodRef.Namespace
|
||||||
|
podName := s.PodRef.Name
|
||||||
|
podUID := types.UID(s.PodRef.UID)
|
||||||
|
var ephemeralStats []statsapi.VolumeStats
|
||||||
|
if vstats, found := resourceAnalyzer.GetPodVolumeStats(podUID); found {
|
||||||
|
ephemeralStats = make([]statsapi.VolumeStats, len(vstats.EphemeralVolumes))
|
||||||
|
copy(ephemeralStats, vstats.EphemeralVolumes)
|
||||||
|
s.VolumeStats = append(append([]statsapi.VolumeStats{}, vstats.EphemeralVolumes...), vstats.PersistentVolumes...)
|
||||||
|
|
||||||
|
}
|
||||||
|
logStats, err := hostStatsProvider.getPodLogStats(podNs, podName, podUID, rootFsInfo)
|
||||||
|
if err != nil {
|
||||||
|
klog.V(6).ErrorS(err, "Unable to fetch pod log stats", "pod", klog.KRef(podNs, podName))
|
||||||
|
// If people do in-place upgrade, there might be pods still using
|
||||||
|
// the old log path. For those pods, no pod log stats is returned.
|
||||||
|
// We should continue generating other stats in that case.
|
||||||
|
// calcEphemeralStorage tolerants logStats == nil.
|
||||||
|
}
|
||||||
|
etcHostsStats, err := hostStatsProvider.getPodEtcHostsStats(podUID, rootFsInfo)
|
||||||
|
if err != nil {
|
||||||
|
klog.V(6).ErrorS(err, "Unable to fetch pod etc hosts stats", "pod", klog.KRef(podNs, podName))
|
||||||
|
}
|
||||||
|
s.EphemeralStorage = calcEphemeralStorage(s.Containers, ephemeralStats, rootFsInfo, logStats, etcHostsStats, isCRIStatsProvider)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user