未验证 提交 231bf12c 编写于 作者: M Medya Ghazizadeh 提交者: GitHub

Merge pull request #8695 from medyagh/restart_msg1

add timeout for kubeadm init
......@@ -20,7 +20,6 @@ package hyperkit
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
......
......@@ -16,7 +16,17 @@ limitations under the License.
package kubeadm
import "errors"
import (
"errors"
"fmt"
)
// max minutes wait for kubeadm init. usually finishes in less than 1 minute.
// giving it a generous timeout for possible super slow machines.
const initTimeoutMinutes = 10
// max seconds to wait for running kubectl apply manifests to the cluster to exit
const applyTimeoutSeconds = 10
// FailFastError type is an error that could not be solved by trying again
type FailFastError struct {
......@@ -30,3 +40,6 @@ func (f *FailFastError) Error() string {
// ErrNoExecLinux is thrown on linux when the kubeadm binaries are mounted in a noexec volume on Linux as seen in https://github.com/kubernetes/minikube/issues/8327#issuecomment-651288459
// this error could be seen on docker/podman or none driver.
var ErrNoExecLinux = &FailFastError{errors.New("mounted kubeadm binary is not executable")}
// ErrInitTimedout is thrown if kubeadm init takes longer than max time allowed
var ErrInitTimedout = fmt.Errorf("kubeadm init timed out in %d minutes", initTimeoutMinutes)
......@@ -224,9 +224,15 @@ func (k *Bootstrapper) init(cfg config.ClusterConfig) error {
}
conf := bsutil.KubeadmYamlPath
c := exec.Command("/bin/bash", "-c", fmt.Sprintf("%s init --config %s %s --ignore-preflight-errors=%s",
ctx, cancel := context.WithTimeout(context.Background(), initTimeoutMinutes*time.Minute)
defer cancel()
c := exec.CommandContext(ctx, "/bin/bash", "-c", fmt.Sprintf("%s init --config %s %s --ignore-preflight-errors=%s",
bsutil.InvokeKubeadm(cfg.KubernetesConfig.KubernetesVersion), conf, extraFlags, strings.Join(ignore, ",")))
if _, err := k.c.RunCmd(c); err != nil {
if ctx.Err() == context.DeadlineExceeded {
return ErrInitTimedout
}
if strings.Contains(err.Error(), "'kubeadm': Permission denied") {
return ErrNoExecLinux
}
......@@ -827,8 +833,7 @@ func (k *Bootstrapper) applyNodeLabels(cfg config.ClusterConfig) error {
commitLbl := "minikube.k8s.io/commit=" + version.GetGitCommitID()
nameLbl := "minikube.k8s.io/name=" + cfg.Name
// Allow no more than 5 seconds for applying labels
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
ctx, cancel := context.WithTimeout(context.Background(), applyTimeoutSeconds*time.Second)
defer cancel()
// example:
// sudo /var/lib/minikube/binaries/<version>/kubectl label nodes minikube.k8s.io/version=<version> minikube.k8s.io/commit=aa91f39ffbcf27dcbb93c4ff3f457c54e585cf4a-dirty minikube.k8s.io/name=p1 minikube.k8s.io/updated_at=2020_02_20T12_05_35_0700 --all --overwrite --kubeconfig=/var/lib/minikube/kubeconfig
......@@ -837,6 +842,9 @@ func (k *Bootstrapper) applyNodeLabels(cfg config.ClusterConfig) error {
fmt.Sprintf("--kubeconfig=%s", path.Join(vmpath.GuestPersistentDir, "kubeconfig")))
if _, err := k.c.RunCmd(cmd); err != nil {
if ctx.Err() == context.DeadlineExceeded {
return errors.Wrapf(err, "timeout apply labels")
}
return errors.Wrapf(err, "applying node labels")
}
return nil
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册