Skip to content

Commit ebe1aa2

Browse files
committed
CAPD: disable image garbage collection in kubelet to align with kind
1 parent 67f52ea commit ebe1aa2

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

test/infrastructure/docker/internal/provisioning/cloudinit/writefiles.go

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -133,23 +133,20 @@ func fixNodeRegistration(nodeRegistration *bootstrapv1.NodeRegistrationOptions,
133133
nodeRegistration.KubeletExtraArgs = map[string]string{}
134134
}
135135

136-
if _, ok := nodeRegistration.KubeletExtraArgs["eviction-hard"]; !ok {
137-
nodeRegistration.KubeletExtraArgs["eviction-hard"] = "nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%"
138-
}
139-
if _, ok := nodeRegistration.KubeletExtraArgs["fail-swap-on"]; !ok {
140-
nodeRegistration.KubeletExtraArgs["fail-swap-on"] = "false"
141-
}
136+
// Disable disk resource management by default.
137+
// The kubelet will see the host disk that the inner container runtime
138+
// is ultimately backed by and attempt to recover disk space. We don't want that.
139+
// See https://github.com/kubernetes-sigs/cluster-api/issues/11856 for more details.
140+
defaultExtraArg(nodeRegistration, "image-gc-high-threshold", "100")
141+
defaultExtraArg(nodeRegistration, "eviction-hard", "nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%")
142+
143+
defaultExtraArg(nodeRegistration, "fail-swap-on", "false")
142144

143145
if kindMapping.Mode != kind.Mode0_19 {
144146
// kindest/node images generated by modo 0.20 and greater require to use CgroupnsMode = "private" when running images;
145147
// following settings are complementary to this change.
146-
147-
if _, ok := nodeRegistration.KubeletExtraArgs["cgroup-root"]; !ok {
148-
nodeRegistration.KubeletExtraArgs["cgroup-root"] = "/kubelet"
149-
}
150-
if _, ok := nodeRegistration.KubeletExtraArgs["runtime-cgroups"]; !ok {
151-
nodeRegistration.KubeletExtraArgs["runtime-cgroups"] = "/system.slice/containerd.service"
152-
}
148+
defaultExtraArg(nodeRegistration, "cgroup-root", "/kubelet")
149+
defaultExtraArg(nodeRegistration, "runtime-cgroups", "/system.slice/containerd.service")
153150
}
154151

155152
if version.Compare(kindMapping.KubernetesVersion, cgroupDriverPatchVersionCeiling) == -1 {
@@ -159,6 +156,13 @@ func fixNodeRegistration(nodeRegistration *bootstrapv1.NodeRegistrationOptions,
159156
}
160157
}
161158

159+
// defautExtraArg sets a default value for an extra arg if it is not already set.
160+
func defaultExtraArg(nodeRegistration *bootstrapv1.NodeRegistrationOptions, arg, value string) {
161+
if _, ok := nodeRegistration.KubeletExtraArgs[arg]; !ok {
162+
nodeRegistration.KubeletExtraArgs[arg] = value
163+
}
164+
}
165+
162166
// Commands return a list of commands to run on the node.
163167
// Each command defines the parameters of a shell command necessary to generate a file replicating the cloud-init write_files module.
164168
func (a *writeFilesAction) Commands() ([]provisioning.Cmd, error) {

test/infrastructure/docker/internal/provisioning/cloudinit/writefiles_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ nodeRegistration:
151151
cloud-provider: aws
152152
eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%
153153
fail-swap-on: "false"
154+
image-gc-high-threshold: "100"
154155
taints: null
155156
`,
156157
`apiVersion: kubeadm.k8s.io/v1beta3
@@ -162,6 +163,7 @@ nodeRegistration:
162163
cloud-provider: aws
163164
eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%
164165
fail-swap-on: "false"
166+
image-gc-high-threshold: "100"
165167
taints: null
166168
`,
167169
},
@@ -210,6 +212,7 @@ nodeRegistration:
210212
cloud-provider: aws
211213
eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%
212214
fail-swap-on: "false"
215+
image-gc-high-threshold: "100"
213216
runtime-cgroups: /system.slice/containerd.service
214217
taints: null
215218
`,
@@ -223,6 +226,7 @@ nodeRegistration:
223226
cloud-provider: aws
224227
eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%
225228
fail-swap-on: "false"
229+
image-gc-high-threshold: "100"
226230
runtime-cgroups: /system.slice/containerd.service
227231
taints: null
228232
`,
@@ -272,6 +276,7 @@ nodeRegistration:
272276
cloud-provider: aws
273277
eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%
274278
fail-swap-on: "false"
279+
image-gc-high-threshold: "100"
275280
taints: null
276281
`,
277282
`apiVersion: kubeadm.k8s.io/v1beta3
@@ -284,6 +289,7 @@ nodeRegistration:
284289
cloud-provider: aws
285290
eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%
286291
fail-swap-on: "false"
292+
image-gc-high-threshold: "100"
287293
taints: null
288294
`,
289295
},
@@ -333,6 +339,7 @@ nodeRegistration:
333339
cloud-provider: aws
334340
eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%
335341
fail-swap-on: "false"
342+
image-gc-high-threshold: "100"
336343
runtime-cgroups: /system.slice/containerd.service
337344
taints: null
338345
`,
@@ -347,6 +354,7 @@ nodeRegistration:
347354
cloud-provider: aws
348355
eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%
349356
fail-swap-on: "false"
357+
image-gc-high-threshold: "100"
350358
runtime-cgroups: /system.slice/containerd.service
351359
taints: null
352360
`,

0 commit comments

Comments
 (0)