// UnupgradedControlPlaneInstances returns a list of control plane instances that have not yet been upgraded. // // NB. This function can only be called after the current control plane instance has been upgraded already. // Because it determines whether the other control plane instances have been upgraded by checking whether // the kube-apiserver image of other control plane instance is the same as that of this instance. func UnupgradedControlPlaneInstances(client clientset.Interface, nodeName string) ([]string, error) { … } // WriteKubeletConfigFiles writes the kubelet config file to disk, but first creates a backup of any existing one. func WriteKubeletConfigFiles(cfg *kubeadmapi.InitConfiguration, patchesDir string, dryRun bool, out io.Writer) error { … } // GetKubeletDir gets the kubelet directory based on whether the user is dry-running this command or not. func GetKubeletDir(dryRun bool) (string, error) { … } // UpdateKubeletLocalMode changes the Server URL in the kubelets kubeconfig to the local API endpoint if it is currently // set to the ControlPlaneEndpoint. // TODO: remove this function once kubeletKubeConfigFilePath goes GA and is hardcoded to enabled by default: // https://github.com/kubernetes/kubeadm/issues/2271 func UpdateKubeletLocalMode(cfg *kubeadmapi.InitConfiguration, dryRun bool) error { … }