kubeadm: use staticpod known tags for upgrade/init phases

This commit is contained in:
Paco Xu 2022-06-09 10:27:18 +08:00
parent e27b2781f5
commit 31922c7794
3 changed files with 19 additions and 14 deletions

View File

@ -56,14 +56,13 @@ func WriteConfigToDisk(cfg *kubeadmapi.ClusterConfiguration, kubeletDir, patches
// Apply patches to the KubeletConfiguration
if len(patchesDir) != 0 {
target := "kubeletconfiguration"
knownTargets := []string{target}
patchManager, err := patches.GetPatchManagerForPath(patchesDir, knownTargets, output)
patchManager, err := patches.GetPatchManagerForPath(patchesDir, patches.KnownTargets(), output)
if err != nil {
return err
}
patchTarget := &patches.PatchTarget{
Name: target,
Name: patches.KubeletConfiguration,
StrategicMergePatchObject: kubeletconfig.KubeletConfiguration{},
Data: kubeletBytes,
}

View File

@ -33,6 +33,7 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/strategicpatch"
utilyaml "k8s.io/apimachinery/pkg/util/yaml"
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
"sigs.k8s.io/yaml"
)
@ -74,6 +75,8 @@ func (ps *patchSet) String() string {
)
}
const KubeletConfiguration = "kubeletconfiguration"
var (
pathLock = &sync.RWMutex{}
pathCache = map[string]*PatchManager{}
@ -89,16 +92,26 @@ var (
knownExtensions = []string{"json", "yaml"}
regExtension = regexp.MustCompile(`.+\.(` + strings.Join(knownExtensions, "|") + `)$`)
knownTargets = []string{
kubeadmconstants.Etcd,
kubeadmconstants.KubeAPIServer,
kubeadmconstants.KubeControllerManager,
kubeadmconstants.KubeScheduler,
KubeletConfiguration,
}
)
func KnownTargets() []string {
return knownTargets
}
// GetPatchManagerForPath creates a patch manager that can be used to apply patches to "knownTargets".
// "path" should contain patches that can be used to patch the "knownTargets".
// If "output" is non-nil, messages about actions performed by the manager would go on this io.Writer.
func GetPatchManagerForPath(path string, knownTargets []string, output io.Writer) (*PatchManager, error) {
pathLock.RLock()
if pm, known := pathCache[path]; known {
// in case known targets are changed
pm.knownTargets = knownTargets
pathLock.RUnlock()
return pm, nil
}

View File

@ -168,14 +168,7 @@ func PatchStaticPod(pod *v1.Pod, patchesDir string, output io.Writer) (*v1.Pod,
return pod, errors.Wrapf(err, "failed to marshal Pod manifest to YAML")
}
var knownTargets = []string{
kubeadmconstants.Etcd,
kubeadmconstants.KubeAPIServer,
kubeadmconstants.KubeControllerManager,
kubeadmconstants.KubeScheduler,
}
patchManager, err := patches.GetPatchManagerForPath(patchesDir, knownTargets, output)
patchManager, err := patches.GetPatchManagerForPath(patchesDir, patches.KnownTargets(), output)
if err != nil {
return pod, err
}