From 564f0e9a2575dd64575454b2570511939911e17d Mon Sep 17 00:00:00 2001 From: Adrian Reber Date: Tue, 7 Sep 2021 15:34:06 +0000 Subject: [PATCH] kubelet: add checkpoint/restore infrastructure This adds the first infrastructure code parts to the kubelet to support checkpoint/restore. Signed-off-by: Adrian Reber --- pkg/kubelet/config/defaults.go | 1 + pkg/kubelet/kubelet.go | 6 ++++++ pkg/kubelet/kubelet_getters.go | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/pkg/kubelet/config/defaults.go b/pkg/kubelet/config/defaults.go index f2564e65d90..b438e0d25d5 100644 --- a/pkg/kubelet/config/defaults.go +++ b/pkg/kubelet/config/defaults.go @@ -28,4 +28,5 @@ const ( DefaultKubeletPluginContainersDirName = "plugin-containers" DefaultKubeletPodResourcesDirName = "pod-resources" KubeletPluginsDirSELinuxLabel = "system_u:object_r:container_file_t:s0" + DefaultKubeletCheckpointsDirName = "checkpoints" ) diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 8482c60db13..5cb582dcedb 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -1229,6 +1229,7 @@ func (kl *Kubelet) RlimitStats() (*statsapi.RlimitStats, error) { // 2. the pods directory // 3. the plugins directory // 4. the pod-resources directory +// 5. the checkpoint directory func (kl *Kubelet) setupDataDirs() error { kl.rootDirectory = path.Clean(kl.rootDirectory) pluginRegistrationDir := kl.getPluginsRegistrationDir() @@ -1251,6 +1252,11 @@ func (kl *Kubelet) setupDataDirs() error { if err := os.MkdirAll(kl.getPodResourcesDir(), 0750); err != nil { return fmt.Errorf("error creating podresources directory: %v", err) } + if utilfeature.DefaultFeatureGate.Enabled(features.ContainerCheckpoint) { + if err := os.MkdirAll(kl.getCheckpointsDir(), 0700); err != nil { + return fmt.Errorf("error creating checkpoint directory: %v", err) + } + } if selinux.GetEnabled() { err := selinux.SetFileLabel(pluginRegistrationDir, config.KubeletPluginsDirSELinuxLabel) if err != nil { diff --git a/pkg/kubelet/kubelet_getters.go b/pkg/kubelet/kubelet_getters.go index dacb909bd10..1d393abd9dd 100644 --- a/pkg/kubelet/kubelet_getters.go +++ b/pkg/kubelet/kubelet_getters.go @@ -77,6 +77,12 @@ func (kl *Kubelet) getPluginDir(pluginName string) string { return filepath.Join(kl.getPluginsDir(), pluginName) } +// getCheckpointsDir returns a data directory name for checkpoints. +// Checkpoints can be stored in this directory for further use. +func (kl *Kubelet) getCheckpointsDir() string { + return filepath.Join(kl.getRootDir(), config.DefaultKubeletCheckpointsDirName) +} + // getVolumeDevicePluginsDir returns the full path to the directory under which plugin // directories are created. Plugins can use these directories for data that // they need to persist. Plugins should create subdirectories under this named