From 2449b0997cc304920f1c0e94c61c983d3a3f45da Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Fri, 15 Feb 2019 12:20:23 +0800 Subject: [PATCH 1/2] Revert "Add network stats for Windows containers" This reverts commit 9cf38de44b3fd469c833e1efbcc28885d9dfc0de. --- pkg/kubelet/stats/BUILD | 9 +- pkg/kubelet/stats/cri_stats_provider.go | 23 +---- .../stats/cri_stats_provider_unsupported.go | 29 ------ .../stats/cri_stats_provider_windows.go | 91 ------------------- pkg/kubelet/stats/helper.go | 7 +- 5 files changed, 7 insertions(+), 152 deletions(-) delete mode 100644 pkg/kubelet/stats/cri_stats_provider_unsupported.go delete mode 100644 pkg/kubelet/stats/cri_stats_provider_windows.go diff --git a/pkg/kubelet/stats/BUILD b/pkg/kubelet/stats/BUILD index dd2c9dd713c..3f6398686bb 100644 --- a/pkg/kubelet/stats/BUILD +++ b/pkg/kubelet/stats/BUILD @@ -5,8 +5,6 @@ go_library( srcs = [ "cadvisor_stats_provider.go", "cri_stats_provider.go", - "cri_stats_provider_unsupported.go", - "cri_stats_provider_windows.go", "helper.go", "log_metrics_provider.go", "stats_provider.go", @@ -34,12 +32,7 @@ go_library( "//vendor/github.com/google/cadvisor/info/v1:go_default_library", "//vendor/github.com/google/cadvisor/info/v2:go_default_library", "//vendor/k8s.io/klog:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/Microsoft/hcsshim:go_default_library", - ], - "//conditions:default": [], - }), + ], ) filegroup( diff --git a/pkg/kubelet/stats/cri_stats_provider.go b/pkg/kubelet/stats/cri_stats_provider.go index 17316ffce8c..c2657d9b6a4 100644 --- a/pkg/kubelet/stats/cri_stats_provider.go +++ b/pkg/kubelet/stats/cri_stats_provider.go @@ -26,10 +26,11 @@ import ( "time" cadvisorfs "github.com/google/cadvisor/fs" + "k8s.io/klog" + cadvisorapiv2 "github.com/google/cadvisor/info/v2" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - "k8s.io/klog" internalapi "k8s.io/kubernetes/pkg/kubelet/apis/cri" runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" @@ -134,12 +135,6 @@ func (p *criStatsProvider) ListPodStats() ([]statsapi.PodStats, error) { } caInfos := getCRICadvisorStats(allInfos) - // get network stats for containers. - containerNetworkStats, err := p.listContainerNetworkStats() - if err != nil { - return nil, fmt.Errorf("failed to list container network stats: %v", err) - } - for _, stats := range resp { containerID := stats.Attributes.Id container, found := containerMap[containerID] @@ -163,7 +158,7 @@ func (p *criStatsProvider) ListPodStats() ([]statsapi.PodStats, error) { // Fill available stats for full set of required pod stats cs := p.makeContainerStats(stats, container, &rootFsInfo, fsIDtoInfo, podSandbox.GetMetadata().GetUid()) - p.addPodNetworkStats(ps, podSandboxID, caInfos, cs, containerNetworkStats[podSandboxID]) + p.addPodNetworkStats(ps, podSandboxID, caInfos, cs) p.addPodCPUMemoryStats(ps, types.UID(podSandbox.Metadata.Uid), allInfos, cs) // If cadvisor stats is available for the container, use it to populate @@ -373,21 +368,11 @@ func (p *criStatsProvider) addPodNetworkStats( podSandboxID string, caInfos map[string]cadvisorapiv2.ContainerInfo, cs *statsapi.ContainerStats, - netStats *statsapi.NetworkStats, ) { caPodSandbox, found := caInfos[podSandboxID] // try get network stats from cadvisor first. if found { - networkStats := cadvisorInfoToNetworkStats(ps.PodRef.Name, &caPodSandbox) - if networkStats != nil { - ps.Network = networkStats - return - } - } - - // Not found from cadvisor, get from netStats. - if netStats != nil { - ps.Network = netStats + ps.Network = cadvisorInfoToNetworkStats(ps.PodRef.Name, &caPodSandbox) return } diff --git a/pkg/kubelet/stats/cri_stats_provider_unsupported.go b/pkg/kubelet/stats/cri_stats_provider_unsupported.go deleted file mode 100644 index be08a241ab9..00000000000 --- a/pkg/kubelet/stats/cri_stats_provider_unsupported.go +++ /dev/null @@ -1,29 +0,0 @@ -// +build !windows - -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package stats - -import ( - statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" -) - -// listContainerNetworkStats returns the network stats of all the running containers. -func (p *criStatsProvider) listContainerNetworkStats() (map[string]*statsapi.NetworkStats, error) { - // Always return nil for unsupported platforms. - return nil, nil -} diff --git a/pkg/kubelet/stats/cri_stats_provider_windows.go b/pkg/kubelet/stats/cri_stats_provider_windows.go deleted file mode 100644 index bbc45647424..00000000000 --- a/pkg/kubelet/stats/cri_stats_provider_windows.go +++ /dev/null @@ -1,91 +0,0 @@ -// +build windows - -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package stats - -import ( - "time" - - "github.com/Microsoft/hcsshim" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/klog" - statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" -) - -// listContainerNetworkStats returns the network stats of all the running containers. -func (p *criStatsProvider) listContainerNetworkStats() (map[string]*statsapi.NetworkStats, error) { - containers, err := hcsshim.GetContainers(hcsshim.ComputeSystemQuery{ - Types: []string{"Container"}, - }) - if err != nil { - return nil, err - } - - stats := make(map[string]*statsapi.NetworkStats) - for _, c := range containers { - container, err := hcsshim.OpenContainer(c.ID) - if err != nil { - klog.Warningf("Failed to open container %q with error '%v', continue to get stats for other containers", c.ID, err) - continue - } - - cstats, err := container.Statistics() - if err != nil { - klog.Warningf("Failed to get statistics for container %q with error '%v', continue to get stats for other containers", c.ID, err) - continue - } - - if len(cstats.Network) > 0 { - stats[c.ID] = hcsStatsToNetworkStats(cstats.Timestamp, cstats.Network) - } - } - - return stats, nil -} - -// hcsStatsToNetworkStats converts hcsshim.Statistics.Network to statsapi.NetworkStats -func hcsStatsToNetworkStats(timestamp time.Time, hcsStats []hcsshim.NetworkStats) *statsapi.NetworkStats { - result := &statsapi.NetworkStats{ - Time: metav1.NewTime(timestamp), - Interfaces: make([]statsapi.InterfaceStats, 0), - } - - for _, stat := range hcsStats { - iStat := hcsStatsToInterfaceStats(stat) - if iStat != nil { - result.Interfaces = append(result.Interfaces, *iStat) - } - } - - // TODO(feiskyer): add support of multiple interfaces for getting default interface. - if len(result.Interfaces) > 0 { - result.InterfaceStats = result.Interfaces[0] - } - - return result -} - -// hcsStatsToInterfaceStats converts hcsshim.NetworkStats to statsapi.InterfaceStats. -func hcsStatsToInterfaceStats(stat hcsshim.NetworkStats) *statsapi.InterfaceStats { - return &statsapi.InterfaceStats{ - Name: stat.EndpointId, - RxBytes: &stat.BytesReceived, - TxBytes: &stat.BytesSent, - } -} diff --git a/pkg/kubelet/stats/helper.go b/pkg/kubelet/stats/helper.go index 024f8981d8d..54f3093e553 100644 --- a/pkg/kubelet/stats/helper.go +++ b/pkg/kubelet/stats/helper.go @@ -20,10 +20,11 @@ import ( "fmt" "time" + "k8s.io/klog" + cadvisorapiv1 "github.com/google/cadvisor/info/v1" cadvisorapiv2 "github.com/google/cadvisor/info/v2" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/klog" statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" "k8s.io/kubernetes/pkg/kubelet/cadvisor" ) @@ -157,10 +158,6 @@ func cadvisorInfoToNetworkStats(name string, info *cadvisorapiv2.ContainerInfo) return nil } - if cstat.Network == nil { - return nil - } - iStats := statsapi.NetworkStats{ Time: metav1.NewTime(cstat.Timestamp), } From 0d03672e02ec5e7baca08050beb2b0fee8b8db8b Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Fri, 15 Feb 2019 12:20:41 +0800 Subject: [PATCH 2/2] Revert "Add network stats for windows node" This reverts commit f9fa1c6a3824fb21bafda374b2ec84bdf0a15051. --- pkg/kubelet/winstats/BUILD | 1 - pkg/kubelet/winstats/network_stats.go | 67 --------------------------- pkg/kubelet/winstats/winstats.go | 12 +---- pkg/kubelet/winstats/winstats_test.go | 11 ++--- 4 files changed, 5 insertions(+), 86 deletions(-) delete mode 100644 pkg/kubelet/winstats/network_stats.go diff --git a/pkg/kubelet/winstats/BUILD b/pkg/kubelet/winstats/BUILD index 503e8d7297c..25afdd4cfc0 100644 --- a/pkg/kubelet/winstats/BUILD +++ b/pkg/kubelet/winstats/BUILD @@ -4,7 +4,6 @@ go_library( name = "go_default_library", srcs = [ "doc.go", - "network_stats.go", "perfcounter_nodestats.go", "perfcounters.go", "version.go", diff --git a/pkg/kubelet/winstats/network_stats.go b/pkg/kubelet/winstats/network_stats.go deleted file mode 100644 index bfd80bc50d9..00000000000 --- a/pkg/kubelet/winstats/network_stats.go +++ /dev/null @@ -1,67 +0,0 @@ -// +build windows - -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package winstats - -import ( - "encoding/json" - "os/exec" - - cadvisorapi "github.com/google/cadvisor/info/v1" -) - -// netAdapterStat represents network statistics for an adapter. -type netAdapterStat struct { - Name string `json:"Name,omitempty"` - ReceivedBytes uint64 `json:"ReceivedBytes,omitempty"` - ReceivedErrors uint64 `json:"ReceivedPacketErrors,omitempty"` - SentBytes uint64 `json:"SentBytes,omitempty"` - SentErrors uint64 `json:"OutboundPacketErrors,omitempty"` -} - -// toCadvisorInterfaceStats converts netAdapterStat to cadvisorapi.InterfaceStats. -func (s *netAdapterStat) toCadvisorInterfaceStats() cadvisorapi.InterfaceStats { - return cadvisorapi.InterfaceStats{ - Name: s.Name, - RxBytes: s.ReceivedBytes, - RxErrors: s.ReceivedErrors, - TxBytes: s.SentBytes, - TxErrors: s.SentErrors, - } -} - -// getNetAdapterStats gets a list of network adapter statistics. -func getNetAdapterStats() ([]cadvisorapi.InterfaceStats, error) { - rawOutput, err := exec.Command("powershell", "/c", " Get-NetAdapterStatistics | ConvertTo-Json").CombinedOutput() - if err != nil { - return nil, err - } - - var stats []*netAdapterStat - err = json.Unmarshal(rawOutput, &stats) - if err != nil { - return nil, err - } - - result := make([]cadvisorapi.InterfaceStats, len(stats)) - for i := range stats { - result[i] = stats[i].toCadvisorInterfaceStats() - } - - return result, nil -} diff --git a/pkg/kubelet/winstats/winstats.go b/pkg/kubelet/winstats/winstats.go index 5a194429c5d..2c483f8967e 100644 --- a/pkg/kubelet/winstats/winstats.go +++ b/pkg/kubelet/winstats/winstats.go @@ -109,16 +109,12 @@ func (c *StatsClient) WinVersionInfo() (*cadvisorapi.VersionInfo, error) { func (c *StatsClient) createRootContainerInfo() (*cadvisorapiv2.ContainerInfo, error) { nodeMetrics, err := c.client.getNodeMetrics() + if err != nil { return nil, err } - - netAdapterStats, err := getNetAdapterStats() - if err != nil { - return nil, err - } - var stats []*cadvisorapiv2.ContainerStats + stats = append(stats, &cadvisorapiv2.ContainerStats{ Timestamp: nodeMetrics.timeStamp, Cpu: &cadvisorapi.CpuStats{ @@ -130,9 +126,6 @@ func (c *StatsClient) createRootContainerInfo() (*cadvisorapiv2.ContainerInfo, e WorkingSet: nodeMetrics.memoryPrivWorkingSetBytes, Usage: nodeMetrics.memoryCommittedBytes, }, - Network: &cadvisorapiv2.NetworkStats{ - Interfaces: netAdapterStats, - }, }) nodeInfo := c.client.getNodeInfo() @@ -141,7 +134,6 @@ func (c *StatsClient) createRootContainerInfo() (*cadvisorapiv2.ContainerInfo, e CreationTime: nodeInfo.startTime, HasCpu: true, HasMemory: true, - HasNetwork: true, Memory: cadvisorapiv2.MemorySpec{ Limit: nodeInfo.memoryPhysicalCapacityBytes, }, diff --git a/pkg/kubelet/winstats/winstats_test.go b/pkg/kubelet/winstats/winstats_test.go index 51f7a290d19..830f76af039 100644 --- a/pkg/kubelet/winstats/winstats_test.go +++ b/pkg/kubelet/winstats/winstats_test.go @@ -86,9 +86,8 @@ func TestWinContainerInfos(t *testing.T) { infos := make(map[string]cadvisorapiv2.ContainerInfo) infos["/"] = cadvisorapiv2.ContainerInfo{ Spec: cadvisorapiv2.ContainerSpec{ - HasCpu: true, - HasMemory: true, - HasNetwork: true, + HasCpu: true, + HasMemory: true, Memory: cadvisorapiv2.MemorySpec{ Limit: 1.6e+10, }, @@ -96,11 +95,7 @@ func TestWinContainerInfos(t *testing.T) { Stats: stats, } - assert.Equal(t, len(actualRootInfos), len(infos)) - assert.Equal(t, actualRootInfos["/"].Spec, infos["/"].Spec) - assert.Equal(t, len(actualRootInfos["/"].Stats), len(infos["/"].Stats)) - assert.Equal(t, actualRootInfos["/"].Stats[0].Cpu, infos["/"].Stats[0].Cpu) - assert.Equal(t, actualRootInfos["/"].Stats[0].Memory, infos["/"].Stats[0].Memory) + assert.Equal(t, actualRootInfos, infos) } func TestWinMachineInfo(t *testing.T) {