Merge pull request #43399 from derekwaynecarr/fix_node_e2e
Automatic merge from submit-queue (batch tested with PRs 42452, 43399) Fix faulty assumptions in summary API testing **What this PR does / why we need it**: 1. on systemd, launch kubelet in dedicated part of cgroup hierarchy 1. bump allowable memory usage for busy box containers as my own local testing often showed values > 1mb which were valid per the memory limit settings we impose 1. there is a logic flaw today in how we report node.memory.stats that needs to be fixed in follow-on. for the last issue, we look at `/sys/fs/cgroup/memory.stat[rss]` value which if you have global accounting enabled on systemd machines (as expected) will report 0 because nothing runs local to the root cgroup. we really want to be showing the total_rss value for non-leaf cgroups so we get the full hierarchy of usage.
This commit is contained in:
		@@ -108,12 +108,16 @@ func (e *E2EServices) startKubelet() (*server, error) {
 | 
				
			|||||||
		// sense to test it that way
 | 
							// sense to test it that way
 | 
				
			||||||
		isSystemd = true
 | 
							isSystemd = true
 | 
				
			||||||
		unitName := fmt.Sprintf("kubelet-%d.service", rand.Int31())
 | 
							unitName := fmt.Sprintf("kubelet-%d.service", rand.Int31())
 | 
				
			||||||
		cmdArgs = append(cmdArgs, systemdRun, "--unit="+unitName, "--remain-after-exit", builder.GetKubeletServerBin())
 | 
							cmdArgs = append(cmdArgs, systemdRun, "--unit="+unitName, "--slice=runtime.slice", "--remain-after-exit", builder.GetKubeletServerBin())
 | 
				
			||||||
		killCommand = exec.Command("systemctl", "kill", unitName)
 | 
							killCommand = exec.Command("systemctl", "kill", unitName)
 | 
				
			||||||
		restartCommand = exec.Command("systemctl", "restart", unitName)
 | 
							restartCommand = exec.Command("systemctl", "restart", unitName)
 | 
				
			||||||
		e.logFiles["kubelet.log"] = logFileData{
 | 
							e.logFiles["kubelet.log"] = logFileData{
 | 
				
			||||||
			journalctlCommand: []string{"-u", unitName},
 | 
								journalctlCommand: []string{"-u", unitName},
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							cmdArgs = append(cmdArgs,
 | 
				
			||||||
 | 
								"--kubelet-cgroups=/kubelet.slice",
 | 
				
			||||||
 | 
								"--cgroup-root=/",
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		cmdArgs = append(cmdArgs, builder.GetKubeletServerBin())
 | 
							cmdArgs = append(cmdArgs, builder.GetKubeletServerBin())
 | 
				
			||||||
		cmdArgs = append(cmdArgs,
 | 
							cmdArgs = append(cmdArgs,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -84,7 +84,14 @@ var _ = framework.KubeDescribe("Summary API", func() {
 | 
				
			|||||||
						"AvailableBytes":  BeNil(),
 | 
											"AvailableBytes":  BeNil(),
 | 
				
			||||||
						"UsageBytes":      bounded(1*mb, 10*gb),
 | 
											"UsageBytes":      bounded(1*mb, 10*gb),
 | 
				
			||||||
						"WorkingSetBytes": bounded(1*mb, 10*gb),
 | 
											"WorkingSetBytes": bounded(1*mb, 10*gb),
 | 
				
			||||||
						"RSSBytes":        bounded(1*mb, 1*gb),
 | 
											// today, this returns the value reported
 | 
				
			||||||
 | 
											// in /sys/fs/cgroup/memory.stat for rss
 | 
				
			||||||
 | 
											// this value should really return /sys/fs/cgroup/memory.stat total_rss
 | 
				
			||||||
 | 
											// as we really want the hierarchical value not the usage local to / cgroup.
 | 
				
			||||||
 | 
											// for now, i am updating the bounding box to the value as coded, but the
 | 
				
			||||||
 | 
											// value reported needs to change.
 | 
				
			||||||
 | 
											// rss only makes sense if you are leaf cgroup
 | 
				
			||||||
 | 
											"RSSBytes":        bounded(0, 1*gb),
 | 
				
			||||||
						"PageFaults":      bounded(1000, 1E9),
 | 
											"PageFaults":      bounded(1000, 1E9),
 | 
				
			||||||
						"MajorPageFaults": bounded(0, 100000),
 | 
											"MajorPageFaults": bounded(0, 100000),
 | 
				
			||||||
					}),
 | 
										}),
 | 
				
			||||||
@@ -131,7 +138,7 @@ var _ = framework.KubeDescribe("Summary API", func() {
 | 
				
			|||||||
							"Time":            recent(maxStatsAge),
 | 
												"Time":            recent(maxStatsAge),
 | 
				
			||||||
							"AvailableBytes":  bounded(1*mb, 10*mb),
 | 
												"AvailableBytes":  bounded(1*mb, 10*mb),
 | 
				
			||||||
							"UsageBytes":      bounded(10*kb, 5*mb),
 | 
												"UsageBytes":      bounded(10*kb, 5*mb),
 | 
				
			||||||
							"WorkingSetBytes": bounded(10*kb, mb),
 | 
												"WorkingSetBytes": bounded(10*kb, 2*mb),
 | 
				
			||||||
							"RSSBytes":        bounded(1*kb, mb),
 | 
												"RSSBytes":        bounded(1*kb, mb),
 | 
				
			||||||
							"PageFaults":      bounded(100, 100000),
 | 
												"PageFaults":      bounded(100, 100000),
 | 
				
			||||||
							"MajorPageFaults": bounded(0, 10),
 | 
												"MajorPageFaults": bounded(0, 10),
 | 
				
			||||||
@@ -194,7 +201,14 @@ var _ = framework.KubeDescribe("Summary API", func() {
 | 
				
			|||||||
						"AvailableBytes":  bounded(100*mb, 100*gb),
 | 
											"AvailableBytes":  bounded(100*mb, 100*gb),
 | 
				
			||||||
						"UsageBytes":      bounded(10*mb, 10*gb),
 | 
											"UsageBytes":      bounded(10*mb, 10*gb),
 | 
				
			||||||
						"WorkingSetBytes": bounded(10*mb, 10*gb),
 | 
											"WorkingSetBytes": bounded(10*mb, 10*gb),
 | 
				
			||||||
						"RSSBytes":        bounded(1*kb, 1*gb),
 | 
											// today, this returns the value reported
 | 
				
			||||||
 | 
											// in /sys/fs/cgroup/memory.stat for rss
 | 
				
			||||||
 | 
											// this value should really return /sys/fs/cgroup/memory.stat total_rss
 | 
				
			||||||
 | 
											// as we really want the hierarchical value not the usage local to / cgroup.
 | 
				
			||||||
 | 
											// for now, i am updating the bounding box to the value as coded, but the
 | 
				
			||||||
 | 
											// value reported needs to change.
 | 
				
			||||||
 | 
											// rss only makes sense if you are leaf cgroup
 | 
				
			||||||
 | 
											"RSSBytes":        bounded(0, 1*gb),
 | 
				
			||||||
						"PageFaults":      bounded(1000, 1E9),
 | 
											"PageFaults":      bounded(1000, 1E9),
 | 
				
			||||||
						"MajorPageFaults": bounded(0, 100000),
 | 
											"MajorPageFaults": bounded(0, 100000),
 | 
				
			||||||
					}),
 | 
										}),
 | 
				
			||||||
@@ -210,20 +224,22 @@ var _ = framework.KubeDescribe("Summary API", func() {
 | 
				
			|||||||
						"Time":           recent(maxStatsAge),
 | 
											"Time":           recent(maxStatsAge),
 | 
				
			||||||
						"AvailableBytes": fsCapacityBounds,
 | 
											"AvailableBytes": fsCapacityBounds,
 | 
				
			||||||
						"CapacityBytes":  fsCapacityBounds,
 | 
											"CapacityBytes":  fsCapacityBounds,
 | 
				
			||||||
						"UsedBytes":      bounded(kb, 10*gb),
 | 
											// we assume we are not running tests on machines < 10tb of disk
 | 
				
			||||||
						"InodesFree":     bounded(1E4, 1E8),
 | 
											"UsedBytes":  bounded(kb, 10*tb),
 | 
				
			||||||
						"Inodes":         bounded(1E4, 1E8),
 | 
											"InodesFree": bounded(1E4, 1E8),
 | 
				
			||||||
						"InodesUsed":     bounded(0, 1E8),
 | 
											"Inodes":     bounded(1E4, 1E8),
 | 
				
			||||||
 | 
											"InodesUsed": bounded(0, 1E8),
 | 
				
			||||||
					}),
 | 
										}),
 | 
				
			||||||
					"Runtime": ptrMatchAllFields(gstruct.Fields{
 | 
										"Runtime": ptrMatchAllFields(gstruct.Fields{
 | 
				
			||||||
						"ImageFs": ptrMatchAllFields(gstruct.Fields{
 | 
											"ImageFs": ptrMatchAllFields(gstruct.Fields{
 | 
				
			||||||
							"Time":           recent(maxStatsAge),
 | 
												"Time":           recent(maxStatsAge),
 | 
				
			||||||
							"AvailableBytes": fsCapacityBounds,
 | 
												"AvailableBytes": fsCapacityBounds,
 | 
				
			||||||
							"CapacityBytes":  fsCapacityBounds,
 | 
												"CapacityBytes":  fsCapacityBounds,
 | 
				
			||||||
							"UsedBytes":      bounded(kb, 10*gb),
 | 
												// we assume we are not running tests on machines < 10tb of disk
 | 
				
			||||||
							"InodesFree":     bounded(1E4, 1E8),
 | 
												"UsedBytes":  bounded(kb, 10*tb),
 | 
				
			||||||
							"Inodes":         bounded(1E4, 1E8),
 | 
												"InodesFree": bounded(1E4, 1E8),
 | 
				
			||||||
							"InodesUsed":     bounded(0, 1E8),
 | 
												"Inodes":     bounded(1E4, 1E8),
 | 
				
			||||||
 | 
												"InodesUsed": bounded(0, 1E8),
 | 
				
			||||||
						}),
 | 
											}),
 | 
				
			||||||
					}),
 | 
										}),
 | 
				
			||||||
				}),
 | 
									}),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user