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
}