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 // Apply patches to the KubeletConfiguration
if len(patchesDir) != 0 { if len(patchesDir) != 0 {
target := "kubeletconfiguration" patchManager, err := patches.GetPatchManagerForPath(patchesDir, patches.KnownTargets(), output)
knownTargets := []string{target}
patchManager, err := patches.GetPatchManagerForPath(patchesDir, knownTargets, output)
if err != nil { if err != nil {
return err return err
} }
patchTarget := &patches.PatchTarget{ patchTarget := &patches.PatchTarget{
Name: target, Name: patches.KubeletConfiguration,
StrategicMergePatchObject: kubeletconfig.KubeletConfiguration{}, StrategicMergePatchObject: kubeletconfig.KubeletConfiguration{},
Data: kubeletBytes, Data: kubeletBytes,
} }

View File

@ -33,6 +33,7 @@ import (
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/util/strategicpatch"
utilyaml "k8s.io/apimachinery/pkg/util/yaml" utilyaml "k8s.io/apimachinery/pkg/util/yaml"
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )
@ -74,6 +75,8 @@ func (ps *patchSet) String() string {
) )
} }
const KubeletConfiguration = "kubeletconfiguration"
var ( var (
pathLock = &sync.RWMutex{} pathLock = &sync.RWMutex{}
pathCache = map[string]*PatchManager{} pathCache = map[string]*PatchManager{}
@ -89,16 +92,26 @@ var (
knownExtensions = []string{"json", "yaml"} knownExtensions = []string{"json", "yaml"}
regExtension = regexp.MustCompile(`.+\.(` + strings.Join(knownExtensions, "|") + `)$`) 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". // 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". // "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. // 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) { func GetPatchManagerForPath(path string, knownTargets []string, output io.Writer) (*PatchManager, error) {
pathLock.RLock() pathLock.RLock()
if pm, known := pathCache[path]; known { if pm, known := pathCache[path]; known {
// in case known targets are changed
pm.knownTargets = knownTargets
pathLock.RUnlock() pathLock.RUnlock()
return pm, nil 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") return pod, errors.Wrapf(err, "failed to marshal Pod manifest to YAML")
} }
var knownTargets = []string{ patchManager, err := patches.GetPatchManagerForPath(patchesDir, patches.KnownTargets(), output)
kubeadmconstants.Etcd,
kubeadmconstants.KubeAPIServer,
kubeadmconstants.KubeControllerManager,
kubeadmconstants.KubeScheduler,
}
patchManager, err := patches.GetPatchManagerForPath(patchesDir, knownTargets, output)
if err != nil { if err != nil {
return pod, err return pod, err
} }