kubeadm: fix a bug where the uploaded kubelet configuration in kube-system/kubelet-config ConfigMap does not respect user patch

This commit is contained in:
SataQiu 2023-02-07 17:30:03 +08:00
parent e944fc28ca
commit 69e50cabd2
4 changed files with 21 additions and 13 deletions

View File

@ -104,7 +104,7 @@ func getUploadConfigPhaseFlags() []string {
// runUploadKubeadmConfig uploads the kubeadm configuration to a ConfigMap // runUploadKubeadmConfig uploads the kubeadm configuration to a ConfigMap
func runUploadKubeadmConfig(c workflow.RunData) error { func runUploadKubeadmConfig(c workflow.RunData) error {
cfg, client, err := getUploadConfigData(c) cfg, client, _, err := getUploadConfigData(c)
if err != nil { if err != nil {
return err return err
} }
@ -118,13 +118,13 @@ func runUploadKubeadmConfig(c workflow.RunData) error {
// runUploadKubeletConfig uploads the kubelet configuration to a ConfigMap // runUploadKubeletConfig uploads the kubelet configuration to a ConfigMap
func runUploadKubeletConfig(c workflow.RunData) error { func runUploadKubeletConfig(c workflow.RunData) error {
cfg, client, err := getUploadConfigData(c) cfg, client, patchesDir, err := getUploadConfigData(c)
if err != nil { if err != nil {
return err return err
} }
klog.V(1).Infoln("[upload-config] Uploading the kubelet component config to a ConfigMap") klog.V(1).Infoln("[upload-config] Uploading the kubelet component config to a ConfigMap")
if err = kubeletphase.CreateConfigMap(&cfg.ClusterConfiguration, client); err != nil { if err = kubeletphase.CreateConfigMap(&cfg.ClusterConfiguration, patchesDir, client); err != nil {
return errors.Wrap(err, "error creating kubelet configuration ConfigMap") return errors.Wrap(err, "error creating kubelet configuration ConfigMap")
} }
@ -135,15 +135,15 @@ func runUploadKubeletConfig(c workflow.RunData) error {
return nil return nil
} }
func getUploadConfigData(c workflow.RunData) (*kubeadmapi.InitConfiguration, clientset.Interface, error) { func getUploadConfigData(c workflow.RunData) (*kubeadmapi.InitConfiguration, clientset.Interface, string, error) {
data, ok := c.(InitData) data, ok := c.(InitData)
if !ok { if !ok {
return nil, nil, errors.New("upload-config phase invoked with an invalid data struct") return nil, nil, "", errors.New("upload-config phase invoked with an invalid data struct")
} }
cfg := data.Cfg() cfg := data.Cfg()
client, err := data.Client() client, err := data.Client()
if err != nil { if err != nil {
return nil, nil, err return nil, nil, "", err
} }
return cfg, client, err return cfg, client, data.PatchesDir(), err
} }

View File

@ -68,10 +68,7 @@ func WriteConfigToDisk(cfg *kubeadmapi.ClusterConfiguration, kubeletDir, patches
// CreateConfigMap creates a ConfigMap with the generic kubelet configuration. // CreateConfigMap creates a ConfigMap with the generic kubelet configuration.
// Used at "kubeadm init" and "kubeadm upgrade" time // Used at "kubeadm init" and "kubeadm upgrade" time
func CreateConfigMap(cfg *kubeadmapi.ClusterConfiguration, client clientset.Interface) error { func CreateConfigMap(cfg *kubeadmapi.ClusterConfiguration, patchesDir string, client clientset.Interface) error {
configMapName := kubeadmconstants.KubeletBaseConfigurationConfigMap
fmt.Printf("[kubelet] Creating a ConfigMap %q in namespace %s with the configuration for the kubelets in the cluster\n", configMapName, metav1.NamespaceSystem)
kubeletCfg, ok := cfg.ComponentConfigs[componentconfigs.KubeletGroup] kubeletCfg, ok := cfg.ComponentConfigs[componentconfigs.KubeletGroup]
if !ok { if !ok {
return errors.New("no kubelet component config found in the active component config set") return errors.New("no kubelet component config found in the active component config set")
@ -82,6 +79,17 @@ func CreateConfigMap(cfg *kubeadmapi.ClusterConfiguration, client clientset.Inte
return err return err
} }
// Apply patches to the KubeletConfiguration
if len(patchesDir) != 0 {
kubeletBytes, err = applyKubeletConfigPatches(kubeletBytes, patchesDir, os.Stdout)
if err != nil {
return errors.Wrap(err, "could not apply patches to the KubeletConfiguration")
}
}
configMapName := kubeadmconstants.KubeletBaseConfigurationConfigMap
fmt.Printf("[kubelet] Creating a ConfigMap %q in namespace %s with the configuration for the kubelets in the cluster\n", configMapName, metav1.NamespaceSystem)
configMap := &v1.ConfigMap{ configMap := &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: configMapName, Name: configMapName,

View File

@ -58,7 +58,7 @@ func TestCreateConfigMap(t *testing.T) {
t.Fatalf("unexpected failure when defaulting InitConfiguration: %v", err) t.Fatalf("unexpected failure when defaulting InitConfiguration: %v", err)
} }
if err := CreateConfigMap(&internalcfg.ClusterConfiguration, client); err != nil { if err := CreateConfigMap(&internalcfg.ClusterConfiguration, "", client); err != nil {
t.Errorf("CreateConfigMap: unexpected error %v", err) t.Errorf("CreateConfigMap: unexpected error %v", err)
} }
} }

View File

@ -54,7 +54,7 @@ func PerformPostUpgradeTasks(client clientset.Interface, cfg *kubeadmapi.InitCon
} }
// Create the new, version-branched kubelet ComponentConfig ConfigMap // Create the new, version-branched kubelet ComponentConfig ConfigMap
if err := kubeletphase.CreateConfigMap(&cfg.ClusterConfiguration, client); err != nil { if err := kubeletphase.CreateConfigMap(&cfg.ClusterConfiguration, patchesDir, client); err != nil {
errs = append(errs, errors.Wrap(err, "error creating kubelet configuration ConfigMap")) errs = append(errs, errors.Wrap(err, "error creating kubelet configuration ConfigMap"))
} }