diff --git a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go index f0cf0727396b..10da6f1f6c81 100644 --- a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go +++ b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go @@ -141,15 +141,27 @@ func (k *KubeadmBootstrapper) GetApiServerStatus(ip net.IP) (string, error) { // LogCommands returns a map of log type to a command which will display that log. func (k *KubeadmBootstrapper) LogCommands(o bootstrapper.LogOptions) map[string]string { - var kcmd strings.Builder - kcmd.WriteString("journalctl -u kubelet") + var kubelet strings.Builder + kubelet.WriteString("journalctl -u kubelet") if o.Lines > 0 { - kcmd.WriteString(fmt.Sprintf(" -n %d", o.Lines)) + kubelet.WriteString(fmt.Sprintf(" -n %d", o.Lines)) } if o.Follow { - kcmd.WriteString(" -f") + kubelet.WriteString(" -f") + } + + var dmesg strings.Builder + dmesg.WriteString("sudo dmesg -PH -L=never --level warn,err,crit,alert,emerg") + if o.Follow { + dmesg.WriteString(" --follow") + } + if o.Lines > 0 { + dmesg.WriteString(fmt.Sprintf(" | tail -n %d", o.Lines)) + } + return map[string]string{ + "kubelet": kubelet.String(), + "dmesg": dmesg.String(), } - return map[string]string{"kubelet": kcmd.String()} } func (k *KubeadmBootstrapper) StartCluster(k8s config.KubernetesConfig) error { diff --git a/pkg/minikube/logs/logs.go b/pkg/minikube/logs/logs.go index 4f833eaa439d..4ee76f0c997c 100644 --- a/pkg/minikube/logs/logs.go +++ b/pkg/minikube/logs/logs.go @@ -40,6 +40,7 @@ var importantPods = []string{ "kube-apiserver", "coredns", "kube-scheduler", + "kube-proxy", } // lookbackwardsCount is how far back to look in a log for problems. This should be large enough to @@ -105,6 +106,10 @@ func OutputProblems(problems map[string][]string, maxLines int) { // Output displays logs from multiple sources in tail(1) format func Output(r cruntime.Manager, bs bootstrapper.Bootstrapper, runner bootstrapper.CommandRunner, lines int) error { cmds := logCommands(r, bs, lines, false) + + // These are not technically logs, but are useful to have in bug reports. + cmds["kernel"] = "uptime && uname -a" + names := []string{} for k := range cmds { names = append(names, k) @@ -112,7 +117,10 @@ func Output(r cruntime.Manager, bs bootstrapper.Bootstrapper, runner bootstrappe sort.Strings(names) failed := []string{} - for _, name := range names { + for i, name := range names { + if i > 0 { + console.OutLn("") + } console.OutLn("==> %s <==", name) var b bytes.Buffer err := runner.CombinedOutputTo(cmds[name], &b)