From 769e7990d61313552ec3e6129bdc1fef28c245a2 Mon Sep 17 00:00:00 2001 From: HirazawaUi <695097494plus@gmail.com> Date: Wed, 18 Dec 2024 22:52:22 +0800 Subject: [PATCH] remove container-runtime-endpoint flag when upgrade --- cmd/kubeadm/app/phases/kubelet/flags.go | 7 ++++++- cmd/kubeadm/app/phases/upgrade/postupgrade.go | 12 +++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/cmd/kubeadm/app/phases/kubelet/flags.go b/cmd/kubeadm/app/phases/kubelet/flags.go index c48369a55fd..48b145738ab 100644 --- a/cmd/kubeadm/app/phases/kubelet/flags.go +++ b/cmd/kubeadm/app/phases/kubelet/flags.go @@ -74,7 +74,12 @@ func WriteKubeletDynamicEnvFile(cfg *kubeadmapi.ClusterConfiguration, nodeReg *k flagOpts.criSocket = "" } stringMap := buildKubeletArgs(flagOpts) - argList := kubeadmutil.ArgumentsToCommand(stringMap, nodeReg.KubeletExtraArgs) + return WriteKubeletArgsToFile(stringMap, nodeReg.KubeletExtraArgs, kubeletDir) +} + +// WriteKubeletArgsToFile writes combined kubelet flags to KubeletEnvFile file in kubeletDir. +func WriteKubeletArgsToFile(kubeletFlags, overridesFlags []kubeadmapi.Arg, kubeletDir string) error { + argList := kubeadmutil.ArgumentsToCommand(kubeletFlags, overridesFlags) envFileContent := fmt.Sprintf("%s=%q\n", constants.KubeletEnvFileVariableName, strings.Join(argList, " ")) return writeKubeletFlagBytesToDisk([]byte(envFileContent), kubeletDir) diff --git a/cmd/kubeadm/app/phases/upgrade/postupgrade.go b/cmd/kubeadm/app/phases/upgrade/postupgrade.go index cf2baa3dc2e..180b230b181 100644 --- a/cmd/kubeadm/app/phases/upgrade/postupgrade.go +++ b/cmd/kubeadm/app/phases/upgrade/postupgrade.go @@ -133,15 +133,25 @@ func WriteKubeletConfigFiles(cfg *kubeadmapi.InitConfiguration, kubeletConfigDir if features.Enabled(cfg.FeatureGates, features.NodeLocalCRISocket) { // If instance-config.yaml exist on disk, we don't need to create it. _, err := os.Stat(filepath.Join(kubeletDir, kubeadmconstants.KubeletInstanceConfigurationFileName)) + // After the NodeLocalCRISocket feature gate is removed, os.IsNotExist(err) should also be removed. + // If there is no instance configuration, it indicates that the configuration on the node has been corrupted, + // and an error needs to be reported. if os.IsNotExist(err) { var containerRuntimeEndpoint string + var kubeletFlags []kubeadmapi.Arg dynamicFlags, err := kubeletphase.ReadKubeletDynamicEnvFile(filepath.Join(kubeletDir, kubeadmconstants.KubeletEnvFileName)) if err == nil { args := kubeadmutil.ArgumentsFromCommand(dynamicFlags) for _, arg := range args { if arg.Name == "container-runtime-endpoint" { containerRuntimeEndpoint = arg.Value - break + continue + } + kubeletFlags = append(kubeletFlags, arg) + } + if len(containerRuntimeEndpoint) != 0 { + if err := kubeletphase.WriteKubeletArgsToFile(kubeletFlags, nil, kubeletDir); err != nil { + return err } } } else if dryRun {