Merge branch 'master' of github.com:kubernetes/minikube into 1.13
commit
d6965d52a1
69
CHANGELOG.md
69
CHANGELOG.md
|
|
@ -1,5 +1,74 @@
|
|||
# Release Notes
|
||||
|
||||
## Version 1.13.0 - TBD
|
||||
|
||||
## Features
|
||||
|
||||
* Update default Kubernetes version to v1.19.0 🎉 [#9050](https://github.com/kubernetes/minikube/pull/9050)
|
||||
* start: Support for mounting host volumes on start with docker driver [#8159](https://github.com/kubernetes/minikube/pull/8159)
|
||||
* start: Add a machine readable reason to all error paths [#9126](https://github.com/kubernetes/minikube/pull/9126)
|
||||
* stop: add --keep-context-active flag [#9044](https://github.com/kubernetes/minikube/pull/9044)
|
||||
* kubectl: Invoke kubectl if minikube binary is named 'kubectl' [#8872](https://github.com/kubernetes/minikube/pull/8872)
|
||||
|
||||
## Bug fixes
|
||||
|
||||
* docker: Choose the appropriate bridge interface when multiple exist [#9062](https://github.com/kubernetes/minikube/pull/9062)
|
||||
* cache: Fix "cache add" for local images by cherry-picking go-containerregistry fix [#9160](https://github.com/kubernetes/minikube/pull/9160)
|
||||
* update-context: Fix nil pointer dereference [#8989](https://github.com/kubernetes/minikube/pull/8989)
|
||||
* start: Fix --extra-config for scheduler/controllerManager by removing hardcoded values [#9136](https://github.com/kubernetes/minikube/pull/9136)
|
||||
* start: Fix --memory flag parsing in minikube start [#9033](https://github.com/kubernetes/minikube/pull/9033)
|
||||
* start: Improve overlay module check (behavior & UX) [#9163](https://github.com/kubernetes/minikube/pull/9163)
|
||||
* gcp-auth addon: trim whitespace when setting gcp project id [#9164](https://github.com/kubernetes/minikube/pull/9164)
|
||||
* cni: Allow flannel CNI to work with kicbase by fixing IP conflict [#9046](https://github.com/kubernetes/minikube/pull/9046)
|
||||
* cni: fix multiple node calico-node not ready [#9019](https://github.com/kubernetes/minikube/pull/9019)
|
||||
* kic: Retry fix_cgroup on failure [#8974](https://github.com/kubernetes/minikube/pull/8974)
|
||||
* json: fix type for kubectl version mismatch to warning [#9157](https://github.com/kubernetes/minikube/pull/9157)
|
||||
* json: fix type for latest minikube availability message [#9109](https://github.com/kubernetes/minikube/pull/9109)
|
||||
* addon-manager: Add namespace to persistent volume path [#9128](https://github.com/kubernetes/minikube/pull/9128)
|
||||
* ssh: respect native-ssh flag [#8907](https://github.com/kubernetes/minikube/pull/8907)
|
||||
|
||||
## Other improvements
|
||||
|
||||
* kic: Disable swap in Docker & podman containers [#9149](https://github.com/kubernetes/minikube/pull/9149)
|
||||
* kic: prioritize /etc/hosts over dns [#9029](https://github.com/kubernetes/minikube/pull/9029)
|
||||
* start: Repair kubecontext before checking cluster health [#9143](https://github.com/kubernetes/minikube/pull/9143)
|
||||
* start: Don't enable kubelet until after kubeadm generates config [#9111](https://github.com/kubernetes/minikube/pull/9111)
|
||||
* start: Add -o shorthand option for --output [#9097](https://github.com/kubernetes/minikube/pull/9097)
|
||||
* ux: Add MINIKUBE_IN_STYLE auto-detection for Windows terminal [#9127](https://github.com/kubernetes/minikube/pull/9127)
|
||||
* ux: Warn if /var disk space is full and add a solution message [#9028](https://github.com/kubernetes/minikube/pull/9028)
|
||||
* iso Upgrade falco-module to version 0.24.0 [#9068](https://github.com/kubernetes/minikube/pull/9068)
|
||||
* status: `minikube status` should display InsufficientStorage status [#9034](https://github.com/kubernetes/minikube/pull/9034)
|
||||
* perf: set proxy-refresh-interval=70000 for etcd to improve CPU overhead [#8850](https://github.com/kubernetes/minikube/pull/8850)
|
||||
* json: buffer download progress every second [#9099](https://github.com/kubernetes/minikube/pull/9099)
|
||||
* localization: Fix typos in pl translation [#9168](https://github.com/kubernetes/minikube/pull/9168)
|
||||
* dashboard: Update dashboard to v2.0.3 [#9129](https://github.com/kubernetes/minikube/pull/9129)
|
||||
|
||||
Thank you to our many wonderful contributors for this release!
|
||||
|
||||
- AlexanderChen1989
|
||||
- Ambor
|
||||
- Anders F Björklund
|
||||
- Anshul Sirur
|
||||
- Asare Worae
|
||||
- Chang-Woo Rhee
|
||||
- Evgeny Shmarnev
|
||||
- Jose Donizetti
|
||||
- Kazuki Suda
|
||||
- Li Zhijian
|
||||
- Marcin Niemira
|
||||
- Markus Frosch
|
||||
- Medya Ghazizadeh
|
||||
- Pablo Caderno
|
||||
- Priya Wadhwa
|
||||
- Sharif Elgamal
|
||||
- Thomas Strömberg
|
||||
- anencore94
|
||||
- mckrl
|
||||
- ollipa
|
||||
- staticdev
|
||||
- vinu2003
|
||||
- zhanwang
|
||||
|
||||
## Version 1.12.3 - 2020-08-12
|
||||
|
||||
Features:
|
||||
|
|
|
|||
|
|
@ -206,14 +206,27 @@ func runStart(cmd *cobra.Command, args []string) {
|
|||
}
|
||||
}
|
||||
|
||||
if existing != nil && existing.KubernetesConfig.ContainerRuntime == "crio" && driver.IsKIC(existing.Driver) {
|
||||
// Stop and start again if it's crio because it's broken above v1.17.3
|
||||
out.WarningT("Due to issues with CRI-O post v1.17.3, we need to restart your cluster.")
|
||||
out.WarningT("See details at https://github.com/kubernetes/minikube/issues/8861")
|
||||
stopProfile(existing.Name)
|
||||
starter, err = provisionWithDriver(cmd, ds, existing)
|
||||
if err != nil {
|
||||
exit.Error(reason.GuestProvision, "error provisioning host", err)
|
||||
if existing != nil && driver.IsKIC(existing.Driver) {
|
||||
if viper.GetBool(createMount) {
|
||||
mount := viper.GetString(mountString)
|
||||
if len(existing.ContainerVolumeMounts) != 1 || existing.ContainerVolumeMounts[0] != mount {
|
||||
exit.Message(reason.GuestMountConflict, "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'", out.V{
|
||||
"driver": existing.Driver,
|
||||
"new": mount,
|
||||
"old": existing.ContainerVolumeMounts[0],
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if existing.KubernetesConfig.ContainerRuntime == "crio" {
|
||||
// Stop and start again if it's crio because it's broken above v1.17.3
|
||||
out.WarningT("Due to issues with CRI-O post v1.17.3, we need to restart your cluster.")
|
||||
out.WarningT("See details at https://github.com/kubernetes/minikube/issues/8861")
|
||||
stopProfile(existing.Name)
|
||||
starter, err = provisionWithDriver(cmd, ds, existing)
|
||||
if err != nil {
|
||||
exit.Error(reason.GuestProvision, "error provisioning host", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -57,8 +57,10 @@ var rootCauses = []string{
|
|||
`Failed to initialize CSINodeInfo.*forbidden`,
|
||||
`Failed to admit pod`,
|
||||
`failed to "StartContainer"`,
|
||||
`Failed to start ContainerManager`,
|
||||
`kubelet.*forbidden.*cannot \w+ resource`,
|
||||
`leases.*forbidden.*cannot \w+ resource`,
|
||||
`failed to start daemon`,
|
||||
}
|
||||
|
||||
// rootCauseRe combines rootCauses into a single regex
|
||||
|
|
|
|||
|
|
@ -49,6 +49,8 @@ func TestIsProblem(t *testing.T) {
|
|||
{"regular scheduler services init", false, ` k8s.io/client-go/informers/factory.go:135: Failed to list *v1.Service: services is forbidden: User "system:kube-scheduler" cannot list resource "services" in API group "" at the cluster scope`},
|
||||
{"regular scheduler nodes init", false, `k8s.io/client-go/informers/factory.go:135: Failed to list *v1.Node: nodes is forbidden: User "system:kube-scheduler" cannot list resource "nodes" in API group "" at the cluster scope`},
|
||||
{"kubelet rbac fail", true, `k8s.io/kubernetes/pkg/kubelet/kubelet.go:526: Failed to list *v1.Node: nodes "m01" is forbidden: User "system:node:m01" cannot list resource "nodes" in API group "" at the cluster scope`},
|
||||
{"kubelet pids cgroup", true, `Failed to start ContainerManager failed to initialize top level QOS containers: failed to update top level Burstable QOS cgroup : failed to set supported cgroup subsystems for cgroup [kubepods burstable]: failed to find subsystem mount for required subsystem: pids`},
|
||||
{"docker cgroups v2 fail", true, `failed to start daemon: Devices cgroup isn't mounted`},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
|
|
|
|||
|
|
@ -409,7 +409,7 @@ func startHost(api libmachine.API, cc *config.ClusterConfig, n *config.Node, del
|
|||
|
||||
// Don't use host.Driver to avoid nil pointer deref
|
||||
drv := cc.Driver
|
||||
out.ErrT(style.Sad, `Failed to start {{.driver}} {{.driver_type}}. "{{.cmd}}" may fix it: {{.error}}`, out.V{"driver": drv, "driver_type": driver.MachineType(drv), "cmd": mustload.ExampleCmd(cc.Name, "start"), "error": err})
|
||||
out.ErrT(style.Sad, `Failed to start {{.driver}} {{.driver_type}}. Running "{{.cmd}}" may fix it: {{.error}}`, out.V{"driver": drv, "driver_type": driver.MachineType(drv), "cmd": mustload.ExampleCmd(cc.Name, "delete"), "error": err})
|
||||
return host, exists, err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -191,6 +191,25 @@ var hostIssues = []match{
|
|||
},
|
||||
Regexp: re(`Container.*is not running.*chown docker:docker`),
|
||||
},
|
||||
{
|
||||
Kind: Kind{
|
||||
ID: "HOST_PIDS_CGROUP",
|
||||
ExitCode: ExHostUnsupported,
|
||||
Advice: "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups",
|
||||
Issues: []int{6411},
|
||||
},
|
||||
Regexp: re(`failed to find subsystem mount for required subsystem: pids`),
|
||||
GOOS: []string{"linux"},
|
||||
},
|
||||
{
|
||||
Kind: Kind{
|
||||
ID: "HOST_HOME_PERMISSION",
|
||||
ExitCode: ExGuestPermission,
|
||||
Advice: "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix",
|
||||
Issues: []int{9165},
|
||||
},
|
||||
Regexp: re(`/.minikube/.*: permission denied`),
|
||||
},
|
||||
}
|
||||
|
||||
// providerIssues are failures relating to a driver provider
|
||||
|
|
@ -237,6 +256,28 @@ var providerIssues = []match{
|
|||
},
|
||||
Regexp: re(`executing "" at <index (index .NetworkSettings.Ports "22/tcp") 0>`),
|
||||
},
|
||||
{
|
||||
Kind: Kind{
|
||||
ID: "PR_DOCKER_MOUNTS_EOF",
|
||||
ExitCode: ExProviderError,
|
||||
Advice: "Reset Docker to factory defaults",
|
||||
Issues: []int{8832},
|
||||
URL: "https://docs.docker.com/docker-for-mac/#reset",
|
||||
},
|
||||
GOOS: []string{"darwin"},
|
||||
Regexp: re(`docker:.*Mounts denied: EOF`),
|
||||
},
|
||||
{
|
||||
Kind: Kind{
|
||||
ID: "PR_DOCKER_MOUNTS_EOF",
|
||||
ExitCode: ExProviderError,
|
||||
Advice: "Reset Docker to factory defaults",
|
||||
Issues: []int{8832},
|
||||
URL: "https://docs.docker.com/docker-for-windows/#reset",
|
||||
},
|
||||
GOOS: []string{"windows"},
|
||||
Regexp: re(`docker:.*Mounts denied: EOF`),
|
||||
},
|
||||
|
||||
// Hyperkit hypervisor
|
||||
{
|
||||
|
|
@ -303,6 +344,28 @@ var providerIssues = []match{
|
|||
Regexp: re(`The requested operation requires elevation.`),
|
||||
GOOS: []string{"windows"},
|
||||
},
|
||||
{
|
||||
Kind: Kind{
|
||||
ID: "PR_POWERSHELL_CONSTRAINED",
|
||||
ExitCode: ExProviderPermission,
|
||||
Advice: "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.",
|
||||
Issues: []int{7990, 6098},
|
||||
URL: "https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/",
|
||||
},
|
||||
Regexp: re(`MethodInvocationNotSupportedInConstrainedLanguage`),
|
||||
GOOS: []string{"windows"},
|
||||
},
|
||||
{
|
||||
Kind: Kind{
|
||||
ID: "PR_HYPERV_MODULE_NOT_INSTALLED",
|
||||
ExitCode: ExProviderNotFound,
|
||||
Advice: "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'",
|
||||
Issues: []int{9040},
|
||||
URL: "https://www.altaro.com/hyper-v/install-hyper-v-powershell-module/",
|
||||
},
|
||||
Regexp: re(`Hyper-V PowerShell Module is not available`),
|
||||
GOOS: []string{"windows"},
|
||||
},
|
||||
|
||||
// KVM hypervisor
|
||||
{
|
||||
|
|
@ -857,6 +920,33 @@ var guestIssues = []match{
|
|||
Regexp: re(`The process cannot access the file because it is being used by another process`),
|
||||
GOOS: []string{"windows"},
|
||||
},
|
||||
{
|
||||
Kind: Kind{
|
||||
ID: "GUEST_NOT_FOUND",
|
||||
ExitCode: ExGuestNotFound,
|
||||
Advice: "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'",
|
||||
Issues: []int{9130},
|
||||
},
|
||||
Regexp: re(`config.json: The system cannot find the file specified`),
|
||||
},
|
||||
{
|
||||
Kind: Kind{
|
||||
ID: "GUEST_SSH_CERT_NOT_FOUND",
|
||||
ExitCode: ExGuestNotFound,
|
||||
Advice: "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'",
|
||||
Issues: []int{9130},
|
||||
},
|
||||
Regexp: re(`id_rsa: no such file or directory`),
|
||||
},
|
||||
{
|
||||
Kind: Kind{
|
||||
ID: "GUEST_CONFIG_CORRUPT",
|
||||
ExitCode: ExGuestConfig,
|
||||
Advice: "The existing node configuration appears to be corrupt. Run 'minikube delete'",
|
||||
Issues: []int{9175},
|
||||
},
|
||||
Regexp: re(`configuration.*corrupt`),
|
||||
},
|
||||
}
|
||||
|
||||
// runtimeIssues are container runtime issues (containerd, docker, etc)
|
||||
|
|
@ -865,7 +955,7 @@ var runtimeIssues = []match{
|
|||
Kind: Kind{
|
||||
ID: "RT_DOCKER_RESTART",
|
||||
ExitCode: ExRuntimeError,
|
||||
Advice: "Remove the incompatible --docker-opt flag if one was provided",
|
||||
Advice: "Remove the invalid --docker-opt or --insecure-registry flag if one was provided",
|
||||
Issues: []int{7070},
|
||||
},
|
||||
Regexp: re(`systemctl -f restart docker`),
|
||||
|
|
@ -962,6 +1052,16 @@ var controlPlaneIssues = []match{
|
|||
},
|
||||
Regexp: re(`dnsDomain: Invalid`),
|
||||
},
|
||||
{
|
||||
Kind: Kind{
|
||||
ID: "K8S_INVALID_CERT_HOSTNAME",
|
||||
ExitCode: ExControlPlaneConfig,
|
||||
Advice: "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')",
|
||||
NewIssueLink: true,
|
||||
Issues: []int{9175},
|
||||
},
|
||||
Regexp: re(`apiServer.certSANs: Invalid value`),
|
||||
},
|
||||
}
|
||||
|
||||
// serviceIssues are issues with services running on top of Kubernetes
|
||||
|
|
|
|||
|
|
@ -62,6 +62,9 @@ VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component MachineWrap,
|
|||
{6109, "", "INET_DOWNLOAD_BLOCKED", `Failed to update cluster: downloading binaries: downloading kubelet: Error downloading kubelet v1.16.2: failed to download: failed to download to temp file: failed to copy contents: read tcp 192.168.0.106:61314->172.217.166.176:443: wsarecv: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.`},
|
||||
{6109, "", "INET_DOWNLOAD_BLOCKED", `Failed to update cluster: downloading binaries: downloading kubeadm: Error downloading kubeadm v1.17.0: failed to download: failed to download to temp file: failed to copy contents: read tcp [2606:a000:81c5:1e00:349a:26c0:7ea6:bbf1]:55317->[2607:f8b0:4004:815::2010]:443: wsarecv: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.`},
|
||||
{4277, "linux", "PR_KVM_MSR", `Unable to start VM: start: Error creating VM: virError(Code=1, Domain=10, Message='internal error: qemu unexpectedly closed the monitor: 2019-05-17T02:20:07.980140Z qemu-system-x86_64: error: failed to set MSR 0x38d to 0x0 qemu-system-x86_64: /build/qemu-lXHhGe/qemu-2.11+dfsg/target/i386/kvm.c:1807: kvm_put_msrs: Assertion ret == cpu->kvm_msr_buf->nmsrs failed.`},
|
||||
{8832, "macos", "PR_DOCKER_MOUNTS_EOF", `docker: Error response from daemon: Mounts denied: EOF.`},
|
||||
{9165, "", "HOST_HOME_PERMISSION", `open /Users/conradwt/.minikube/profiles/gcloud-local-dev/config.json: permission denied`},
|
||||
{9175, "", "GUEST_CONFIG_CORRUPT", " updating control plane: generating kubeadm cfg: generating extra component config for kubeadm: controlPlane configuration is corrupt: no name: {Name: IP: Port:8443 KubernetesVersion:v1.19.0 ControlPlane:true Worker:true}"},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.want, func(t *testing.T) {
|
||||
|
|
|
|||
|
|
@ -214,6 +214,7 @@ var (
|
|||
GuestDeletion = Kind{ID: "GUEST_DELETION", ExitCode: ExGuestError}
|
||||
GuestLoadHost = Kind{ID: "GUEST_LOAD_HOST", ExitCode: ExGuestError}
|
||||
GuestMount = Kind{ID: "GUEST_MOUNT", ExitCode: ExGuestError}
|
||||
GuestMountConflict = Kind{ID: "GUEST_MOUNT_CONFLICT", ExitCode: ExGuestConflict}
|
||||
GuestNodeAdd = Kind{ID: "GUEST_NODE_ADD", ExitCode: ExGuestError}
|
||||
GuestNodeDelete = Kind{ID: "GUEST_NODE_DELETE", ExitCode: ExGuestError}
|
||||
GuestNodeProvision = Kind{ID: "GUEST_NODE_PROVISION", ExitCode: ExGuestError}
|
||||
|
|
|
|||
Loading…
Reference in New Issue