Skip to content

Commit 8bd593b

Browse files
authored
Merge pull request #15266 from spowelljr/detectSocket
Auto select network on QEMU
2 parents ea8fd6c + bb07f18 commit 8bd593b

File tree

14 files changed

+119
-35
lines changed

14 files changed

+119
-35
lines changed

cmd/minikube/cmd/start_flags.go

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -463,14 +463,31 @@ func getNetwork(driverName string) string {
463463
if !driver.IsQEMU(driverName) {
464464
return n
465465
}
466-
if n == "" {
467-
if runtime.GOOS == "darwin" {
468-
out.WarningT("The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release")
466+
switch n {
467+
case "socket_vmnet":
468+
if runtime.GOOS != "darwin" {
469+
exit.Message(reason.Usage, "The socket_vmnet network is only supported on macOS")
470+
}
471+
if !detect.SocketVMNetInstalled() {
472+
exit.Message(reason.NotFoundSocketVMNet, "\n\n")
473+
}
474+
case "":
475+
if detect.SocketVMNetInstalled() {
476+
n = "socket_vmnet"
477+
} else {
478+
n = "user"
469479
}
470-
n = "user"
480+
out.Styled(style.Internet, "Automatically selected the {{.network}} network", out.V{"network": n})
481+
case "user":
482+
default:
483+
exit.Message(reason.Usage, "--network with QEMU must be 'user' or 'socket_vmnet'")
471484
}
472-
if n == "user" && runtime.GOOS == "darwin" {
473-
out.WarningT("You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` & `minikube tunnel` commands.\nTo try the experimental dedicated network see: https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking")
485+
if n == "user" {
486+
msg := "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` & `minikube tunnel` commands."
487+
if runtime.GOOS == "darwin" {
488+
msg += "\nTo try the experimental dedicated network see: https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking"
489+
}
490+
out.WarningT(msg)
474491
}
475492
return n
476493
}
@@ -489,10 +506,6 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, rtime str
489506
out.WarningT("--network flag is only valid with the docker/podman, KVM and Qemu drivers, it will be ignored")
490507
}
491508

492-
if driver.IsQEMU(drvName) && viper.GetString(network) == "socket_vmnet" {
493-
out.WarningT("Using qemu with 'socket_vmnet' network is experimental")
494-
}
495-
496509
checkNumaCount(k8sVersion)
497510

498511
checkExtraDiskOptions(cmd, drvName)

pkg/minikube/detect/detect.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package detect
1818

1919
import (
20+
"errors"
2021
"net/http"
2122
"os"
2223
"os/exec"
@@ -25,7 +26,9 @@ import (
2526
"strings"
2627

2728
"github.com/klauspost/cpuid"
29+
"github.com/spf13/viper"
2830
"golang.org/x/sys/cpu"
31+
"k8s.io/klog/v2"
2932
"k8s.io/minikube/pkg/minikube/localpath"
3033
)
3134

@@ -129,3 +132,18 @@ func KICCacheDir() string {
129132
func ISOCacheDir() string {
130133
return filepath.Join(localpath.MakeMiniPath("cache", "iso"), runtime.GOARCH)
131134
}
135+
136+
// SocketVMNetInstalled returns if socket_vmnet is installed
137+
func SocketVMNetInstalled() bool {
138+
if runtime.GOOS != "darwin" {
139+
return false
140+
}
141+
_, err := os.Stat(viper.GetString("socket-vmnet-path"))
142+
if err == nil {
143+
return true
144+
}
145+
if !errors.Is(err, os.ErrNotExist) {
146+
klog.Warningf("failed to check for socket_vmnet: %v", err)
147+
}
148+
return false
149+
}

pkg/minikube/reason/reason.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,4 +483,18 @@ var (
483483
https://docs.docker.com/engine/install/`),
484484
Style: style.Docker,
485485
}
486+
NotFoundSocketVMNet = Kind{
487+
ID: "NOT_FOUND_SOCKET_VMNET",
488+
ExitCode: ExProgramNotFound,
489+
Advice: translate.T(`socket_vmnet was not found on the system, resolve by:
490+
491+
Option 1) Installing socket_vmnet:
492+
493+
https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking
494+
495+
Option 2) Using the user network:
496+
497+
minikube start{{.profile}} --driver qemu --network user`),
498+
Style: style.SeeNoEvil,
499+
}
486500
)

site/content/en/docs/contrib/errorcodes.en.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,8 @@ minikube was unable to safely downgrade installed Kubernetes version
443443

444444
"NOT_FOUND_DOCKERD" (Exit code ExProgramNotFound)
445445

446+
"NOT_FOUND_SOCKET_VMNET" (Exit code ExProgramNotFound)
447+
446448
## Error Codes
447449

448450

site/content/en/docs/drivers/qemu.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,23 @@ When using the `user` network (default) the guest uses **only** the first `names
6565

6666
##### Workarounds:
6767
1. If possible, reorder your `/etc/resolv.conf` to have a general `nameserver` entry first (eg. `8.8.8.8`) and reboot your machine.
68-
2. (Coming soon) Use `--network=socket_vmnet`
68+
2. Use `--network=socket_vmnet`
69+
70+
### 2. `/var/db/dhcpd_leases` errors
71+
72+
If you're seeing errors related to `/var/db/dhcpd_leases` we recommend the following:
73+
1. Uninstall `socket_vmnet`:
74+
```shell
75+
cd socket_vmnet
76+
sudo make uninstll
77+
sudo rm /var/run/socket_vmnet
78+
```
79+
2. Reboot
80+
3. Reinsitall `socket_vmnet`:
81+
```shell
82+
cd socket_vmnet
83+
sudo make install
84+
```
6985

7086
[Full list of open 'qemu' driver issues](https://github.com/kubernetes/minikube/labels/co%2Fqemu-driver)
7187

translations/de.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"--kvm-numa-count range is 1-8": "Der Wertebereich für --kvm-numa-count ist 1-8",
2424
"--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "Der Parameter --network kann nur mit dem docker/podman und den KVM Treibern verwendet werden, er wird ignoriert werden",
2525
"--network flag is only valid with the docker/podman, KVM and Qemu drivers, it will be ignored": "",
26+
"--network with QEMU must be 'user' or 'socket_vmnet'": "",
2627
"1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) Erstellen Sie den Cluster mit Kubernetes {{.new}} neu, indem Sie folgende Befehle ausführen:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Erstellen Sie einen zweiten Cluster mit Kubernetes {{.new}}, indem Sie folgende Befehle ausführen:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Verwenden Sie den existierenden Cluster mit Version {{.old}} von Kubernetes, indem Sie folgende Befehle ausführen:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t",
2728
"1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Klicken Sie auf das \"Docker für Desktop\" Menu Icon\n\t\t\t2. Klicken Sie auf \"Einstellungen\"\n\t\t\t3. Klicken Sie auf \"Resourcen\"\n\t\t\t4. Erhöhen Sie den Wert von \"CPUs\" auf 2 oder mehr\n\t\t\t5. Klicken Sie auf \"Anwenden \u0026 Neustarten\"",
2829
"1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Klicken Sie auf das \"Docker für Desktop\" Menu Icon\n\t\t\t2. Klicken Sie auf \"Einstellungen\"\n\t\t\t3. Klicken Sie auf \"Resourcen\"\n\t\t\t4. Erhöhen Sie den Wert von \"Speicher\" auf {{.recommend}} oder mehr\n\t\t\t5. Klicken Sie auf \"Anwenden \u0026 Neustarten\"",
@@ -72,6 +73,7 @@
7273
"Auto-pause is already enabled.": "",
7374
"Automatically selected the {{.driver}} driver": "Treiber {{.driver}} wurde automatisch ausgewählt",
7475
"Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "Treiber {{.driver}} wurde automatisch ausgewählt. Andere Möglichkeiten: {{.alternates}}",
76+
"Automatically selected the {{.network}} network": "",
7577
"Available Commands": "Verfügbare Befehle",
7678
"Basic Commands:": "Grundlegende Befehle:",
7779
"Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Weil Sie einen Docker Treiber auf {{.operating_system}} verwenden, muss das Terminal während des Ausführens offen bleiben.",
@@ -694,7 +696,6 @@
694696
"The control plane node must be running for this command": "Der Kontroll-Ebenen-Node muss für diesen Befehl laufen",
695697
"The cri socket path to be used": "Der zu verwendende Cri-Socket-Pfad",
696698
"The cri socket path to be used.": "Der zu verwendende Cri-Socket-Pfad.",
697-
"The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release": "",
698699
"The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "Der docker-env Befehl ist inkompatibel mit multi-node Clustern. Bitte verwende das 'registry' Addon: https://minikube.sigs.k8s.io/docs/handbook/registry/",
699700
"The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "Der docker-env Befehl ist nur mit der \"Docker\" Laufzeitsumgebung kompatibel, aber dieser Cluster ist für die\"{{.runtime}}\" Laufzeitumgebung konfiguriert.",
700701
"The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "Der Treiber '{{.driver}}' wird auf {{.os}}/{{.arch}} nicht unterstützt",
@@ -738,6 +739,7 @@
738739
"The service namespace": "Der Namespace des Service",
739740
"The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "Der Service/Ingress {{.resource}} benötigt, dass priviligierte Ports verwendet werden können: {{.ports}}",
740741
"The services namespace": "Der Namespace des Service",
742+
"The socket_vmnet network is only supported on macOS": "",
741743
"The time interval for each check that wait performs in seconds": "Der Zeitintervall für jeden Check, den wait ausführt, in Sekunden",
742744
"The value passed to --format is invalid": "Der mit --format angegebene Wert ist ungültig",
743745
"The value passed to --format is invalid: {{.error}}": "Der mit --format angegebene Wert ist ungültig: {{.error}}",
@@ -854,7 +856,6 @@
854856
"Using image repository {{.name}}": "Verwenden des Image-Repositorys {{.name}}",
855857
"Using image {{.registry}}{{.image}}": "Verwende Image {{.registry}}{{.image}}",
856858
"Using image {{.registry}}{{.image}} (global image repository)": "Verwende das Image {{.registry}}{{.image}} (globale Image Repository)",
857-
"Using qemu with 'socket_vmnet' network is experimental": "",
858859
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "",
859860
"Using rootless driver was required, but the current driver does not seem rootless": "",
860861
"Using rootless {{.driver_name}} driver": "",
@@ -888,7 +889,7 @@
888889
"You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "Sie versuchen eine Windows .exe Binärdatei innerhalb von WSL auszuführen. Bitte verwenden Sie stattdessen eine Linux Binärdatei für eine bessere Integration (Download-Möglichkeit: https://minikube.sigs.k8s.io/docs/start/.). Alternativ, wenn Sie dies wirklich möchten, können Sie dies mit --force erzwingen",
889890
"You are trying to run amd64 binary on M1 system. Please consider running darwin/arm64 binary instead (Download at {{.url}}.)": "Sie versuchen ein amd64-Binärformat auf einem M1 System auszuführen. Bitte erwägen Sie eine darwin/amd64 Binärdatei stattdessen zu verwenden (Download-Möglichkeit: {{.url}})",
890891
"You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "",
891-
"You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.\nTo try the experimental dedicated network see: https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking": "",
892+
"You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "",
892893
"You can create one using 'minikube start'.\n\t\t": "Sie können einen mit 'minikube start' erstellen.\n\t\t",
893894
"You can delete them using the following command(s): ": "Sie können diese mit dem folgenden Befehl/den folgenden Befehlen löschen:",
894895
"You can force an unsupported Kubernetes version via the --force flag": "Sie können das Verwenden einer nicht unterstützten Kubernetes Version mit dem --force Parameter erzwingen",
@@ -1010,6 +1011,7 @@
10101011
"scheduled stop is not supported on the none driver, skipping scheduling": "Das geplante Stoppen wird von none Treiber nicht unterstützt, überspringe Planung",
10111012
"service {{.namespace_name}}/{{.service_name}} has no node port": "Service {{.namespace_name}}/{{.service_name}} hat keinen Node Port",
10121013
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
1014+
"socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "",
10131015
"stat failed": "state Fehler",
10141016
"status json failure": "Status json Fehler",
10151017
"status text failure": "Status text Fehler",

translations/es.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"--kvm-numa-count range is 1-8": "--kvm-numa-count el rango es 1-8",
2525
"--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "el flag --network es válido solamente con docker/podman y KVM, será ignorado",
2626
"--network flag is only valid with the docker/podman, KVM and Qemu drivers, it will be ignored": "",
27+
"--network with QEMU must be 'user' or 'socket_vmnet'": "",
2728
"1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "",
2829
"1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "",
2930
"1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "",
@@ -74,6 +75,7 @@
7475
"Auto-pause is already enabled.": "",
7576
"Automatically selected the {{.driver}} driver": "Controlador {{.driver}} seleccionado automáticamente",
7677
"Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "Controlador {{.driver}} seleccionado automáticamente. Otras opciones: {{.alternates}}",
78+
"Automatically selected the {{.network}} network": "",
7779
"Available Commands": "Comandos disponibles",
7880
"Basic Commands:": "Comandos basicos:",
7981
"Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Porque estás usando controlador Docker en {{.operating_system}}, la terminal debe abrirse para ejecutarlo.",
@@ -695,7 +697,6 @@
695697
"The control plane node must be running for this command": "",
696698
"The cri socket path to be used": "La ruta del socket de cri",
697699
"The cri socket path to be used.": "",
698-
"The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release": "",
699700
"The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "",
700701
"The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "",
701702
"The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "El controlador \"{{.driver}}\" no se puede utilizar en {{.os}}/{{.arch}}",
@@ -739,6 +740,7 @@
739740
"The service namespace": "",
740741
"The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "",
741742
"The services namespace": "",
743+
"The socket_vmnet network is only supported on macOS": "",
742744
"The time interval for each check that wait performs in seconds": "",
743745
"The value passed to --format is invalid": "",
744746
"The value passed to --format is invalid: {{.error}}": "",
@@ -855,7 +857,6 @@
855857
"Using image repository {{.name}}": "Utilizando el repositorio de imágenes {{.name}}",
856858
"Using image {{.registry}}{{.image}}": "",
857859
"Using image {{.registry}}{{.image}} (global image repository)": "",
858-
"Using qemu with 'socket_vmnet' network is experimental": "",
859860
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "",
860861
"Using rootless driver was required, but the current driver does not seem rootless": "",
861862
"Using rootless {{.driver_name}} driver": "",
@@ -888,7 +889,7 @@
888889
"You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see {{.documentation_url}} for more details": "Parece que estás usando un proxy, pero tu entorno NO_PROXY no incluye la dirección IP de minikube ({{.ip_address}}). Consulta {{.documentation_url}} para obtener más información",
889890
"You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "",
890891
"You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "",
891-
"You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.\nTo try the experimental dedicated network see: https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking": "",
892+
"You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "",
892893
"You can create one using 'minikube start'.\n\t\t": "",
893894
"You can delete them using the following command(s): ": "",
894895
"You can force an unsupported Kubernetes version via the --force flag": "",
@@ -1004,6 +1005,7 @@
10041005
"scheduled stop is not supported on the none driver, skipping scheduling": "",
10051006
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
10061007
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
1008+
"socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "",
10071009
"stat failed": "",
10081010
"status json failure": "",
10091011
"status text failure": "",

0 commit comments

Comments
 (0)