diff --git a/cmd/kubeadm/app/cmd/phases/init/uploadconfig.go b/cmd/kubeadm/app/cmd/phases/init/uploadconfig.go index c9338f18990..88be945750f 100644 --- a/cmd/kubeadm/app/cmd/phases/init/uploadconfig.go +++ b/cmd/kubeadm/app/cmd/phases/init/uploadconfig.go @@ -104,7 +104,7 @@ func getUploadConfigPhaseFlags() []string { // runUploadKubeadmConfig uploads the kubeadm configuration to a ConfigMap func runUploadKubeadmConfig(c workflow.RunData) error { - cfg, client, err := getUploadConfigData(c) + cfg, client, _, err := getUploadConfigData(c) if err != nil { return err } @@ -118,13 +118,13 @@ func runUploadKubeadmConfig(c workflow.RunData) error { // runUploadKubeletConfig uploads the kubelet configuration to a ConfigMap func runUploadKubeletConfig(c workflow.RunData) error { - cfg, client, err := getUploadConfigData(c) + cfg, client, patchesDir, err := getUploadConfigData(c) if err != nil { return err } 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") } @@ -135,15 +135,15 @@ func runUploadKubeletConfig(c workflow.RunData) error { 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) 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() client, err := data.Client() if err != nil { - return nil, nil, err + return nil, nil, "", err } - return cfg, client, err + return cfg, client, data.PatchesDir(), err } diff --git a/cmd/kubeadm/app/phases/kubelet/config.go b/cmd/kubeadm/app/phases/kubelet/config.go index 3236edb58b6..2adc8d8631e 100644 --- a/cmd/kubeadm/app/phases/kubelet/config.go +++ b/cmd/kubeadm/app/phases/kubelet/config.go @@ -68,10 +68,7 @@ func WriteConfigToDisk(cfg *kubeadmapi.ClusterConfiguration, kubeletDir, patches // CreateConfigMap creates a ConfigMap with the generic kubelet configuration. // Used at "kubeadm init" and "kubeadm upgrade" time -func CreateConfigMap(cfg *kubeadmapi.ClusterConfiguration, 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) - +func CreateConfigMap(cfg *kubeadmapi.ClusterConfiguration, patchesDir string, client clientset.Interface) error { kubeletCfg, ok := cfg.ComponentConfigs[componentconfigs.KubeletGroup] if !ok { 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 } + // 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{ ObjectMeta: metav1.ObjectMeta{ Name: configMapName, diff --git a/cmd/kubeadm/app/phases/kubelet/config_test.go b/cmd/kubeadm/app/phases/kubelet/config_test.go index f1add0f8312..5399d66a846 100644 --- a/cmd/kubeadm/app/phases/kubelet/config_test.go +++ b/cmd/kubeadm/app/phases/kubelet/config_test.go @@ -58,7 +58,7 @@ func TestCreateConfigMap(t *testing.T) { 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) } } diff --git a/cmd/kubeadm/app/phases/upgrade/postupgrade.go b/cmd/kubeadm/app/phases/upgrade/postupgrade.go index 0ea680df603..36a63b74478 100644 --- a/cmd/kubeadm/app/phases/upgrade/postupgrade.go +++ b/cmd/kubeadm/app/phases/upgrade/postupgrade.go @@ -57,7 +57,7 @@ func PerformPostUpgradeTasks(client clientset.Interface, cfg *kubeadmapi.InitCon } // 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")) }