func()

in projects/aws/upgrader/upgrade/kubelet_kubectl.go [29:80]


func (u *InPlaceUpgrader) KubeletKubectlUpgrade(ctx context.Context) error {
	cmpDir, err := u.upgradeComponentsKubernetesBinDir()
	if err != nil {
		return fmt.Errorf("getting upgrade components binary directory: %v", err)
	}

	if err := u.BackUpAndReplace(kubectlBinPath, cmpDir, fmt.Sprintf("%s/kubectl", cmpDir)); err != nil {
		return fmt.Errorf("backing up and replacing kubectl binary: %v", err)
	}
	logger.Info("Backed up and replaced kubectl successfully")

	stopKubeletCmd := []string{"systemctl", "stop", "kubelet"}
	out, err := u.ExecCommand(ctx, stopKubeletCmd[0], stopKubeletCmd[1:]...)
	if err != nil {
		return execError(stopKubeletCmd, string(out))
	}

	if err := u.BackUpAndReplace(kubeletBinPath, cmpDir, fmt.Sprintf("%s/kubelet", cmpDir)); err != nil {
		return fmt.Errorf("backing up and replacing kubelet binary: %v", err)
	}
	logger.Info("Backed up and replaced kubelet successfully")

	kubeAdmVersionCmd := []string{"kubeadm", "version", "-oshort"}
	kubeVersion, err := u.ExecCommand(ctx, kubeAdmVersionCmd[0], kubeAdmVersionCmd[1:]...)
	kubeVersionStr := string(kubeVersion)
	if err != nil {
		return execError(kubeAdmVersionCmd, kubeVersionStr)
	}

	// KubeletCredentialProviders support became GA in k8s v1.26, and the feature gate was removed in k8s v1.28.
	// For in-place upgrades, we should remove this feature gate if it exists on nodes running k8s v1.26 and above.
	if !strings.Contains(kubeVersionStr, "v1.25") {
		if err := u.updateKubeletExtraArgs(cmpDir); err != nil {
			return fmt.Errorf("updating kubelet extra args: %v", err)
		}
	}

	daemonReloadCmd := []string{"systemctl", "daemon-reload"}
	out, err = u.ExecCommand(ctx, daemonReloadCmd[0], daemonReloadCmd[1:]...)
	if err != nil {
		return execError(daemonReloadCmd, string(out))
	}

	restartkubeletCmd := []string{"systemctl", "restart", "kubelet"}
	out, err = u.ExecCommand(ctx, restartkubeletCmd[0], restartkubeletCmd[1:]...)
	if err != nil {
		return execError(restartkubeletCmd, string(out))
	}

	logger.Info("kubectl and kubelet upgrade successful!")
	return nil
}