Merge pull request #14989 from spowelljr/socketVMNet
Implement socket_vmnet network (QEMU)pull/15070/head
commit
e961a526bc
|
@ -50,6 +50,7 @@ import (
|
|||
"k8s.io/minikube/pkg/minikube/reason"
|
||||
"k8s.io/minikube/pkg/minikube/shell"
|
||||
"k8s.io/minikube/pkg/minikube/sysinit"
|
||||
pkgnetwork "k8s.io/minikube/pkg/network"
|
||||
kconst "k8s.io/minikube/third_party/kubeadm/app/constants"
|
||||
)
|
||||
|
||||
|
@ -296,12 +297,12 @@ docker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/doc
|
|||
|
||||
d := co.CP.Host.Driver
|
||||
port := constants.DockerDaemonPort
|
||||
if driver.NeedsPortForward(driverName) && driver.IsKIC(driverName) {
|
||||
if driver.NeedsPortForward(driverName) {
|
||||
port, err = oci.ForwardedPort(driverName, cname, port)
|
||||
if err != nil {
|
||||
exit.Message(reason.DrvPortForward, "Error getting port binding for '{{.driver_name}} driver: {{.error}}", out.V{"driver_name": driverName, "error": err})
|
||||
}
|
||||
} else if driver.NeedsPortForward(driverName) && driverName == driver.QEMU2 {
|
||||
} else if driver.IsQEMU(driverName) && pkgnetwork.IsUser(co.Config.Network) {
|
||||
port = d.(*qemu.Driver).EnginePort
|
||||
}
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@ import (
|
|||
"k8s.io/minikube/pkg/minikube/service"
|
||||
"k8s.io/minikube/pkg/minikube/style"
|
||||
"k8s.io/minikube/pkg/minikube/tunnel/kic"
|
||||
pkgnetwork "k8s.io/minikube/pkg/network"
|
||||
)
|
||||
|
||||
const defaultServiceFormatTemplate = "http://{{.IP}}:{{.Port}}"
|
||||
|
@ -86,9 +87,12 @@ var serviceCmd = &cobra.Command{
|
|||
cname := ClusterFlagValue()
|
||||
co := mustload.Healthy(cname)
|
||||
|
||||
// Bail cleanly for qemu2 until implemented
|
||||
if driver.IsQEMU(co.Config.Driver) {
|
||||
exit.Message(reason.Unimplemented, "minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.")
|
||||
if driver.IsQEMU(co.Config.Driver) && pkgnetwork.IsUser(co.Config.Network) {
|
||||
msg := "minikube service is not currently implemented with the user network on QEMU"
|
||||
if runtime.GOOS == "darwin" {
|
||||
msg += ", try starting minikube with '--network=socket_vmnet'"
|
||||
}
|
||||
exit.Message(reason.Unimplemented, msg)
|
||||
}
|
||||
|
||||
var services service.URLs
|
||||
|
@ -146,10 +150,8 @@ You may select another namespace by using 'minikube service {{.service}} -n <nam
|
|||
}
|
||||
}
|
||||
|
||||
if driver.NeedsPortForward(co.Config.Driver) && driver.IsKIC(co.Config.Driver) && services != nil {
|
||||
if driver.NeedsPortForward(co.Config.Driver) && services != nil {
|
||||
startKicServiceTunnel(services, cname, co.Config.Driver)
|
||||
} else if driver.NeedsPortForward(co.Config.Driver) && driver.IsQEMU(co.Config.Driver) && services != nil {
|
||||
startQemuServiceTunnel(services, cname, co.Config.Driver)
|
||||
} else if !serviceURLMode {
|
||||
openURLs(data)
|
||||
}
|
||||
|
@ -222,9 +224,6 @@ func startKicServiceTunnel(services service.URLs, configName, driverName string)
|
|||
<-ctrlC
|
||||
}
|
||||
|
||||
func startQemuServiceTunnel(services service.URLs, configName, driverName string) {
|
||||
}
|
||||
|
||||
func mutateURLs(serviceName string, urls []string) ([]string, error) {
|
||||
formattedUrls := make([]string, 0)
|
||||
for _, rawURL := range urls {
|
||||
|
|
|
@ -18,6 +18,7 @@ package cmd
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"runtime"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
|
@ -457,6 +458,23 @@ func getCNIConfig(cmd *cobra.Command) string {
|
|||
return chosenCNI
|
||||
}
|
||||
|
||||
func getNetwork(driverName string) string {
|
||||
n := viper.GetString(network)
|
||||
if !driver.IsQEMU(driverName) {
|
||||
return n
|
||||
}
|
||||
if n == "" {
|
||||
if runtime.GOOS == "darwin" {
|
||||
out.WarningT("The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release")
|
||||
}
|
||||
n = "user"
|
||||
}
|
||||
if n == "user" && runtime.GOOS == "darwin" {
|
||||
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")
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
// generateNewConfigFromFlags generate a config.ClusterConfig based on flags
|
||||
func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, rtime string, drvName string) config.ClusterConfig {
|
||||
var cc config.ClusterConfig
|
||||
|
@ -471,8 +489,8 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, rtime str
|
|||
out.WarningT("--network flag is only valid with the docker/podman, KVM and Qemu drivers, it will be ignored")
|
||||
}
|
||||
|
||||
if driver.IsQEMU(drvName) && viper.GetString(network) == "socket" {
|
||||
out.WarningT("Using qemu with --network=socket for 'socket_vmnet' is experimental")
|
||||
if driver.IsQEMU(drvName) && viper.GetString(network) == "socket_vmnet" {
|
||||
out.WarningT("Using qemu with 'socket_vmnet' network is experimental")
|
||||
}
|
||||
|
||||
checkNumaCount(k8sVersion)
|
||||
|
@ -485,7 +503,7 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, rtime str
|
|||
EmbedCerts: viper.GetBool(embedCerts),
|
||||
MinikubeISO: viper.GetString(isoURL),
|
||||
KicBaseImage: viper.GetString(kicBaseImage),
|
||||
Network: viper.GetString(network),
|
||||
Network: getNetwork(drvName),
|
||||
Subnet: viper.GetString(subnet),
|
||||
Memory: getMemorySize(cmd, drvName),
|
||||
CPUs: getCPUCount(drvName),
|
||||
|
|
|
@ -21,6 +21,7 @@ import (
|
|||
"os"
|
||||
"os/signal"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strconv"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
@ -38,6 +39,7 @@ import (
|
|||
"k8s.io/minikube/pkg/minikube/style"
|
||||
"k8s.io/minikube/pkg/minikube/tunnel"
|
||||
"k8s.io/minikube/pkg/minikube/tunnel/kic"
|
||||
pkgnetwork "k8s.io/minikube/pkg/network"
|
||||
)
|
||||
|
||||
var cleanup bool
|
||||
|
@ -56,9 +58,12 @@ var tunnelCmd = &cobra.Command{
|
|||
cname := ClusterFlagValue()
|
||||
co := mustload.Healthy(cname)
|
||||
|
||||
// Bail cleanly for qemu2 until implemented
|
||||
if driver.IsQEMU(co.Config.Driver) {
|
||||
exit.Message(reason.Unimplemented, "minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.")
|
||||
if driver.IsQEMU(co.Config.Driver) && pkgnetwork.IsUser(co.Config.Network) {
|
||||
msg := "minikube tunnel is not currently implemented with the user network on QEMU"
|
||||
if runtime.GOOS == "darwin" {
|
||||
msg += ", try starting minikube with '--network=socket_vmnet'"
|
||||
}
|
||||
exit.Message(reason.Unimplemented, msg)
|
||||
}
|
||||
|
||||
if cleanup {
|
||||
|
@ -85,7 +90,7 @@ var tunnelCmd = &cobra.Command{
|
|||
cancel()
|
||||
}()
|
||||
|
||||
if useSSHTunnel(co.Config.Driver) {
|
||||
if driver.NeedsPortForward(co.Config.Driver) || bindAddress != "" {
|
||||
port, err := oci.ForwardedPort(co.Config.Driver, cname, 22)
|
||||
if err != nil {
|
||||
exit.Error(reason.DrvPortForward, "error getting ssh port", err)
|
||||
|
@ -111,16 +116,6 @@ var tunnelCmd = &cobra.Command{
|
|||
},
|
||||
}
|
||||
|
||||
func useSSHTunnel(driverName string) bool {
|
||||
if !driver.IsKIC(driverName) {
|
||||
return false
|
||||
}
|
||||
if driver.NeedsPortForward(driverName) {
|
||||
return true
|
||||
}
|
||||
return bindAddress != ""
|
||||
}
|
||||
|
||||
func outputTunnelStarted() {
|
||||
out.Styled(style.Success, "Tunnel successfully started")
|
||||
out.Ln("")
|
||||
|
|
|
@ -247,7 +247,7 @@ func addonSpecificChecks(cc *config.ClusterConfig, name string, enable bool, run
|
|||
}
|
||||
|
||||
if name == "registry" {
|
||||
if driver.NeedsPortForward(cc.Driver) && driver.IsKIC(cc.Driver) {
|
||||
if driver.NeedsPortForward(cc.Driver) {
|
||||
port, err := oci.ForwardedPort(cc.Driver, cc.Name, constants.RegistryAddonPort)
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "registry port")
|
||||
|
|
|
@ -51,7 +51,7 @@ func enableOrDisableAutoPause(cc *config.ClusterConfig, name, val string) error
|
|||
port := co.CP.Port // API server port
|
||||
if enable { // if enable, calculate the forwarded port
|
||||
port = constants.AutoPauseProxyPort
|
||||
if driver.NeedsPortForward(cc.Driver) && driver.IsKIC(cc.Driver) {
|
||||
if driver.NeedsPortForward(cc.Driver) {
|
||||
port, err = oci.ForwardedPort(cc.Driver, cc.Name, port)
|
||||
if err != nil {
|
||||
klog.ErrorS(err, "failed to get forwarded port for", "auto-pause port", port)
|
||||
|
|
|
@ -17,13 +17,17 @@ limitations under the License.
|
|||
package drivers
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
"syscall"
|
||||
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/docker/machine/libmachine/log"
|
||||
"github.com/docker/machine/libmachine/mcnflag"
|
||||
"github.com/docker/machine/libmachine/mcnutils"
|
||||
"github.com/docker/machine/libmachine/ssh"
|
||||
|
@ -33,6 +37,11 @@ import (
|
|||
"k8s.io/minikube/pkg/util"
|
||||
)
|
||||
|
||||
// LeasesPath is the path to dhcpd leases
|
||||
const LeasesPath = "/var/db/dhcpd_leases"
|
||||
|
||||
var leadingZeroRegexp = regexp.MustCompile(`0([A-Fa-f0-9](:|$))`)
|
||||
|
||||
// This file is for common code shared among internal machine drivers
|
||||
// Code here should not be called from within minikube
|
||||
|
||||
|
@ -147,3 +156,86 @@ func fixMachinePermissions(path string) error {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DHCPEntry holds a parsed DNS entry
|
||||
type DHCPEntry struct {
|
||||
Name string
|
||||
IPAddress string
|
||||
HWAddress string
|
||||
ID string
|
||||
Lease string
|
||||
}
|
||||
|
||||
// GetIPAddressByMACAddress gets the IP address of a MAC address
|
||||
func GetIPAddressByMACAddress(mac string) (string, error) {
|
||||
return getIPAddressFromFile(mac, LeasesPath)
|
||||
}
|
||||
|
||||
func getIPAddressFromFile(mac, path string) (string, error) {
|
||||
log.Debugf("Searching for %s in %s ...", mac, path)
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
dhcpEntries, err := parseDHCPdLeasesFile(file)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
log.Debugf("Found %d entries in %s!", len(dhcpEntries), path)
|
||||
for _, dhcpEntry := range dhcpEntries {
|
||||
log.Debugf("dhcp entry: %+v", dhcpEntry)
|
||||
if dhcpEntry.HWAddress == mac {
|
||||
log.Debugf("Found match: %s", mac)
|
||||
return dhcpEntry.IPAddress, nil
|
||||
}
|
||||
}
|
||||
return "", fmt.Errorf("could not find an IP address for %s", mac)
|
||||
}
|
||||
|
||||
func parseDHCPdLeasesFile(file io.Reader) ([]DHCPEntry, error) {
|
||||
var (
|
||||
dhcpEntry *DHCPEntry
|
||||
dhcpEntries []DHCPEntry
|
||||
)
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
line := strings.TrimSpace(scanner.Text())
|
||||
if line == "{" {
|
||||
dhcpEntry = new(DHCPEntry)
|
||||
continue
|
||||
} else if line == "}" {
|
||||
dhcpEntries = append(dhcpEntries, *dhcpEntry)
|
||||
continue
|
||||
}
|
||||
|
||||
split := strings.SplitN(line, "=", 2)
|
||||
if len(split) != 2 {
|
||||
return nil, fmt.Errorf("invalid line in dhcp leases file: %s", line)
|
||||
}
|
||||
key, val := split[0], split[1]
|
||||
switch key {
|
||||
case "name":
|
||||
dhcpEntry.Name = val
|
||||
case "ip_address":
|
||||
dhcpEntry.IPAddress = val
|
||||
case "hw_address":
|
||||
// The mac addresses have a '1,' at the start.
|
||||
dhcpEntry.HWAddress = val[2:]
|
||||
case "identifier":
|
||||
dhcpEntry.ID = val
|
||||
case "lease":
|
||||
dhcpEntry.Lease = val
|
||||
default:
|
||||
return dhcpEntries, fmt.Errorf("unable to parse line: %s", line)
|
||||
}
|
||||
}
|
||||
return dhcpEntries, scanner.Err()
|
||||
}
|
||||
|
||||
// TrimMacAddress trimming "0" of the ten's digit
|
||||
func TrimMacAddress(rawUUID string) string {
|
||||
return leadingZeroRegexp.ReplaceAllString(rawUUID, "$1")
|
||||
}
|
||||
|
|
|
@ -46,3 +46,81 @@ func Test_createDiskImage(t *testing.T) {
|
|||
t.Errorf("Disk size is %v, want %v", fi.Size(), sizeInBytes)
|
||||
}
|
||||
}
|
||||
|
||||
var validLeases = []byte(`{
|
||||
name=foo
|
||||
ip_address=1.2.3.4
|
||||
hw_address=1,a1:b2:c3:d4:e5:f6
|
||||
identifier=1,a2:b3:c4:d5:e6:f7
|
||||
lease=0x597e1267
|
||||
}
|
||||
{
|
||||
name=bar
|
||||
ip_address=192.168.64.3
|
||||
hw_address=1,a4:b5:c6:d7:e8:f9
|
||||
identifier=1,a0:b0:c0:d0:e0:f0
|
||||
lease=0x597e1267
|
||||
}
|
||||
{
|
||||
name=bar
|
||||
ip_address=192.168.64.4
|
||||
hw_address=1,a5:b6:c7:d8:e9:f1
|
||||
identifier=1,a5:b6:c7:d8:e9:f1
|
||||
lease=0x597e1268
|
||||
}`)
|
||||
|
||||
func Test_getIpAddressFromFile(t *testing.T) {
|
||||
tmpdir := tests.MakeTempDir(t)
|
||||
|
||||
dhcpFile := filepath.Join(tmpdir, "dhcp")
|
||||
if err := os.WriteFile(dhcpFile, validLeases, 0644); err != nil {
|
||||
t.Fatalf("writefile: %v", err)
|
||||
}
|
||||
|
||||
invalidFile := filepath.Join(tmpdir, "invalid")
|
||||
if err := os.WriteFile(invalidFile, []byte("foo"), 0644); err != nil {
|
||||
t.Fatalf("writefile: %v", err)
|
||||
}
|
||||
|
||||
type args struct {
|
||||
mac string
|
||||
path string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want string
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
"valid",
|
||||
args{"a1:b2:c3:d4:e5:f6", dhcpFile},
|
||||
"1.2.3.4",
|
||||
false,
|
||||
},
|
||||
{
|
||||
"duplicate",
|
||||
args{"a4:b5:c6:d7:e8:f9", dhcpFile},
|
||||
"192.168.64.3",
|
||||
false,
|
||||
},
|
||||
{
|
||||
"invalid",
|
||||
args{"a1:b2:c3:d4:e5:f6", invalidFile},
|
||||
"",
|
||||
true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got, err := getIPAddressFromFile(tt.args.mac, tt.args.path)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("getIPAddressFromFile() error = %v, wantErr %v", err, tt.wantErr)
|
||||
return
|
||||
}
|
||||
if got != tt.want {
|
||||
t.Errorf("getIPAddressFromFile() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -262,7 +262,7 @@ func (d *Driver) Start() error {
|
|||
}
|
||||
|
||||
// Need to strip 0's
|
||||
mac = trimMacAddress(mac)
|
||||
mac = pkgdrivers.TrimMacAddress(mac)
|
||||
log.Debugf("Generated MAC %s", mac)
|
||||
|
||||
log.Debugf("Starting with cmdline: %s", d.Cmdline)
|
||||
|
@ -288,7 +288,7 @@ func (d *Driver) setupIP(mac string) error {
|
|||
return fmt.Errorf("hyperkit crashed! command line:\n hyperkit %s", d.Cmdline)
|
||||
}
|
||||
|
||||
d.IPAddress, err = GetIPAddressByMACAddress(mac)
|
||||
d.IPAddress, err = pkgdrivers.GetIPAddressByMACAddress(mac)
|
||||
if err != nil {
|
||||
return &tempError{err}
|
||||
}
|
||||
|
|
|
@ -19,114 +19,20 @@ limitations under the License.
|
|||
package hyperkit
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"os"
|
||||
"os/exec"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/docker/machine/libmachine/log"
|
||||
)
|
||||
|
||||
const (
|
||||
// LeasesPath is the path to dhcpd leases
|
||||
LeasesPath = "/var/db/dhcpd_leases"
|
||||
// VMNetDomain is the domain for vmnet
|
||||
VMNetDomain = "/Library/Preferences/SystemConfiguration/com.apple.vmnet"
|
||||
// SharedNetAddrKey is the key for the network address
|
||||
SharedNetAddrKey = "Shared_Net_Address"
|
||||
)
|
||||
|
||||
var (
|
||||
leadingZeroRegexp = regexp.MustCompile(`0([A-Fa-f0-9](:|$))`)
|
||||
)
|
||||
|
||||
// DHCPEntry holds a parsed DNS entry
|
||||
type DHCPEntry struct {
|
||||
Name string
|
||||
IPAddress string
|
||||
HWAddress string
|
||||
ID string
|
||||
Lease string
|
||||
}
|
||||
|
||||
// GetIPAddressByMACAddress gets the IP address of a MAC address
|
||||
func GetIPAddressByMACAddress(mac string) (string, error) {
|
||||
return getIPAddressFromFile(mac, LeasesPath)
|
||||
}
|
||||
|
||||
func getIPAddressFromFile(mac, path string) (string, error) {
|
||||
log.Debugf("Searching for %s in %s ...", mac, path)
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
dhcpEntries, err := parseDHCPdLeasesFile(file)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
log.Debugf("Found %d entries in %s!", len(dhcpEntries), path)
|
||||
for _, dhcpEntry := range dhcpEntries {
|
||||
log.Debugf("dhcp entry: %+v", dhcpEntry)
|
||||
if dhcpEntry.HWAddress == mac {
|
||||
log.Debugf("Found match: %s", mac)
|
||||
return dhcpEntry.IPAddress, nil
|
||||
}
|
||||
}
|
||||
return "", fmt.Errorf("could not find an IP address for %s", mac)
|
||||
}
|
||||
|
||||
func parseDHCPdLeasesFile(file io.Reader) ([]DHCPEntry, error) {
|
||||
var (
|
||||
dhcpEntry *DHCPEntry
|
||||
dhcpEntries []DHCPEntry
|
||||
)
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
line := strings.TrimSpace(scanner.Text())
|
||||
if line == "{" {
|
||||
dhcpEntry = new(DHCPEntry)
|
||||
continue
|
||||
} else if line == "}" {
|
||||
dhcpEntries = append(dhcpEntries, *dhcpEntry)
|
||||
continue
|
||||
}
|
||||
|
||||
split := strings.SplitN(line, "=", 2)
|
||||
if len(split) != 2 {
|
||||
return nil, fmt.Errorf("invalid line in dhcp leases file: %s", line)
|
||||
}
|
||||
key, val := split[0], split[1]
|
||||
switch key {
|
||||
case "name":
|
||||
dhcpEntry.Name = val
|
||||
case "ip_address":
|
||||
dhcpEntry.IPAddress = val
|
||||
case "hw_address":
|
||||
// The mac addresses have a '1,' at the start.
|
||||
dhcpEntry.HWAddress = val[2:]
|
||||
case "identifier":
|
||||
dhcpEntry.ID = val
|
||||
case "lease":
|
||||
dhcpEntry.Lease = val
|
||||
default:
|
||||
return dhcpEntries, fmt.Errorf("unable to parse line: %s", line)
|
||||
}
|
||||
}
|
||||
return dhcpEntries, scanner.Err()
|
||||
}
|
||||
|
||||
// trimMacAddress trimming "0" of the ten's digit
|
||||
func trimMacAddress(rawUUID string) string {
|
||||
return leadingZeroRegexp.ReplaceAllString(rawUUID, "$1")
|
||||
}
|
||||
|
||||
// GetNetAddr gets the network address for vmnet
|
||||
func GetNetAddr() (net.IP, error) {
|
||||
plistPath := VMNetDomain + ".plist"
|
||||
|
|
|
@ -1,105 +0,0 @@
|
|||
//go:build darwin
|
||||
|
||||
/*
|
||||
Copyright 2016 The Kubernetes Authors All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package hyperkit
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"k8s.io/minikube/pkg/minikube/tests"
|
||||
)
|
||||
|
||||
var validLeases = []byte(`{
|
||||
name=foo
|
||||
ip_address=1.2.3.4
|
||||
hw_address=1,a1:b2:c3:d4:e5:f6
|
||||
identifier=1,a2:b3:c4:d5:e6:f7
|
||||
lease=0x597e1267
|
||||
}
|
||||
{
|
||||
name=bar
|
||||
ip_address=192.168.64.3
|
||||
hw_address=1,a4:b5:c6:d7:e8:f9
|
||||
identifier=1,a0:b0:c0:d0:e0:f0
|
||||
lease=0x597e1267
|
||||
}
|
||||
{
|
||||
name=bar
|
||||
ip_address=192.168.64.4
|
||||
hw_address=1,a5:b6:c7:d8:e9:f1
|
||||
identifier=1,a5:b6:c7:d8:e9:f1
|
||||
lease=0x597e1268
|
||||
}`)
|
||||
|
||||
func Test_getIpAddressFromFile(t *testing.T) {
|
||||
tmpdir := tests.MakeTempDir(t)
|
||||
|
||||
dhcpFile := filepath.Join(tmpdir, "dhcp")
|
||||
if err := os.WriteFile(dhcpFile, validLeases, 0644); err != nil {
|
||||
t.Fatalf("writefile: %v", err)
|
||||
}
|
||||
|
||||
invalidFile := filepath.Join(tmpdir, "invalid")
|
||||
if err := os.WriteFile(invalidFile, []byte("foo"), 0644); err != nil {
|
||||
t.Fatalf("writefile: %v", err)
|
||||
}
|
||||
|
||||
type args struct {
|
||||
mac string
|
||||
path string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want string
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
"valid",
|
||||
args{"a1:b2:c3:d4:e5:f6", dhcpFile},
|
||||
"1.2.3.4",
|
||||
false,
|
||||
},
|
||||
{
|
||||
"duplicate",
|
||||
args{"a4:b5:c6:d7:e8:f9", dhcpFile},
|
||||
"192.168.64.3",
|
||||
false,
|
||||
},
|
||||
{
|
||||
"invalid",
|
||||
args{"a1:b2:c3:d4:e5:f6", invalidFile},
|
||||
"",
|
||||
true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got, err := getIPAddressFromFile(tt.args.mac, tt.args.path)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("getIPAddressFromFile() error = %v, wantErr %v", err, tt.wantErr)
|
||||
return
|
||||
}
|
||||
if got != tt.want {
|
||||
t.Errorf("getIPAddressFromFile() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
|
@ -41,8 +41,6 @@ import (
|
|||
"github.com/spf13/viper"
|
||||
|
||||
pkgdrivers "k8s.io/minikube/pkg/drivers"
|
||||
"k8s.io/minikube/pkg/minikube/exit"
|
||||
"k8s.io/minikube/pkg/minikube/reason"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -58,33 +56,30 @@ type Driver struct {
|
|||
EnginePort int
|
||||
FirstQuery bool
|
||||
|
||||
Memory int
|
||||
DiskSize int
|
||||
CPU int
|
||||
Program string
|
||||
BIOS bool
|
||||
CPUType string
|
||||
MachineType string
|
||||
Firmware string
|
||||
Display bool
|
||||
DisplayType string
|
||||
Nographic bool
|
||||
VirtioDrives bool
|
||||
Network string
|
||||
PrivateNetwork string
|
||||
Boot2DockerURL string
|
||||
NetworkInterface string
|
||||
NetworkAddress string
|
||||
NetworkSocket string
|
||||
NetworkBridge string
|
||||
CaCertPath string
|
||||
PrivateKeyPath string
|
||||
DiskPath string
|
||||
CacheMode string
|
||||
IOMode string
|
||||
UserDataFile string
|
||||
CloudConfigRoot string
|
||||
LocalPorts string
|
||||
Memory int
|
||||
DiskSize int
|
||||
CPU int
|
||||
Program string
|
||||
BIOS bool
|
||||
CPUType string
|
||||
MachineType string
|
||||
Firmware string
|
||||
Display bool
|
||||
DisplayType string
|
||||
Nographic bool
|
||||
VirtioDrives bool
|
||||
Network string
|
||||
PrivateNetwork string
|
||||
Boot2DockerURL string
|
||||
CaCertPath string
|
||||
PrivateKeyPath string
|
||||
DiskPath string
|
||||
CacheMode string
|
||||
IOMode string
|
||||
UserDataFile string
|
||||
CloudConfigRoot string
|
||||
LocalPorts string
|
||||
MACAddress string
|
||||
}
|
||||
|
||||
func (d *Driver) GetMachineName() string {
|
||||
|
@ -92,7 +87,10 @@ func (d *Driver) GetMachineName() string {
|
|||
}
|
||||
|
||||
func (d *Driver) GetSSHHostname() (string, error) {
|
||||
return "localhost", nil
|
||||
if d.Network == "user" {
|
||||
return "localhost", nil
|
||||
}
|
||||
return d.IPAddress, nil
|
||||
}
|
||||
|
||||
func (d *Driver) GetSSHKeyPath() string {
|
||||
|
@ -149,7 +147,7 @@ func (d *Driver) GetIP() (string, error) {
|
|||
if d.Network == "user" {
|
||||
return "127.0.0.1", nil
|
||||
}
|
||||
return d.NetworkAddress, nil
|
||||
return d.IPAddress, nil
|
||||
}
|
||||
|
||||
func (d *Driver) GetPort() int {
|
||||
|
@ -213,7 +211,8 @@ func (d *Driver) PreCreateCheck() error {
|
|||
|
||||
func (d *Driver) Create() error {
|
||||
var err error
|
||||
if d.Network == "user" {
|
||||
switch d.Network {
|
||||
case "user":
|
||||
minPort, maxPort, err := parsePortRange(d.LocalPorts)
|
||||
log.Debugf("port range: %d -> %d", minPort, maxPort)
|
||||
if err != nil {
|
||||
|
@ -235,6 +234,11 @@ func (d *Driver) Create() error {
|
|||
}
|
||||
break
|
||||
}
|
||||
case "socket_vmnet":
|
||||
d.SSHPort, err = d.GetSSHPort()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
b2dutils := mcnutils.NewB2dUtils(d.StorePath)
|
||||
if err := b2dutils.CopyIsoToMachineDir(d.Boot2DockerURL, d.MachineName); err != nil {
|
||||
|
@ -411,23 +415,12 @@ func (d *Driver) Start() error {
|
|||
startCmd = append(startCmd,
|
||||
"-nic", fmt.Sprintf("user,model=virtio,hostfwd=tcp::%d-:22,hostfwd=tcp::%d-:2376,hostname=%s", d.SSHPort, d.EnginePort, d.GetMachineName()),
|
||||
)
|
||||
case "socket":
|
||||
// TODO: implement final socket_vmnet network flags.
|
||||
exit.Message(reason.Unimplemented, "socket_vmnet network flags are not yet implemented with the qemu2 driver.\n See https://github.com/kubernetes/minikube/pull/14890 for details.")
|
||||
case "tap":
|
||||
case "socket_vmnet":
|
||||
startCmd = append(startCmd,
|
||||
"-nic", fmt.Sprintf("tap,model=virtio,ifname=%s,script=no,downscript=no", d.NetworkInterface),
|
||||
)
|
||||
case "vde":
|
||||
startCmd = append(startCmd,
|
||||
"-nic", fmt.Sprintf("vde,model=virtio,sock=%s", d.NetworkSocket),
|
||||
)
|
||||
case "bridge":
|
||||
startCmd = append(startCmd,
|
||||
"-nic", fmt.Sprintf("bridge,model=virtio,br=%s", d.NetworkBridge),
|
||||
"-device", fmt.Sprintf("virtio-net-pci,netdev=net0,mac=%s", d.MACAddress), "-netdev", "socket,id=net0,fd=3",
|
||||
)
|
||||
default:
|
||||
log.Errorf("unknown network: %s", d.Network)
|
||||
return fmt.Errorf("unknown network: %s", d.Network)
|
||||
}
|
||||
|
||||
startCmd = append(startCmd,
|
||||
|
@ -453,7 +446,7 @@ func (d *Driver) Start() error {
|
|||
|
||||
// If socket network, start with socket_vmnet.
|
||||
startProgram := d.Program
|
||||
if d.Network == "socket" {
|
||||
if d.Network == "socket_vmnet" {
|
||||
startProgram = viper.GetString("socket-vmnet-client-path")
|
||||
socketVMnetPath := viper.GetString("socket-vmnet-path")
|
||||
startCmd = append([]string{socketVMnetPath, d.Program}, startCmd...)
|
||||
|
@ -465,9 +458,40 @@ func (d *Driver) Start() error {
|
|||
return err
|
||||
}
|
||||
|
||||
log.Infof("Waiting for VM to start (ssh -p %d docker@localhost)...", d.SSHPort)
|
||||
switch d.Network {
|
||||
case "user":
|
||||
d.IPAddress = "127.0.0.1"
|
||||
case "socket_vmnet":
|
||||
var err error
|
||||
getIP := func() error {
|
||||
// QEMU requires MAC address with leading 0s
|
||||
// But socket_vmnet writes the MAC address to the dhcp leases file with leading 0s stripped
|
||||
mac := pkgdrivers.TrimMacAddress(d.MACAddress)
|
||||
d.IPAddress, err = pkgdrivers.GetIPAddressByMACAddress(mac)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to get IP address")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
// Implement a retry loop because IP address isn't added to dhcp leases file immediately
|
||||
for i := 0; i < 30; i++ {
|
||||
log.Debugf("Attempt %d", i)
|
||||
err = getIP()
|
||||
if err == nil {
|
||||
break
|
||||
}
|
||||
time.Sleep(2 * time.Second)
|
||||
}
|
||||
|
||||
return WaitForTCPWithDelay(fmt.Sprintf("localhost:%d", d.SSHPort), time.Second)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "IP address never found in dhcp leases file")
|
||||
}
|
||||
log.Debugf("IP: %s", d.IPAddress)
|
||||
}
|
||||
|
||||
log.Infof("Waiting for VM to start (ssh -p %d docker@%s)...", d.SSHPort, d.IPAddress)
|
||||
|
||||
return WaitForTCPWithDelay(fmt.Sprintf("%s:%d", d.IPAddress, d.SSHPort), time.Second)
|
||||
}
|
||||
|
||||
func cmdOutErr(cmdStr string, args ...string) (string, string, error) {
|
||||
|
|
|
@ -58,10 +58,22 @@ func HostIP(host *host.Host, clusterName string) (net.IP, error) {
|
|||
return []byte{}, errors.Wrap(err, "Error converting VM/Host IP address to IPv4 address")
|
||||
}
|
||||
return net.IPv4(vmIP[0], vmIP[1], vmIP[2], byte(1)), nil
|
||||
case driver.QEMU2:
|
||||
return net.ParseIP("10.0.2.2"), nil
|
||||
case driver.QEMU:
|
||||
return net.ParseIP("10.0.2.2"), nil
|
||||
fallthrough
|
||||
case driver.QEMU2:
|
||||
ipString, err := host.Driver.GetIP()
|
||||
if err != nil {
|
||||
return []byte{}, errors.Wrap(err, "Error getting IP address")
|
||||
}
|
||||
// user network case
|
||||
if ipString == "127.0.0.1" {
|
||||
return net.ParseIP("10.0.2.2"), nil
|
||||
}
|
||||
ip := net.ParseIP(ipString).To4()
|
||||
if ip == nil {
|
||||
return []byte{}, errors.Wrap(err, "Error converting IP address to IPv4 address")
|
||||
}
|
||||
return ip, nil
|
||||
case driver.HyperV:
|
||||
v := reflect.ValueOf(host.Driver).Elem()
|
||||
var hypervVirtualSwitch string
|
||||
|
@ -151,9 +163,6 @@ func DriverIP(api libmachine.API, machineName string) (net.IP, error) {
|
|||
if driver.IsKIC(host.DriverName) {
|
||||
ipStr = oci.DefaultBindIPV4
|
||||
}
|
||||
if driver.IsQEMU(host.DriverName) {
|
||||
ipStr = "127.0.0.1"
|
||||
}
|
||||
ip := net.ParseIP(ipStr)
|
||||
if ip == nil {
|
||||
return nil, fmt.Errorf("parsing IP: %s", ipStr)
|
||||
|
|
|
@ -197,9 +197,6 @@ func AllowsPreload(driverName string) bool {
|
|||
|
||||
// NeedsPortForward returns true if driver is unable provide direct IP connectivity
|
||||
func NeedsPortForward(name string) bool {
|
||||
if IsQEMU(name) {
|
||||
return true
|
||||
}
|
||||
if !IsKIC(name) {
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -24,11 +24,12 @@ import (
|
|||
"k8s.io/minikube/pkg/drivers/kic/oci"
|
||||
"k8s.io/minikube/pkg/minikube/config"
|
||||
"k8s.io/minikube/pkg/minikube/constants"
|
||||
"k8s.io/minikube/pkg/network"
|
||||
)
|
||||
|
||||
// ControlPlaneEndpoint returns the location where callers can reach this cluster
|
||||
func ControlPlaneEndpoint(cc *config.ClusterConfig, cp *config.Node, driverName string) (string, net.IP, int, error) {
|
||||
if NeedsPortForward(driverName) && IsKIC(driverName) {
|
||||
if NeedsPortForward(driverName) {
|
||||
port, err := oci.ForwardedPort(cc.Driver, cc.Name, cp.Port)
|
||||
if err != nil {
|
||||
klog.Warningf("failed to get forwarded control plane port %v", err)
|
||||
|
@ -45,7 +46,7 @@ func ControlPlaneEndpoint(cc *config.ClusterConfig, cp *config.Node, driverName
|
|||
hostname = cc.KubernetesConfig.APIServerName
|
||||
}
|
||||
return hostname, ips[0], port, err
|
||||
} else if NeedsPortForward(driverName) && IsQEMU(driverName) {
|
||||
} else if IsQEMU(driverName) && network.IsUser(cc.Network) {
|
||||
return "localhost", net.IPv4(127, 0, 0, 1), cc.APIServerPort, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -64,6 +64,7 @@ import (
|
|||
"k8s.io/minikube/pkg/minikube/registry"
|
||||
"k8s.io/minikube/pkg/minikube/style"
|
||||
"k8s.io/minikube/pkg/minikube/vmpath"
|
||||
"k8s.io/minikube/pkg/network"
|
||||
"k8s.io/minikube/pkg/util"
|
||||
"k8s.io/minikube/pkg/util/retry"
|
||||
kconst "k8s.io/minikube/third_party/kubeadm/app/constants"
|
||||
|
@ -561,7 +562,7 @@ func startMachine(cfg *config.ClusterConfig, node *config.Node, delOnFail bool)
|
|||
return runner, preExists, m, host, errors.Wrap(err, "Failed to validate network")
|
||||
}
|
||||
|
||||
if driver.IsQEMU(host.Driver.DriverName()) {
|
||||
if driver.IsQEMU(host.Driver.DriverName()) && network.IsUser(cfg.Network) {
|
||||
apiServerPort, err := getPort()
|
||||
if err != nil {
|
||||
return runner, preExists, m, host, errors.Wrap(err, "Failed to find apiserver port")
|
||||
|
@ -664,7 +665,7 @@ func validateNetwork(h *host.Host, r command.Runner, imageRepository string, kub
|
|||
}
|
||||
}
|
||||
|
||||
if !driver.BareMetal(h.Driver.DriverName()) && !driver.IsKIC(h.Driver.DriverName()) && !driver.IsQEMU(h.Driver.DriverName()) {
|
||||
if shouldTrySSH(h.Driver.DriverName(), ip) {
|
||||
if err := trySSH(h, ip); err != nil {
|
||||
return ip, err
|
||||
}
|
||||
|
@ -675,6 +676,17 @@ func validateNetwork(h *host.Host, r command.Runner, imageRepository string, kub
|
|||
return ip, nil
|
||||
}
|
||||
|
||||
func shouldTrySSH(driverName, ip string) bool {
|
||||
if driver.BareMetal(driverName) || driver.IsKIC(driverName) {
|
||||
return false
|
||||
}
|
||||
// QEMU with user network
|
||||
if driver.IsQEMU(driverName) && ip == "127.0.0.1" {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func trySSH(h *host.Host, ip string) error {
|
||||
if viper.GetBool("force") {
|
||||
return nil
|
||||
|
|
|
@ -17,6 +17,7 @@ limitations under the License.
|
|||
package qemu2
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
|
@ -158,10 +159,9 @@ func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
qemuNetwork := cc.Network
|
||||
if qemuNetwork == "" {
|
||||
qemuNetwork = "user"
|
||||
// TODO: on next minor release, default to "socket".
|
||||
mac, err := generateMACAddress()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("generating MAC address: %v", err)
|
||||
}
|
||||
|
||||
return qemu.Driver{
|
||||
|
@ -183,9 +183,10 @@ func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) {
|
|||
CPUType: qemuCPU,
|
||||
Firmware: qemuFirmware,
|
||||
VirtioDrives: false,
|
||||
Network: qemuNetwork,
|
||||
Network: cc.Network,
|
||||
CacheMode: "default",
|
||||
IOMode: "threads",
|
||||
MACAddress: mac,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -210,3 +211,14 @@ func status() registry.State {
|
|||
|
||||
return registry.State{Installed: true, Healthy: true, Running: true}
|
||||
}
|
||||
|
||||
func generateMACAddress() (string, error) {
|
||||
buf := make([]byte, 6)
|
||||
if _, err := rand.Read(buf); err != nil {
|
||||
return "", err
|
||||
}
|
||||
// Set local bit, ensure unicast address, socket_vmnet doesn't support multicast
|
||||
buf[0] = (buf[0] | 2) & 0xfe
|
||||
mac := fmt.Sprintf("%02x:%02x:%02x:%02x:%02x:%02x", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5])
|
||||
return mac, nil
|
||||
}
|
||||
|
|
|
@ -218,6 +218,11 @@ func isSubnetPrivate(subnet string) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
// IsUser returns if network is user.
|
||||
func IsUser(network string) bool {
|
||||
return network == "user"
|
||||
}
|
||||
|
||||
// FreeSubnet will try to find free private network beginning with startSubnet, incrementing it in steps up to number of tries.
|
||||
func FreeSubnet(startSubnet string, step, tries int) (*Parameters, error) {
|
||||
for try := 0; try < tries; try++ {
|
||||
|
|
|
@ -29,6 +29,34 @@ minikube start supports some qemu specific flags:
|
|||
* Note: while the flag should override the config, if the flag does not take effect try running `minikube delete`.
|
||||
* MacPorts: if you are installing [minikube](https://ports.macports.org/port/minikube/) and [qemu](https://ports.macports.org/port/qemu/) via MacPorts on a Mac with M1, use the following flag: `--qemu-firmware-path=/opt/local/share/qemu/edk2-aarch64-code.fd`
|
||||
|
||||
## Networking
|
||||
|
||||
The QEMU driver has two networking options, `user` & `socket_vmnet`.
|
||||
|
||||
{{% tabs %}}
|
||||
{{% tab "user - limited functionality" %}}
|
||||
The `user` network is not a dedicated network, it doesn't support some networking commands such as `minikube service` and `minikube tunnel`, and its IP address is not reachable from the host.
|
||||
{{% /tab %}}
|
||||
{{% tab "socket_vmnet - experimental/needs installation" %}}
|
||||
##### Requirements
|
||||
|
||||
Requires macOS 10.15 or later and socket_vmnet.
|
||||
|
||||
[lima-vm/socket_vmnet](https://github.com/lima-vm/socket_vmnet) install instructions:
|
||||
```shell
|
||||
git clone https://github.com/lima-vm/socket_vmnet.git && cd socket_vmnet
|
||||
sudo make PREFIX=/opt/socket_vmnet install
|
||||
```
|
||||
|
||||
##### Usage
|
||||
```shell
|
||||
minikube start --driver qemu --network socket_vmnet
|
||||
```
|
||||
|
||||
The `socket_vmnet` network is a dedicated network and supports the `minikube service` and `minikube tunnel` commands.
|
||||
{{% /tab %}}
|
||||
{{% /tabs %}}
|
||||
|
||||
## Known Issues
|
||||
|
||||
### 1. Start stuck with `user` network on corp machine or custom DNS
|
||||
|
|
|
@ -689,6 +689,7 @@
|
|||
"The control plane node must be running for this command": "Der Kontroll-Ebenen-Node muss für diesen Befehl laufen",
|
||||
"The cri socket path to be used": "Der zu verwendende Cri-Socket-Pfad",
|
||||
"The cri socket path to be used.": "Der zu verwendende Cri-Socket-Pfad.",
|
||||
"The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release": "",
|
||||
"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/",
|
||||
"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.",
|
||||
"The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "Der Treiber '{{.driver}}' wird auf {{.os}}/{{.arch}} nicht unterstützt",
|
||||
|
@ -848,7 +849,7 @@
|
|||
"Using image repository {{.name}}": "Verwenden des Image-Repositorys {{.name}}",
|
||||
"Using image {{.registry}}{{.image}}": "Verwende Image {{.registry}}{{.image}}",
|
||||
"Using image {{.registry}}{{.image}} (global image repository)": "Verwende das Image {{.registry}}{{.image}} (globale Image Repository)",
|
||||
"Using qemu with --network=socket for 'socket_vmnet' is experimental": "",
|
||||
"Using qemu with 'socket_vmnet' network is experimental": "",
|
||||
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "",
|
||||
"Using rootless driver was required, but the current driver does not seem rootless": "",
|
||||
"Using rootless {{.driver_name}} driver": "",
|
||||
|
@ -882,6 +883,7 @@
|
|||
"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",
|
||||
"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}})",
|
||||
"You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "",
|
||||
"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": "",
|
||||
"You can create one using 'minikube start'.\n\t\t": "Sie können einen mit 'minikube start' erstellen.\n\t\t",
|
||||
"You can delete them using the following command(s): ": "Sie können diese mit dem folgenden Befehl/den folgenden Befehlen löschen:",
|
||||
"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",
|
||||
|
@ -973,10 +975,10 @@
|
|||
"minikube profile was successfully set to {{.profile_name}}": "Minikube Profil wurde erfolgreich gesetzt auf {{.profile_name}}",
|
||||
"minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "Minikube provisioniert und managed lokale Kubernetes Cluster optimiert für Entwicklungs-Workflows.",
|
||||
"minikube quickly sets up a local Kubernetes cluster": "Minikube installiert schnell einen lokalen Kubernetes Cluster",
|
||||
"minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube service is not currently implemented with the user network on QEMU": "",
|
||||
"minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "Minikube überspringt diverse Validierungen wenn --force angegeben ist; das könnte zu unerwartetem Verhalten führen",
|
||||
"minikube status --output OUTPUT. json, text": "",
|
||||
"minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube tunnel is not currently implemented with the user network on QEMU": "",
|
||||
"minikube {{.version}} is available! Download it: {{.url}}": "Minikube {{.version}} ist verfügbar. Lade es herunter: {{.url}}",
|
||||
"mkcmp is used to compare performance of two minikube binaries": "mkcmp wird verwendet um die Performance von zwei Minikube Binaries zu vergleichen",
|
||||
"mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "Das Argument \"{{.value}}\" für Mount muss in der Form \u003cQuell Verzeichnis\u003e:\u003cZiel Verzeichnis\u003e",
|
||||
|
@ -1000,7 +1002,6 @@
|
|||
"scheduled stop is not supported on the none driver, skipping scheduling": "Das geplante Stoppen wird von none Treiber nicht unterstützt, überspringe Planung",
|
||||
"service {{.namespace_name}}/{{.service_name}} has no node port": "Service {{.namespace_name}}/{{.service_name}} hat keinen Node Port",
|
||||
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
|
||||
"socket_vmnet network flags are not yet implemented with the qemu2 driver.\n See https://github.com/kubernetes/minikube/pull/14890 for details.": "",
|
||||
"stat failed": "state Fehler",
|
||||
"status json failure": "Status json Fehler",
|
||||
"status text failure": "Status text Fehler",
|
||||
|
|
|
@ -690,6 +690,7 @@
|
|||
"The control plane node must be running for this command": "",
|
||||
"The cri socket path to be used": "La ruta del socket de cri",
|
||||
"The cri socket path to be used.": "",
|
||||
"The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release": "",
|
||||
"The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "",
|
||||
"The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "",
|
||||
"The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "El controlador \"{{.driver}}\" no se puede utilizar en {{.os}}/{{.arch}}",
|
||||
|
@ -849,7 +850,7 @@
|
|||
"Using image repository {{.name}}": "Utilizando el repositorio de imágenes {{.name}}",
|
||||
"Using image {{.registry}}{{.image}}": "",
|
||||
"Using image {{.registry}}{{.image}} (global image repository)": "",
|
||||
"Using qemu with --network=socket for 'socket_vmnet' is experimental": "",
|
||||
"Using qemu with 'socket_vmnet' network is experimental": "",
|
||||
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "",
|
||||
"Using rootless driver was required, but the current driver does not seem rootless": "",
|
||||
"Using rootless {{.driver_name}} driver": "",
|
||||
|
@ -882,6 +883,7 @@
|
|||
"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",
|
||||
"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": "",
|
||||
"You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "",
|
||||
"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": "",
|
||||
"You can create one using 'minikube start'.\n\t\t": "",
|
||||
"You can delete them using the following command(s): ": "",
|
||||
"You can force an unsupported Kubernetes version via the --force flag": "",
|
||||
|
@ -968,10 +970,10 @@
|
|||
"minikube profile was successfully set to {{.profile_name}}": "",
|
||||
"minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "",
|
||||
"minikube quickly sets up a local Kubernetes cluster": "",
|
||||
"minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube service is not currently implemented with the user network on QEMU": "",
|
||||
"minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "",
|
||||
"minikube status --output OUTPUT. json, text": "",
|
||||
"minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube tunnel is not currently implemented with the user network on QEMU": "",
|
||||
"minikube {{.version}} is available! Download it: {{.url}}": "",
|
||||
"mkcmp is used to compare performance of two minikube binaries": "",
|
||||
"mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "",
|
||||
|
@ -994,7 +996,6 @@
|
|||
"scheduled stop is not supported on the none driver, skipping scheduling": "",
|
||||
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
|
||||
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
|
||||
"socket_vmnet network flags are not yet implemented with the qemu2 driver.\n See https://github.com/kubernetes/minikube/pull/14890 for details.": "",
|
||||
"stat failed": "",
|
||||
"status json failure": "",
|
||||
"status text failure": "",
|
||||
|
|
|
@ -668,6 +668,7 @@
|
|||
"The control plane node is not running (state={{.state}})": "Le nœud du plan de contrôle n'est pas en cours d'exécution (state={{.state}})",
|
||||
"The control plane node must be running for this command": "Le nœud du plan de contrôle doit être en cours d'exécution pour cette commande",
|
||||
"The cri socket path to be used.": "Le chemin de socket cri à utiliser.",
|
||||
"The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release": "",
|
||||
"The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "La commande docker-env est incompatible avec les clusters multi-nœuds. Utilisez le module 'registry' : https://minikube.sigs.k8s.io/docs/handbook/registry/",
|
||||
"The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "La commande docker-env n'est compatible qu'avec le runtime \"docker\", mais ce cluster a été configuré pour utiliser le runtime \"{{.runtime}}\".",
|
||||
"The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "Le pilote \"{{.driver}}\" n'est pas compatible avec {{.os}}/{{.arch}}.",
|
||||
|
@ -820,6 +821,7 @@
|
|||
"Using image repository {{.name}}": "Utilisation du dépôt d'images {{.name}}…",
|
||||
"Using image {{.registry}}{{.image}}": "Utilisation de l'image {{.registry}}{{.image}}",
|
||||
"Using image {{.registry}}{{.image}} (global image repository)": "Utilisation de l'image {{.registry}}{{.image}} (référentiel d'images global)",
|
||||
"Using qemu with 'socket_vmnet' network is experimental": "",
|
||||
"Using qemu with --network=socket for 'socket_vmnet' is experimental": "L'utilisation de qemu avec --network=socket pour 'socket_vmnet' est expérimentale",
|
||||
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "L'utilisation du pilote Docker sans root était nécessaire, mais le Docker actuel ne semble pas sans root. Essayez 'docker context use rootless' .",
|
||||
"Using rootless driver was required, but the current driver does not seem rootless": "L'utilisation d'un pilote sans root était nécessaire, mais le pilote actuel ne semble pas sans root",
|
||||
|
@ -851,6 +853,7 @@
|
|||
"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": "Vous essayez d'exécuter un binaire Windows .exe dans WSL. Pour une meilleure intégration, veuillez utiliser un binaire Linux à la place (Télécharger sur https://minikube.sigs.k8s.io/docs/start/.). Sinon, si vous voulez toujours le faire, vous pouvez le faire en utilisant --force",
|
||||
"You are trying to run amd64 binary on M1 system. Please consider running darwin/arm64 binary instead (Download at {{.url}}.)": "Vous essayez d'exécuter le binaire amd64 sur le système M1. Veuillez utiliser le binaire darwin/arm64 à la place (télécharger sur {{.url}}.)",
|
||||
"You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "Vous essayez d'exécuter le binaire amd64 sur un système M1.\nVeuillez envisager d'exécuter le binaire darwin/arm64 à la place.\nTéléchargez sur {{.url}}",
|
||||
"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": "",
|
||||
"You can create one using 'minikube start'.\n\t\t": "Vous pouvez en créer un en utilisant 'minikube start'.\n\t\t",
|
||||
"You can delete them using the following command(s): ": "Vous pouvez les supprimer à l'aide de la ou des commandes suivantes :",
|
||||
"You can force an unsupported Kubernetes version via the --force flag": "Vous pouvez forcer une version Kubernetes non prise en charge via l'indicateur --force",
|
||||
|
@ -944,9 +947,11 @@
|
|||
"minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube provisionne et gère des clusters Kubernetes locaux optimisés pour les workflows de développement.",
|
||||
"minikube quickly sets up a local Kubernetes cluster": "minikube configure rapidement un cluster Kubernetes local",
|
||||
"minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "Le service minikube n'est actuellement pas implémenté avec le pilote qemu2. Voir https://github.com/kubernetes/minikube/issues/14146 pour plus de détails.",
|
||||
"minikube service is not currently implemented with the user network on QEMU": "",
|
||||
"minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "minikube ignore diverses validations lorsque --force est fourni ; cela peut conduire à un comportement inattendu",
|
||||
"minikube status --output OUTPUT. json, text": "état minikube --sortie SORTIE. json, texte",
|
||||
"minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "Le tunnel minikube n'est actuellement pas implémenté avec le pilote qemu2. Voir https://github.com/kubernetes/minikube/issues/14146 pour plus de détails.",
|
||||
"minikube tunnel is not currently implemented with the user network on QEMU": "",
|
||||
"minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} est disponible ! Téléchargez-le ici : {{.url}}",
|
||||
"mkcmp is used to compare performance of two minikube binaries": "mkcmp est utilisé pour comparer les performances de deux binaires minikube",
|
||||
"mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "argument de montage \"{{.value}}\" doit être de la forme : \u003cdossier source\u003e:\u003cdossier de destination\u003e",
|
||||
|
@ -969,7 +974,6 @@
|
|||
"scheduled stop is not supported on the none driver, skipping scheduling": "l'arrêt programmé n'est pas pris en charge sur le pilote none, programmation non prise en compte",
|
||||
"service {{.namespace_name}}/{{.service_name}} has no node port": "le service {{.namespace_name}}/{{.service_name}} n'a pas de port de nœud",
|
||||
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "définit l'adresse de liaison du tunnel, vide ou '*' indique que le tunnel doit être disponible pour toutes les interfaces",
|
||||
"socket_vmnet network flags are not yet implemented with the qemu2 driver.\n See https://github.com/kubernetes/minikube/pull/14890 for details.": "Les indicateurs de réseau socket_vmnet ne sont pas encore implémentés avec le pilote qemu2.\n Voir https://github.com/kubernetes/minikube/pull/14890 pour plus de détails.",
|
||||
"stat failed": "stat en échec",
|
||||
"status json failure": "état du JSON en échec",
|
||||
"status text failure": "état du texte en échec",
|
||||
|
|
|
@ -641,6 +641,7 @@
|
|||
"The control plane node is not running (state={{.state}})": "コントロールプレーンノードは実行中ではありません (state={{.state}})",
|
||||
"The control plane node must be running for this command": "このコマンドではコントロールプレーンノードが実行中でなければなりません",
|
||||
"The cri socket path to be used.": "使用される CRI ソケットパス。",
|
||||
"The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release": "",
|
||||
"The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "docker-env コマンドはマルチノードクラスターと互換性がありません。'registry' アドオンを使用してください: https://minikube.sigs.k8s.io/docs/handbook/registry/",
|
||||
"The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "docker-env コマンドは「docker」ランタイムとだけ互換性がありますが、このクラスターは「{{.runtime}}」ランタイムを使用するよう設定されています。",
|
||||
"The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "'{{.driver}}' ドライバーは {{.os}}/{{.arch}} に対応していません",
|
||||
|
@ -788,7 +789,7 @@
|
|||
"Using image repository {{.name}}": "{{.name}} イメージリポジトリーを使用しています",
|
||||
"Using image {{.registry}}{{.image}}": "{{.registry}}{{.image}} イメージを使用しています",
|
||||
"Using image {{.registry}}{{.image}} (global image repository)": "{{.registry}}{{.image}} イメージ (グローバルイメージリポジトリー) を使用しています",
|
||||
"Using qemu with --network=socket for 'socket_vmnet' is experimental": "",
|
||||
"Using qemu with 'socket_vmnet' network is experimental": "",
|
||||
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "rootless Docker ドライバー使用が必要でしたが、現在の Docker は rootless が必要ないようです。'docker context use rootless' を試してみてください。",
|
||||
"Using rootless driver was required, but the current driver does not seem rootless": "rootless ドライバー使用が必要でしたが、現在のドライバーは rootless が必要ないようです",
|
||||
"Using rootless {{.driver_name}} driver": "rootless {{.driver_name}} ドライバー使用",
|
||||
|
@ -818,6 +819,7 @@
|
|||
"You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "プロキシーを使用しようとしていますが、minikube の IP ({{.ip_address}}) が NO_PROXY 環境変数に含まれていません。",
|
||||
"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": "WSL 内で Windows の .exe バイナリーを実行しようとしています。これより優れた統合として、Linux バイナリーを代わりに使用してください (https://minikube.sigs.k8s.io/docs/start/ でダウンロードしてください)。そうではなく、引き続きこのバイナリーを使用したい場合、--force オプションを使用してください",
|
||||
"You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "M1 システム上で amd64 バイナリーを実行しようとしています。\ndarwin/arm64 バイナリーを代わりに実行することをご検討ください。\n{{.url}} でダウンロードしてください。",
|
||||
"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": "",
|
||||
"You can create one using 'minikube start'.\n\t\t": "'minikube start' を使って新しいものを作成できます。\n\t\t",
|
||||
"You can delete them using the following command(s): ": "次のコマンドで削除できます: ",
|
||||
"You can force an unsupported Kubernetes version via the --force flag": "--force フラグを介して、サポート外の Kubernetes バージョンを強制的に使用できます",
|
||||
|
@ -905,9 +907,11 @@
|
|||
"minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube は、開発ワークフロー用に最適化されたローカル Kubernetes クラスターを構築・管理します。",
|
||||
"minikube quickly sets up a local Kubernetes cluster": "minikube はローカル Kubernetes クラスターを迅速にセットアップします",
|
||||
"minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "minikube サービスは現在、qemu2 ドライバーでは実装されていません。詳細については、https://github.com/kubernetes/minikube/issues/14146 を参照してください。",
|
||||
"minikube service is not currently implemented with the user network on QEMU": "",
|
||||
"minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "minikube は --force が付与された場合、様々な検証をスキップします (これは予期せぬ挙動を引き起こすかも知れません)",
|
||||
"minikube status --output OUTPUT. json, text": "minikube status --output OUTPUT. json, text",
|
||||
"minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "minikube トンネルは現在、qemu2 ドライバーでは実装されていません。 詳細については、https://github.com/kubernetes/minikube/issues/14146 を参照してください。",
|
||||
"minikube tunnel is not currently implemented with the user network on QEMU": "",
|
||||
"minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} が利用可能です!次の URL からダウンロードしてください: {{.url}}",
|
||||
"mkcmp is used to compare performance of two minikube binaries": "mkcmp で 2 つの minikube のバイナリーのパフォーマンスを比較できます",
|
||||
"mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "マウント引数「{{.value}}」は次の形式でなければなりません: \u003cソースディレクトリー\u003e:\u003cターゲットディレクトリー\u003e",
|
||||
|
@ -930,7 +934,6 @@
|
|||
"scheduled stop is not supported on the none driver, skipping scheduling": "none ドライバーでは予定停止がサポートされていません (予約をスキップします)",
|
||||
"service {{.namespace_name}}/{{.service_name}} has no node port": "サービス {{.namespace_name}}/{{.service_name}} は NodePort がありません",
|
||||
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "トンネル バインド アドレスを設定します。空または '*' は、トンネルがすべてのインターフェイスで使用可能であることを示します",
|
||||
"socket_vmnet network flags are not yet implemented with the qemu2 driver.\n See https://github.com/kubernetes/minikube/pull/14890 for details.": "",
|
||||
"stat failed": "stat に失敗しました",
|
||||
"status json failure": "status json に失敗しました",
|
||||
"status text failure": "status text に失敗しました",
|
||||
|
|
|
@ -695,6 +695,7 @@
|
|||
"The control plane node is not running (state={{.state}})": "컨트롤 플레인 노드가 실행 상태가 아닙니다 (상태={{.state}})",
|
||||
"The control plane node must be running for this command": "컨트롤 플레인 노드는 실행 상태여야 합니다",
|
||||
"The cri socket path to be used.": "",
|
||||
"The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release": "",
|
||||
"The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "",
|
||||
"The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "",
|
||||
"The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "",
|
||||
|
@ -848,7 +849,7 @@
|
|||
"Using image repository {{.name}}": "",
|
||||
"Using image {{.registry}}{{.image}}": "",
|
||||
"Using image {{.registry}}{{.image}} (global image repository)": "",
|
||||
"Using qemu with --network=socket for 'socket_vmnet' is experimental": "",
|
||||
"Using qemu with 'socket_vmnet' network is experimental": "",
|
||||
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "",
|
||||
"Using rootless driver was required, but the current driver does not seem rootless": "",
|
||||
"Using rootless {{.driver_name}} driver": "",
|
||||
|
@ -879,6 +880,7 @@
|
|||
"You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "",
|
||||
"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": "",
|
||||
"You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "",
|
||||
"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": "",
|
||||
"You can also use 'minikube kubectl -- get pods' to invoke a matching version": "맞는 버전의 kubectl 을 사용하기 위해서는 다음과 같이 사용 가능합니다. minikube kubectl -- get pods'",
|
||||
"You can create one using 'minikube start'.\n\t\t": "",
|
||||
"You can delete them using the following command(s):": "다음 명령어(들)을 사용하여 제거할 수 있습니다",
|
||||
|
@ -976,10 +978,10 @@
|
|||
"minikube profile was successfully set to {{.profile_name}}": "",
|
||||
"minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube는 개발 워크플로우에 최적화된 로컬 쿠버네티스를 제공하고 관리합니다.",
|
||||
"minikube quickly sets up a local Kubernetes cluster": "",
|
||||
"minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube service is not currently implemented with the user network on QEMU": "",
|
||||
"minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "",
|
||||
"minikube status --output OUTPUT. json, text": "",
|
||||
"minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube tunnel is not currently implemented with the user network on QEMU": "",
|
||||
"minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} 이 사용가능합니다! 다음 경로에서 다운받으세요: {{.url}}",
|
||||
"mkcmp is used to compare performance of two minikube binaries": "",
|
||||
"mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "",
|
||||
|
@ -1002,7 +1004,6 @@
|
|||
"scheduled stop is not supported on the none driver, skipping scheduling": "",
|
||||
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
|
||||
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
|
||||
"socket_vmnet network flags are not yet implemented with the qemu2 driver.\n See https://github.com/kubernetes/minikube/pull/14890 for details.": "",
|
||||
"stat failed": "",
|
||||
"status json failure": "",
|
||||
"status text failure": "",
|
||||
|
|
|
@ -702,6 +702,7 @@
|
|||
"The control plane node is not running (state={{.state}})": "",
|
||||
"The control plane node must be running for this command": "",
|
||||
"The cri socket path to be used.": "",
|
||||
"The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release": "",
|
||||
"The docker service is currently not active": "Serwis docker jest nieaktywny",
|
||||
"The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "",
|
||||
"The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "",
|
||||
|
@ -858,7 +859,7 @@
|
|||
"Using image repository {{.name}}": "",
|
||||
"Using image {{.registry}}{{.image}}": "",
|
||||
"Using image {{.registry}}{{.image}} (global image repository)": "",
|
||||
"Using qemu with --network=socket for 'socket_vmnet' is experimental": "",
|
||||
"Using qemu with 'socket_vmnet' network is experimental": "",
|
||||
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "",
|
||||
"Using rootless driver was required, but the current driver does not seem rootless": "",
|
||||
"Using rootless {{.driver_name}} driver": "",
|
||||
|
@ -893,6 +894,7 @@
|
|||
"You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "",
|
||||
"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": "",
|
||||
"You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "",
|
||||
"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": "",
|
||||
"You can create one using 'minikube start'.\n\t\t": "",
|
||||
"You can delete them using the following command(s): ": "",
|
||||
"You can force an unsupported Kubernetes version via the --force flag": "",
|
||||
|
@ -981,10 +983,10 @@
|
|||
"minikube profile was successfully set to {{.profile_name}}": "profil minikube został z powodzeniem zmieniony na: {{.profile_name}}",
|
||||
"minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube dostarcza lokalne klastry Kubernetesa zoptymalizowane do celów rozwoju oprogramowania oraz zarządza nimi",
|
||||
"minikube quickly sets up a local Kubernetes cluster": "minikube szybko inicjalizuje lokalny klaster Kubernetesa",
|
||||
"minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube service is not currently implemented with the user network on QEMU": "",
|
||||
"minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "użycie flagi --force sprawia, że minikube pomija pewne walidacje, co może skutkować niespodziewanym zachowaniem",
|
||||
"minikube status --output OUTPUT. json, text": "",
|
||||
"minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube tunnel is not currently implemented with the user network on QEMU": "",
|
||||
"minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} jest dostępne! Pobierz je z: {{.url}}",
|
||||
"mkcmp is used to compare performance of two minikube binaries": "",
|
||||
"mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "",
|
||||
|
@ -1007,7 +1009,6 @@
|
|||
"scheduled stop is not supported on the none driver, skipping scheduling": "",
|
||||
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
|
||||
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
|
||||
"socket_vmnet network flags are not yet implemented with the qemu2 driver.\n See https://github.com/kubernetes/minikube/pull/14890 for details.": "",
|
||||
"stat failed": "wykonanie komendy stat nie powiodło się",
|
||||
"status json failure": "",
|
||||
"status text failure": "",
|
||||
|
|
|
@ -637,6 +637,7 @@
|
|||
"The control plane node is not running (state={{.state}})": "",
|
||||
"The control plane node must be running for this command": "",
|
||||
"The cri socket path to be used.": "",
|
||||
"The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release": "",
|
||||
"The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "",
|
||||
"The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "",
|
||||
"The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "",
|
||||
|
@ -784,7 +785,7 @@
|
|||
"Using image repository {{.name}}": "",
|
||||
"Using image {{.registry}}{{.image}}": "Используется образ {{.registry}}{{.image}}",
|
||||
"Using image {{.registry}}{{.image}} (global image repository)": "",
|
||||
"Using qemu with --network=socket for 'socket_vmnet' is experimental": "",
|
||||
"Using qemu with 'socket_vmnet' network is experimental": "",
|
||||
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "",
|
||||
"Using rootless driver was required, but the current driver does not seem rootless": "",
|
||||
"Using rootless {{.driver_name}} driver": "",
|
||||
|
@ -814,6 +815,7 @@
|
|||
"You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "",
|
||||
"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": "",
|
||||
"You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "",
|
||||
"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": "",
|
||||
"You can create one using 'minikube start'.\n\t\t": "",
|
||||
"You can delete them using the following command(s): ": "",
|
||||
"You can force an unsupported Kubernetes version via the --force flag": "",
|
||||
|
@ -900,10 +902,10 @@
|
|||
"minikube profile was successfully set to {{.profile_name}}": "",
|
||||
"minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "",
|
||||
"minikube quickly sets up a local Kubernetes cluster": "",
|
||||
"minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube service is not currently implemented with the user network on QEMU": "",
|
||||
"minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "",
|
||||
"minikube status --output OUTPUT. json, text": "",
|
||||
"minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube tunnel is not currently implemented with the user network on QEMU": "",
|
||||
"minikube {{.version}} is available! Download it: {{.url}}": "",
|
||||
"mkcmp is used to compare performance of two minikube binaries": "",
|
||||
"mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "",
|
||||
|
@ -926,7 +928,6 @@
|
|||
"scheduled stop is not supported on the none driver, skipping scheduling": "",
|
||||
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
|
||||
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
|
||||
"socket_vmnet network flags are not yet implemented with the qemu2 driver.\n See https://github.com/kubernetes/minikube/pull/14890 for details.": "",
|
||||
"stat failed": "",
|
||||
"status json failure": "",
|
||||
"status text failure": "",
|
||||
|
|
|
@ -637,6 +637,7 @@
|
|||
"The control plane node is not running (state={{.state}})": "",
|
||||
"The control plane node must be running for this command": "",
|
||||
"The cri socket path to be used.": "",
|
||||
"The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release": "",
|
||||
"The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "",
|
||||
"The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "",
|
||||
"The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "",
|
||||
|
@ -784,7 +785,7 @@
|
|||
"Using image repository {{.name}}": "",
|
||||
"Using image {{.registry}}{{.image}}": "",
|
||||
"Using image {{.registry}}{{.image}} (global image repository)": "",
|
||||
"Using qemu with --network=socket for 'socket_vmnet' is experimental": "",
|
||||
"Using qemu with 'socket_vmnet' network is experimental": "",
|
||||
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "",
|
||||
"Using rootless driver was required, but the current driver does not seem rootless": "",
|
||||
"Using rootless {{.driver_name}} driver": "",
|
||||
|
@ -814,6 +815,7 @@
|
|||
"You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "",
|
||||
"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": "",
|
||||
"You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "",
|
||||
"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": "",
|
||||
"You can create one using 'minikube start'.\n\t\t": "",
|
||||
"You can delete them using the following command(s): ": "",
|
||||
"You can force an unsupported Kubernetes version via the --force flag": "",
|
||||
|
@ -900,10 +902,10 @@
|
|||
"minikube profile was successfully set to {{.profile_name}}": "",
|
||||
"minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "",
|
||||
"minikube quickly sets up a local Kubernetes cluster": "",
|
||||
"minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube service is not currently implemented with the user network on QEMU": "",
|
||||
"minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "",
|
||||
"minikube status --output OUTPUT. json, text": "",
|
||||
"minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube tunnel is not currently implemented with the user network on QEMU": "",
|
||||
"minikube {{.version}} is available! Download it: {{.url}}": "",
|
||||
"mkcmp is used to compare performance of two minikube binaries": "",
|
||||
"mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "",
|
||||
|
@ -926,7 +928,6 @@
|
|||
"scheduled stop is not supported on the none driver, skipping scheduling": "",
|
||||
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
|
||||
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
|
||||
"socket_vmnet network flags are not yet implemented with the qemu2 driver.\n See https://github.com/kubernetes/minikube/pull/14890 for details.": "",
|
||||
"stat failed": "",
|
||||
"status json failure": "",
|
||||
"status text failure": "",
|
||||
|
|
|
@ -793,6 +793,7 @@
|
|||
"The control plane node must be running for this command": "",
|
||||
"The cri socket path to be used": "需要使用的 cri 套接字路径",
|
||||
"The cri socket path to be used.": "",
|
||||
"The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release": "",
|
||||
"The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "",
|
||||
"The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "",
|
||||
"The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "{{.os}} 不支持驱动程序“{{.driver}}/{{.arch}}”",
|
||||
|
@ -959,7 +960,7 @@
|
|||
"Using image repository {{.name}}": "正在使用镜像存储库 {{.name}}",
|
||||
"Using image {{.registry}}{{.image}}": "",
|
||||
"Using image {{.registry}}{{.image}} (global image repository)": "",
|
||||
"Using qemu with --network=socket for 'socket_vmnet' is experimental": "",
|
||||
"Using qemu with 'socket_vmnet' network is experimental": "",
|
||||
"Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "",
|
||||
"Using rootless driver was required, but the current driver does not seem rootless": "",
|
||||
"Using rootless {{.driver_name}} driver": "",
|
||||
|
@ -1001,6 +1002,7 @@
|
|||
"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": "您似乎正在使用代理,但您的 NO_PROXY 环境不包含 minikube IP ({{.ip_address}})。如需了解详情,请参阅 {{.documentation_url}}",
|
||||
"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": "",
|
||||
"You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "",
|
||||
"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": "",
|
||||
"You can create one using 'minikube start'.\n\t\t": "",
|
||||
"You can delete them using the following command(s): ": "",
|
||||
"You can force an unsupported Kubernetes version via the --force flag": "",
|
||||
|
@ -1091,10 +1093,10 @@
|
|||
"minikube profile was successfully set to {{.profile_name}}": "",
|
||||
"minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "",
|
||||
"minikube quickly sets up a local Kubernetes cluster": "",
|
||||
"minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube service is not currently implemented with the user network on QEMU": "",
|
||||
"minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "",
|
||||
"minikube status --output OUTPUT. json, text": "",
|
||||
"minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "",
|
||||
"minikube tunnel is not currently implemented with the user network on QEMU": "",
|
||||
"minikube {{.version}} is available! Download it: {{.url}}": "",
|
||||
"mkcmp is used to compare performance of two minikube binaries": "mkcmp 用于对比两个 minikube 二进制的性能",
|
||||
"mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "",
|
||||
|
@ -1118,7 +1120,6 @@
|
|||
"scheduled stop is not supported on the none driver, skipping scheduling": "",
|
||||
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
|
||||
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
|
||||
"socket_vmnet network flags are not yet implemented with the qemu2 driver.\n See https://github.com/kubernetes/minikube/pull/14890 for details.": "",
|
||||
"stat failed": "",
|
||||
"status json failure": "",
|
||||
"status text failure": "",
|
||||
|
|
Loading…
Reference in New Issue