Merge branch 'master' of https://github.com/kubernetes/minikube into klog
commit
ef2090ac31
37
CHANGELOG.md
37
CHANGELOG.md
|
@ -1,5 +1,42 @@
|
|||
# Release Notes
|
||||
|
||||
## Version 1.14.0-beta.0 - 2020-10-06
|
||||
|
||||
## Features
|
||||
* add dedicated network for docker driver [#9294](https://github.com/kubernetes/minikube/pull/9294)
|
||||
* Make sure gcp-auth addon can be enabled on startup [#9318](https://github.com/kubernetes/minikube/pull/9318)
|
||||
|
||||
## Bug Fixes
|
||||
* Fix minikube status bug when cluster is paused [#9383](https://github.com/kubernetes/minikube/pull/9383)
|
||||
* don't allow profile name to be less than 2 characters [#9367](https://github.com/kubernetes/minikube/pull/9367)
|
||||
* fix: "profile list" shows paused clusters as "Running" [#8978](https://github.com/kubernetes/minikube/pull/8978)
|
||||
* Fix error in unittest, as pointed out by warning [#9345](https://github.com/kubernetes/minikube/pull/9345)
|
||||
|
||||
## Updates
|
||||
* update kicbase image to ubuntu-based [#9353](https://github.com/kubernetes/minikube/pull/9353)
|
||||
|
||||
Thank you to our contributors for this release!
|
||||
- Anders F Björklund
|
||||
- Bob Killen
|
||||
- Daniel Weibel
|
||||
- Dominik Braun
|
||||
- Ilya Zuyev
|
||||
- JJ Asghar
|
||||
- Jituri, Pranav
|
||||
- Medya Ghazizadeh
|
||||
- Michael Ryan Dempsey
|
||||
- Predrag Rogic
|
||||
- Priya Wadhwa
|
||||
- Sharif Elgamal
|
||||
- Tacio Costa
|
||||
- Thomas Strömberg
|
||||
- Till Hoffmann
|
||||
- loftkun
|
||||
- programistka
|
||||
- zhanwang
|
||||
|
||||
|
||||
|
||||
## Version 1.13.1 - 2020-09-18
|
||||
* Update Default Kubernetes Version to v1.19.2 [#9265](https://github.com/kubernetes/minikube/pull/9265)
|
||||
* fix mounting for docker driver in windows [#9263](https://github.com/kubernetes/minikube/pull/9263)
|
||||
|
|
31
Makefile
31
Makefile
|
@ -14,8 +14,8 @@
|
|||
|
||||
# Bump these on release - and please check ISO_VERSION for correctness.
|
||||
VERSION_MAJOR ?= 1
|
||||
VERSION_MINOR ?= 13
|
||||
VERSION_BUILD ?= 1
|
||||
VERSION_MINOR ?= 14
|
||||
VERSION_BUILD ?= 0-beta.0
|
||||
RAW_VERSION=$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD)
|
||||
VERSION ?= v$(RAW_VERSION)
|
||||
|
||||
|
@ -23,7 +23,7 @@ KUBERNETES_VERSION ?= $(shell egrep "DefaultKubernetesVersion =" pkg/minikube/co
|
|||
KIC_VERSION ?= $(shell egrep "Version =" pkg/drivers/kic/types.go | cut -d \" -f2)
|
||||
|
||||
# Default to .0 for higher cache hit rates, as build increments typically don't require new ISO versions
|
||||
ISO_VERSION ?= v$(VERSION_MAJOR).$(VERSION_MINOR).1
|
||||
ISO_VERSION ?= v1.13.1
|
||||
# Dashes are valid in semver, but not Linux packaging. Use ~ to delimit alpha/beta
|
||||
DEB_VERSION ?= $(subst -,~,$(RAW_VERSION))
|
||||
RPM_VERSION ?= $(DEB_VERSION)
|
||||
|
@ -94,12 +94,8 @@ GVISOR_TAG ?= latest
|
|||
# storage provisioner tag to push changes to
|
||||
STORAGE_PROVISIONER_TAG ?= v3
|
||||
|
||||
# TODO: multi-arch manifest
|
||||
ifeq ($(GOARCH),amd64)
|
||||
STORAGE_PROVISIONER_IMAGE ?= $(REGISTRY)/storage-provisioner:$(STORAGE_PROVISIONER_TAG)
|
||||
else
|
||||
STORAGE_PROVISIONER_MANIFEST ?= $(REGISTRY)/storage-provisioner:$(STORAGE_PROVISIONER_TAG)
|
||||
STORAGE_PROVISIONER_IMAGE ?= $(REGISTRY)/storage-provisioner-$(GOARCH):$(STORAGE_PROVISIONER_TAG)
|
||||
endif
|
||||
|
||||
# Set the version information for the Kubernetes servers
|
||||
MINIKUBE_LDFLAGS := -X k8s.io/minikube/pkg/version.version=$(VERSION) -X k8s.io/minikube/pkg/version.isoVersion=$(ISO_VERSION) -X k8s.io/minikube/pkg/version.isoPath=$(ISO_BUCKET) -X k8s.io/minikube/pkg/version.gitCommitID=$(COMMIT) -X k8s.io/minikube/pkg/version.storageProvisionerVersion=$(STORAGE_PROVISIONER_TAG)
|
||||
|
@ -579,8 +575,11 @@ else
|
|||
endif
|
||||
|
||||
.PHONY: storage-provisioner-image
|
||||
storage-provisioner-image: out/storage-provisioner-$(GOARCH) ## Build storage-provisioner docker image
|
||||
docker build -t $(STORAGE_PROVISIONER_IMAGE) -f deploy/storage-provisioner/Dockerfile --build-arg arch=$(GOARCH) .
|
||||
storage-provisioner-image: storage-provisioner-image-$(GOARCH) ## Build storage-provisioner docker image
|
||||
docker tag $(REGISTRY)/storage-provisioner-$(GOARCH):$(STORAGE_PROVISIONER_TAG) $(REGISTRY)/storage-provisioner:$(STORAGE_PROVISIONER_TAG)
|
||||
|
||||
storage-provisioner-image-%: out/storage-provisioner-%
|
||||
docker build -t $(REGISTRY)/storage-provisioner-$*:$(STORAGE_PROVISIONER_TAG) -f deploy/storage-provisioner/Dockerfile --build-arg arch=$* .
|
||||
|
||||
.PHONY: kic-base-image
|
||||
kic-base-image: ## builds the base image used for kic.
|
||||
|
@ -601,6 +600,18 @@ push-storage-provisioner-image: storage-provisioner-image ## Push storage-provis
|
|||
docker login gcr.io/k8s-minikube
|
||||
$(MAKE) push-docker IMAGE=$(STORAGE_PROVISIONER_IMAGE)
|
||||
|
||||
ALL_ARCH = amd64 arm arm64 ppc64le s390x
|
||||
IMAGE = $(REGISTRY)/storage-provisioner
|
||||
TAG = $(STORAGE_PROVISIONER_TAG)
|
||||
|
||||
.PHONY: push-storage-provisioner-manifest
|
||||
push-storage-provisioner-manifest: $(shell echo $(ALL_ARCH) | sed -e "s~[^ ]*~storage\-provisioner\-image\-&~g")
|
||||
docker login gcr.io/k8s-minikube
|
||||
set -x; for arch in $(ALL_ARCH); do docker push ${IMAGE}-$${arch}:${TAG}; done
|
||||
docker manifest create --amend $(IMAGE):$(TAG) $(shell echo $(ALL_ARCH) | sed -e "s~[^ ]*~$(IMAGE)\-&:$(TAG)~g")
|
||||
set -x; for arch in $(ALL_ARCH); do docker manifest annotate --arch $${arch} ${IMAGE}:${TAG} ${IMAGE}-$${arch}:${TAG}; done
|
||||
docker manifest push $(STORAGE_PROVISIONER_MANIFEST)
|
||||
|
||||
.PHONY: push-docker
|
||||
push-docker: # Push docker image base on to IMAGE variable
|
||||
@docker pull $(IMAGE) && echo "Image already exist in registry" && exit 1 || echo "Image doesn't exist in registry"
|
||||
|
|
|
@ -210,7 +210,7 @@ func init() {
|
|||
klog.InitFlags(nil)
|
||||
goflag.Set("logtostderr", "false")
|
||||
goflag.Set("alsologtostderr", "false")
|
||||
goflag.Parse()
|
||||
// goflag.Parse()
|
||||
|
||||
pflag.CommandLine.AddGoFlagSet(goflag.CommandLine)
|
||||
if err := viper.BindPFlags(RootCmd.PersistentFlags()); err != nil {
|
||||
|
|
|
@ -155,7 +155,7 @@ func runStart(cmd *cobra.Command, args []string) {
|
|||
|
||||
if !config.ProfileNameValid(ClusterFlagValue()) {
|
||||
out.WarningT("Profile name '{{.name}}' is not valid", out.V{"name": ClusterFlagValue()})
|
||||
exit.Message(reason.Usage, "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.")
|
||||
exit.Message(reason.Usage, "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.")
|
||||
}
|
||||
|
||||
existing, err := config.Load(ClusterFlagValue())
|
||||
|
@ -197,7 +197,7 @@ func runStart(cmd *cobra.Command, args []string) {
|
|||
machine.MaybeDisplayAdvice(err, ds.Name)
|
||||
if specified {
|
||||
// If the user specified a driver, don't fallback to anything else
|
||||
exit.Error(reason.GuestProvision, "error provisioning host", err)
|
||||
exitGuestProvision(err)
|
||||
} else {
|
||||
success := false
|
||||
// Walk down the rest of the options
|
||||
|
@ -224,7 +224,7 @@ func runStart(cmd *cobra.Command, args []string) {
|
|||
}
|
||||
}
|
||||
if !success {
|
||||
exit.Error(reason.GuestProvision, "error provisioning host", err)
|
||||
exitGuestProvision(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -248,7 +248,7 @@ func runStart(cmd *cobra.Command, args []string) {
|
|||
stopProfile(existing.Name)
|
||||
starter, err = provisionWithDriver(cmd, ds, existing)
|
||||
if err != nil {
|
||||
exit.Error(reason.GuestProvision, "error provisioning host", err)
|
||||
exitGuestProvision(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1263,3 +1263,10 @@ func exitIfNotForced(r reason.Kind, message string, v ...out.V) {
|
|||
}
|
||||
out.Error(r, message, v...)
|
||||
}
|
||||
|
||||
func exitGuestProvision(err error) {
|
||||
if errors.Cause(err) == oci.ErrInsufficientDockerStorage {
|
||||
exit.Message(reason.RsrcInsufficientDockerStorage, "preload extraction failed: \"No space left on device\"")
|
||||
}
|
||||
exit.Error(reason.GuestProvision, "error provisioning host", err)
|
||||
}
|
||||
|
|
|
@ -107,6 +107,7 @@ const (
|
|||
forceSystemd = "force-systemd"
|
||||
kicBaseImage = "base-image"
|
||||
startOutput = "output"
|
||||
ports = "ports"
|
||||
)
|
||||
|
||||
// initMinikubeFlags includes commandline flags for minikube.
|
||||
|
@ -197,6 +198,9 @@ func initDriverFlags() {
|
|||
startCmd.Flags().String(hypervVirtualSwitch, "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)")
|
||||
startCmd.Flags().Bool(hypervUseExternalSwitch, false, "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)")
|
||||
startCmd.Flags().String(hypervExternalAdapter, "", "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)")
|
||||
|
||||
// docker & podman
|
||||
startCmd.Flags().StringSlice(ports, []string{}, "List of ports that should be exposed (docker and podman driver only)")
|
||||
}
|
||||
|
||||
// initNetworkingFlags inits the commandline flags for connectivity related flags for start
|
||||
|
@ -311,6 +315,7 @@ func generateClusterConfig(cmd *cobra.Command, existing *config.ClusterConfig, k
|
|||
HostOnlyNicType: viper.GetString(hostOnlyNicType),
|
||||
NatNicType: viper.GetString(natNicType),
|
||||
StartHostTimeout: viper.GetDuration(waitTimeout),
|
||||
ExposedPorts: viper.GetStringSlice(ports),
|
||||
KubernetesConfig: config.KubernetesConfig{
|
||||
KubernetesVersion: k8sVersion,
|
||||
ClusterName: ClusterFlagValue(),
|
||||
|
@ -547,6 +552,10 @@ func updateExistingConfigFromFlags(cmd *cobra.Command, existing *config.ClusterC
|
|||
cc.KubernetesConfig.NodePort = viper.GetInt(apiServerPort)
|
||||
}
|
||||
|
||||
if cmd.Flags().Changed(vsockPorts) {
|
||||
cc.ExposedPorts = viper.GetStringSlice(ports)
|
||||
}
|
||||
|
||||
// pre minikube 1.9.2 cc.KubernetesConfig.NodePort was not populated.
|
||||
// in minikube config there were two fields for api server port.
|
||||
// one in cc.KubernetesConfig.NodePort and one in cc.Nodes.Port
|
||||
|
|
|
@ -57,6 +57,7 @@ var (
|
|||
|
||||
const (
|
||||
// Additional legacy states:
|
||||
|
||||
// Configured means configured
|
||||
Configured = "Configured" // ~state.Saved
|
||||
// Misconfigured means misconfigured
|
||||
|
@ -67,7 +68,9 @@ const (
|
|||
Irrelevant = "Irrelevant"
|
||||
|
||||
// New status modes, based roughly on HTTP/SMTP standards
|
||||
|
||||
// 1xx signifies a transitional state. If retried, it will soon return a 2xx, 4xx, or 5xx
|
||||
|
||||
Starting = 100
|
||||
Pausing = 101
|
||||
Unpausing = 102
|
||||
|
@ -75,21 +78,29 @@ const (
|
|||
Deleting = 120
|
||||
|
||||
// 2xx signifies that the API Server is able to service requests
|
||||
|
||||
OK = 200
|
||||
Warning = 203
|
||||
|
||||
// 4xx signifies an error that requires help from the client to resolve
|
||||
|
||||
NotFound = 404
|
||||
Stopped = 405
|
||||
Paused = 418 // I'm a teapot!
|
||||
|
||||
// 5xx signifies a server-side error (that may be retryable)
|
||||
|
||||
Error = 500
|
||||
InsufficientStorage = 507
|
||||
Unknown = 520
|
||||
)
|
||||
|
||||
var (
|
||||
exitCodeToHTTPCode = map[int]int{
|
||||
// exit code 26 corresponds to insufficient storage
|
||||
26: 507,
|
||||
}
|
||||
|
||||
codeNames = map[int]string{
|
||||
100: "Starting",
|
||||
101: "Pausing",
|
||||
|
@ -442,14 +453,18 @@ func readEventLog(name string) ([]cloudevents.Event, time.Time, error) {
|
|||
|
||||
// clusterState converts Status structs into a ClusterState struct
|
||||
func clusterState(sts []*Status) ClusterState {
|
||||
sc := statusCode(sts[0].Host)
|
||||
statusName := sts[0].APIServer
|
||||
if sts[0].Host == codeNames[InsufficientStorage] {
|
||||
statusName = sts[0].Host
|
||||
}
|
||||
sc := statusCode(statusName)
|
||||
cs := ClusterState{
|
||||
BinaryVersion: version.GetVersion(),
|
||||
|
||||
BaseState: BaseState{
|
||||
Name: ClusterFlagValue(),
|
||||
StatusCode: sc,
|
||||
StatusName: sts[0].Host,
|
||||
StatusName: statusName,
|
||||
StatusDetail: codeDetails[sc],
|
||||
},
|
||||
|
||||
|
@ -533,6 +548,9 @@ func clusterState(sts []*Status) ClusterState {
|
|||
klog.Errorf("unable to convert exit code to int: %v", err)
|
||||
continue
|
||||
}
|
||||
if val, ok := exitCodeToHTTPCode[exitCode]; ok {
|
||||
exitCode = val
|
||||
}
|
||||
transientCode = exitCode
|
||||
for _, n := range cs.Nodes {
|
||||
n.StatusCode = transientCode
|
||||
|
|
|
@ -48,9 +48,8 @@ var (
|
|||
var stopCmd = &cobra.Command{
|
||||
Use: "stop",
|
||||
Short: "Stops a running local Kubernetes cluster",
|
||||
Long: `Stops a local Kubernetes cluster running in Virtualbox. This command stops the VM
|
||||
itself, leaving all files intact. The cluster can be started again with the "start" command.`,
|
||||
Run: runStop,
|
||||
Long: `Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the "start" command.`,
|
||||
Run: runStop,
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
|
|
@ -19,7 +19,6 @@ package cmd
|
|||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
|
@ -45,7 +44,7 @@ var rootCmd = &cobra.Command{
|
|||
}
|
||||
|
||||
func init() {
|
||||
flag.Parse()
|
||||
// flag.Parse()
|
||||
}
|
||||
|
||||
func validateArgs(args []string) error {
|
||||
|
|
|
@ -86,6 +86,7 @@ spec:
|
|||
metadata:
|
||||
labels:
|
||||
k8s-app: kubernetes-dashboard
|
||||
gcp-auth-skip-secret: "true"
|
||||
spec:
|
||||
containers:
|
||||
- name: kubernetes-dashboard
|
||||
|
|
|
@ -50,6 +50,8 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
name: gcp-auth-certs-create
|
||||
labels:
|
||||
gcp-auth-skip-secret: "true"
|
||||
spec:
|
||||
serviceAccountName: minikube-gcp-auth-certs
|
||||
containers:
|
||||
|
@ -77,10 +79,11 @@ spec:
|
|||
labels:
|
||||
app: gcp-auth
|
||||
kubernetes.io/minikube-addons: gcp-auth
|
||||
gcp-auth-skip-secret: "true"
|
||||
spec:
|
||||
containers:
|
||||
- name: gcp-auth
|
||||
image: gcr.io/k8s-minikube/gcp-auth-webhook:v0.0.2
|
||||
image: gcr.io/k8s-minikube/gcp-auth-webhook:v0.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- containerPort: 8443
|
||||
|
@ -109,6 +112,8 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
name: gcp-auth-certs-patch
|
||||
labels:
|
||||
gcp-auth-skip-secret: "true"
|
||||
spec:
|
||||
serviceAccountName: minikube-gcp-auth-certs
|
||||
containers:
|
||||
|
|
|
@ -20,6 +20,7 @@ metadata:
|
|||
labels:
|
||||
addonmanager.kubernetes.io/mode: Reconcile
|
||||
kubernetes.io/minikube-addons: gvisor
|
||||
gcp-auth-skip-secret: "true"
|
||||
spec:
|
||||
hostPID: true
|
||||
containers:
|
||||
|
|
|
@ -34,6 +34,7 @@ metadata:
|
|||
kubernetes.io/bootstrapping: rbac-defaults
|
||||
app.kubernetes.io/part-of: kube-system
|
||||
addonmanager.kubernetes.io/mode: Reconcile
|
||||
gcp-auth-skip-secret: "true"
|
||||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
|
|
|
@ -44,6 +44,7 @@ spec:
|
|||
app.kubernetes.io/instance: ingress-nginx
|
||||
app.kubernetes.io/component: controller
|
||||
addonmanager.kubernetes.io/mode: Reconcile
|
||||
gcp-auth-skip-secret: "true"
|
||||
spec:
|
||||
serviceAccountName: ingress-nginx
|
||||
containers:
|
||||
|
|
|
@ -95,12 +95,13 @@ metadata:
|
|||
labels:
|
||||
integration-test: storage-provisioner
|
||||
addonmanager.kubernetes.io/mode: Reconcile
|
||||
gcp-auth-skip-secret: "true"
|
||||
spec:
|
||||
serviceAccountName: storage-provisioner
|
||||
hostNetwork: true
|
||||
containers:
|
||||
- name: storage-provisioner
|
||||
image: {{default "gcr.io/k8s-minikube" .ImageRepository}}/storage-provisioner{{.ExoticArch}}:{{.StorageProvisionerVersion}}
|
||||
image: {{default "gcr.io/k8s-minikube" .ImageRepository}}/storage-provisioner:{{.StorageProvisionerVersion}}
|
||||
command: ["/storage-provisioner"]
|
||||
imagePullPolicy: IfNotPresent
|
||||
volumeMounts:
|
||||
|
|
|
@ -42,7 +42,7 @@ var (
|
|||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
// flag.Parse()
|
||||
refs, err := extensionToBoilerplate(*boilerplatedir)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
|
|
@ -67,7 +67,7 @@ if ! [[ ${VERSION_BUILD} =~ ^[0-9]+$ ]]; then
|
|||
fi
|
||||
|
||||
#echo "Updating Docker images ..."
|
||||
#make push-gvisor-addon-image push-storage-provisioner-image
|
||||
#make push-gvisor-addon-image push-storage-provisioner-manifest
|
||||
|
||||
echo "Updating latest bucket for ${VERSION} release ..."
|
||||
gsutil cp -r "gs://${BUCKET}/releases/${TAGNAME}/*" "gs://${BUCKET}/releases/latest/"
|
||||
|
|
|
@ -34,7 +34,7 @@ import (
|
|||
func main() {
|
||||
// init glog: by default, all log statements write to files in a temporary directory, also
|
||||
// flag.Parse must be called before any logging is done
|
||||
flag.Parse()
|
||||
// flag.Parse()
|
||||
_ = flag.Set("logtostderr", "true")
|
||||
|
||||
// fetch respective current stable (vDefault as DefaultKubernetesVersion) and
|
||||
|
|
|
@ -46,7 +46,7 @@ var (
|
|||
|
||||
func init() {
|
||||
flag.StringVar(&k8sVersion, "kubernetes-version", "", "desired Kubernetes version, for example `v1.17.2`")
|
||||
flag.Parse()
|
||||
// flag.Parse()
|
||||
if k8sVersion != "" {
|
||||
k8sVersions = append(k8sVersions, k8sVersion)
|
||||
}
|
||||
|
|
|
@ -78,7 +78,7 @@ func (d *Driver) Create() error {
|
|||
CPUs: strconv.Itoa(d.NodeConfig.CPU),
|
||||
Memory: strconv.Itoa(d.NodeConfig.Memory) + "mb",
|
||||
Envs: d.NodeConfig.Envs,
|
||||
ExtraArgs: []string{"--expose", fmt.Sprintf("%d", d.NodeConfig.APIServerPort)},
|
||||
ExtraArgs: append([]string{"--expose", fmt.Sprintf("%d", d.NodeConfig.APIServerPort)}, d.NodeConfig.ExtraArgs...),
|
||||
OCIBinary: d.NodeConfig.OCIBinary,
|
||||
APIServerPort: d.NodeConfig.APIServerPort,
|
||||
}
|
||||
|
@ -137,6 +137,7 @@ func (d *Driver) Create() error {
|
|||
|
||||
var waitForPreload sync.WaitGroup
|
||||
waitForPreload.Add(1)
|
||||
var pErr error
|
||||
go func() {
|
||||
defer waitForPreload.Done()
|
||||
// If preload doesn't exist, don't bother extracting tarball to volume
|
||||
|
@ -147,11 +148,18 @@ func (d *Driver) Create() error {
|
|||
klog.Infof("Starting extracting preloaded images to volume ...")
|
||||
// Extract preloaded images to container
|
||||
if err := oci.ExtractTarballToVolume(d.NodeConfig.OCIBinary, download.TarballPath(d.NodeConfig.KubernetesVersion, d.NodeConfig.ContainerRuntime), params.Name, d.NodeConfig.ImageDigest); err != nil {
|
||||
if strings.Contains(err.Error(), "No space left on device") {
|
||||
pErr = oci.ErrInsufficientDockerStorage
|
||||
return
|
||||
}
|
||||
klog.Infof("Unable to extract preloaded tarball to volume: %v", err)
|
||||
} else {
|
||||
klog.Infof("duration metric: took %f seconds to extract preloaded images to volume", time.Since(t).Seconds())
|
||||
}
|
||||
}()
|
||||
if pErr == oci.ErrInsufficientDockerStorage {
|
||||
return pErr
|
||||
}
|
||||
|
||||
if err := oci.CreateContainerNode(params); err != nil {
|
||||
return errors.Wrap(err, "create kic node")
|
||||
|
|
|
@ -48,6 +48,9 @@ var ErrExitedUnexpectedly = errors.New("container exited unexpectedly")
|
|||
// ErrDaemonInfo is thrown when docker/podman info is failing or not responding
|
||||
var ErrDaemonInfo = errors.New("daemon info not responding")
|
||||
|
||||
// ErrInsufficientDockerStorage is thrown when there is not more storage for docker
|
||||
var ErrInsufficientDockerStorage = &FailFastError{errors.New("insufficient docker storage, no space left on device")}
|
||||
|
||||
// ErrNetworkSubnetTaken is thrown when a subnet is taken by another network
|
||||
var ErrNetworkSubnetTaken = errors.New("subnet is taken")
|
||||
|
||||
|
|
|
@ -61,4 +61,5 @@ type Config struct {
|
|||
Envs map[string]string // key,value of environment variables passed to the node
|
||||
KubernetesVersion string // Kubernetes version to install
|
||||
ContainerRuntime string // container runtime kic is running
|
||||
ExtraArgs []string // a list of any extra option to pass to oci binary during creation time, for example --expose 8080...
|
||||
}
|
||||
|
|
|
@ -90,8 +90,8 @@ func ProfileNameValid(name string) bool {
|
|||
const RestrictedNamePattern = `(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])`
|
||||
|
||||
var validName = regexp.MustCompile(`^` + RestrictedNamePattern + `$`)
|
||||
|
||||
return validName.MatchString(name)
|
||||
// length needs to be more than 1 character because docker volume #9366
|
||||
return validName.MatchString(name) && len(name) > 1
|
||||
}
|
||||
|
||||
// ProfileNameInReservedKeywords checks if the profile is an internal keywords
|
||||
|
|
|
@ -80,10 +80,11 @@ func TestProfileNameValid(t *testing.T) {
|
|||
"pro-file1": true,
|
||||
"1st-profile": true,
|
||||
"1st-2nd-3rd-profile": true,
|
||||
"n": true,
|
||||
"1": true,
|
||||
"12567": true,
|
||||
"111": true,
|
||||
|
||||
"1": false,
|
||||
"n": false,
|
||||
"pro file": false,
|
||||
"pro-file-": false,
|
||||
"-profile": false,
|
||||
|
|
|
@ -71,6 +71,7 @@ type ClusterConfig struct {
|
|||
Addons map[string]bool
|
||||
VerifyComponents map[string]bool // map of components to verify and wait for after start.
|
||||
StartHostTimeout time.Duration
|
||||
ExposedPorts []string // Only used by the docker and podman driver
|
||||
}
|
||||
|
||||
// KubernetesConfig contains the parameters used to configure the VM Kubernetes.
|
||||
|
|
|
@ -413,6 +413,7 @@ func containerdImagesPreloaded(runner command.Runner, images []string) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
// ImagesPreloaded returns true if all images have been preloaded
|
||||
func (r *Containerd) ImagesPreloaded(images []string) bool {
|
||||
return containerdImagesPreloaded(r.Runner, images)
|
||||
}
|
||||
|
|
|
@ -326,6 +326,7 @@ func crioImagesPreloaded(runner command.Runner, images []string) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
// ImagesPreloaded returns true if all images have been preloaded
|
||||
func (r *CRIO) ImagesPreloaded(images []string) bool {
|
||||
return crioImagesPreloaded(r.Runner, images)
|
||||
}
|
||||
|
|
|
@ -405,6 +405,7 @@ func dockerBoundToContainerd(runner command.Runner) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
// ImagesPreloaded returns true if all images have been preloaded
|
||||
func (r *Docker) ImagesPreloaded(images []string) bool {
|
||||
return dockerImagesPreloaded(r.Runner, images)
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import (
|
|||
"k8s.io/minikube/pkg/minikube/out/register"
|
||||
)
|
||||
|
||||
// DefaultJSONOutput is a progress tracker with JSON output
|
||||
var DefaultJSONOutput getter.ProgressTracker = &jsonOutput{}
|
||||
|
||||
type jsonOutput struct {
|
||||
|
|
|
@ -112,7 +112,7 @@ func IsDocker(name string) bool {
|
|||
return name == Docker
|
||||
}
|
||||
|
||||
// IsKIC checks if the driver is a Docker for Desktop (Docker on windows or MacOs)
|
||||
// IsDockerDesktop checks if the driver is a Docker for Desktop (Docker on windows or MacOs)
|
||||
// for linux and exotic archs, this will be false
|
||||
func IsDockerDesktop(name string) bool {
|
||||
if IsDocker(name) {
|
||||
|
|
|
@ -211,7 +211,7 @@ func TestMachineName(t *testing.T) {
|
|||
{
|
||||
ClusterConfig: config.ClusterConfig{Name: "minikube",
|
||||
Nodes: []config.Node{
|
||||
config.Node{
|
||||
{
|
||||
Name: "",
|
||||
IP: "172.17.0.3",
|
||||
Port: 8443,
|
||||
|
@ -227,7 +227,7 @@ func TestMachineName(t *testing.T) {
|
|||
{
|
||||
ClusterConfig: config.ClusterConfig{Name: "p2",
|
||||
Nodes: []config.Node{
|
||||
config.Node{
|
||||
{
|
||||
Name: "",
|
||||
IP: "172.17.0.3",
|
||||
Port: 8443,
|
||||
|
@ -235,7 +235,7 @@ func TestMachineName(t *testing.T) {
|
|||
ControlPlane: true,
|
||||
Worker: true,
|
||||
},
|
||||
config.Node{
|
||||
{
|
||||
Name: "m2",
|
||||
IP: "172.17.0.4",
|
||||
Port: 0,
|
||||
|
@ -313,7 +313,7 @@ func TestIndexFromMachineNameClusterConfig(t *testing.T) {
|
|||
{
|
||||
ClusterConfig: config.ClusterConfig{Name: "minikube",
|
||||
Nodes: []config.Node{
|
||||
config.Node{
|
||||
{
|
||||
Name: "",
|
||||
IP: "172.17.0.3",
|
||||
Port: 8443,
|
||||
|
@ -329,7 +329,7 @@ func TestIndexFromMachineNameClusterConfig(t *testing.T) {
|
|||
{
|
||||
ClusterConfig: config.ClusterConfig{Name: "p2",
|
||||
Nodes: []config.Node{
|
||||
config.Node{
|
||||
{
|
||||
Name: "",
|
||||
IP: "172.17.0.3",
|
||||
Port: 8443,
|
||||
|
@ -337,7 +337,7 @@ func TestIndexFromMachineNameClusterConfig(t *testing.T) {
|
|||
ControlPlane: true,
|
||||
Worker: true,
|
||||
},
|
||||
config.Node{
|
||||
{
|
||||
Name: "m2",
|
||||
IP: "172.17.0.4",
|
||||
Port: 0,
|
||||
|
|
|
@ -383,7 +383,7 @@ func startHost(api libmachine.API, cc *config.ClusterConfig, n *config.Node, del
|
|||
}
|
||||
}
|
||||
|
||||
if _, ff := err.(*oci.FailFastError); ff {
|
||||
if err, ff := errors.Cause(err).(*oci.FailFastError); ff {
|
||||
klog.Infof("will skip retrying to create machine because error is not retriable: %v", err)
|
||||
return host, exists, err
|
||||
}
|
||||
|
|
|
@ -34,7 +34,9 @@ const (
|
|||
|
||||
var (
|
||||
outputFile io.Writer = os.Stdout
|
||||
GetUUID = randomID
|
||||
|
||||
//GetUUID returns the UUID function to use
|
||||
GetUUID = randomID
|
||||
|
||||
eventFile *os.File
|
||||
)
|
||||
|
|
|
@ -110,6 +110,7 @@ type Info struct {
|
|||
data map[string]string
|
||||
}
|
||||
|
||||
// Type returns the cloud events compatible type of this struct
|
||||
func (s *Info) Type() string {
|
||||
return "io.k8s.sigs.minikube.info"
|
||||
}
|
||||
|
@ -128,6 +129,7 @@ type Error struct {
|
|||
data map[string]string
|
||||
}
|
||||
|
||||
// NewError returns a new Error type
|
||||
func NewError(err string) *Error {
|
||||
return &Error{
|
||||
map[string]string{
|
||||
|
@ -148,6 +150,7 @@ func NewErrorExitCode(err string, exitcode int, additionalData ...map[string]str
|
|||
return e
|
||||
}
|
||||
|
||||
// Type returns the cloud events compatible type of this struct
|
||||
func (s *Error) Type() string {
|
||||
return "io.k8s.sigs.minikube.error"
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ package reason
|
|||
|
||||
const (
|
||||
// Reserved UNIX exit codes
|
||||
|
||||
ExFailure = 1 // Failure represents a general failure code
|
||||
ExInterrupted = 2 // Ctrl-C (SIGINT)
|
||||
|
||||
|
@ -56,6 +57,7 @@ const (
|
|||
// navailableOff = 9 // (~EX_UNAVAILABLE)
|
||||
|
||||
// Error codes specific to the minikube program
|
||||
|
||||
ExProgramError = 10 // generic error
|
||||
ExProgramUsage = 14 // bad command-line options
|
||||
ExProgramConflict = 11 // can't do what you want because of existing data
|
||||
|
@ -64,6 +66,7 @@ const (
|
|||
ExProgramConfig = 18 // bad configuration specified
|
||||
|
||||
// Error codes specific to resource limits (exit code layout follows no rules)
|
||||
|
||||
ExResourceError = 20
|
||||
ExInsufficientMemory = 23
|
||||
ExInsufficientStorage = 26
|
||||
|
@ -71,6 +74,7 @@ const (
|
|||
ExInsufficientCores = 29
|
||||
|
||||
// Error codes specific to the host
|
||||
|
||||
ExHostError = 30
|
||||
ExHostConflict = 31
|
||||
ExHostTimeout = 32
|
||||
|
@ -81,6 +85,7 @@ const (
|
|||
ExHostConfig = 38
|
||||
|
||||
// Error codes specific to remote networking
|
||||
|
||||
ExInternetError = 40
|
||||
ExInternetConflict = 41
|
||||
ExInternetTimeout = 42
|
||||
|
@ -89,6 +94,7 @@ const (
|
|||
ExInternetUnavailable = 49
|
||||
|
||||
// Error codes specific to the libmachine driver
|
||||
|
||||
ExDriverError = 50
|
||||
ExDriverConflict = 51
|
||||
ExDriverTimeout = 52
|
||||
|
@ -100,11 +106,14 @@ const (
|
|||
ExDriverUnavailable = 59
|
||||
|
||||
// Error codes specific to the driver provider
|
||||
|
||||
ExProviderError = 60
|
||||
ExProviderConflict = 61
|
||||
ExProviderTimeout = 62
|
||||
ExProviderNotRunning = 63
|
||||
|
||||
// Reserve 64 for the moment as it used to be usage
|
||||
|
||||
ExProviderNotFound = 65
|
||||
ExProviderUnsupported = 66
|
||||
ExProviderPermission = 67
|
||||
|
@ -112,6 +121,7 @@ const (
|
|||
ExProviderUnavailable = 69 // In common use
|
||||
|
||||
// Error codes specific to local networking
|
||||
|
||||
ExLocalNetworkError = 70
|
||||
ExLocalNetworkConflict = 71
|
||||
ExLocalNetworkTimeout = 72
|
||||
|
@ -121,6 +131,7 @@ const (
|
|||
ExLocalNetworkUnavailable = 79
|
||||
|
||||
// Error codes specific to the guest host
|
||||
|
||||
ExGuestError = 80
|
||||
ExGuestConflict = 81
|
||||
ExGuestTimeout = 82
|
||||
|
@ -132,12 +143,14 @@ const (
|
|||
ExGuestUnavailable = 89
|
||||
|
||||
// Error codes specific to the container runtime
|
||||
|
||||
ExRuntimeError = 90
|
||||
ExRuntimeNotRunning = 93
|
||||
ExRuntimeNotFound = 95
|
||||
ExRuntimeUnavailable = 99
|
||||
|
||||
// Error codes specific to the Kubernetes control plane
|
||||
|
||||
ExControlPlaneError = 100
|
||||
ExControlPlaneConflict = 101
|
||||
ExControlPlaneTimeout = 102
|
||||
|
@ -148,6 +161,7 @@ const (
|
|||
ExControlPlaneUnavailable = 109
|
||||
|
||||
// Error codes specific to a Kubernetes service
|
||||
|
||||
ExSvcError = 110
|
||||
ExSvcConflict = 111
|
||||
ExSvcTimeout = 112
|
||||
|
|
|
@ -61,6 +61,7 @@ type Kind struct {
|
|||
NoMatch bool
|
||||
}
|
||||
|
||||
// IssueURLs returns URLs for issues
|
||||
func (k *Kind) IssueURLs() []string {
|
||||
is := []string{}
|
||||
for _, i := range k.Issues {
|
||||
|
|
|
@ -60,6 +60,12 @@ func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) {
|
|||
}
|
||||
}
|
||||
|
||||
extraArgs := []string{}
|
||||
|
||||
for _, port := range cc.ExposedPorts {
|
||||
extraArgs = append(extraArgs, "-p", port)
|
||||
}
|
||||
|
||||
return kic.NewDriver(kic.Config{
|
||||
ClusterName: cc.Name,
|
||||
MachineName: driver.MachineName(cc, n),
|
||||
|
@ -72,6 +78,7 @@ func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) {
|
|||
APIServerPort: cc.Nodes[0].Port,
|
||||
KubernetesVersion: cc.KubernetesConfig.KubernetesVersion,
|
||||
ContainerRuntime: cc.KubernetesConfig.ContainerRuntime,
|
||||
ExtraArgs: extraArgs,
|
||||
}), nil
|
||||
}
|
||||
|
||||
|
|
|
@ -72,6 +72,12 @@ func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) {
|
|||
}
|
||||
}
|
||||
|
||||
extraArgs := []string{}
|
||||
|
||||
for _, port := range cc.ExposedPorts {
|
||||
extraArgs = append(extraArgs, "-p", port)
|
||||
}
|
||||
|
||||
return kic.NewDriver(kic.Config{
|
||||
ClusterName: cc.Name,
|
||||
MachineName: driver.MachineName(cc, n),
|
||||
|
@ -84,6 +90,7 @@ func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) {
|
|||
APIServerPort: cc.Nodes[0].Port,
|
||||
KubernetesVersion: cc.KubernetesConfig.KubernetesVersion,
|
||||
ContainerRuntime: cc.KubernetesConfig.ContainerRuntime,
|
||||
ExtraArgs: extraArgs,
|
||||
}), nil
|
||||
}
|
||||
|
||||
|
|
|
@ -45,6 +45,7 @@ func MakeTempDir() string {
|
|||
return localpath.MiniPath()
|
||||
}
|
||||
|
||||
// RemoveTempDir removes the temp dir
|
||||
func RemoveTempDir(tempdir string) {
|
||||
if filepath.Base(tempdir) == ".minikube" {
|
||||
tempdir = filepath.Dir(tempdir)
|
||||
|
|
|
@ -17,9 +17,18 @@ limitations under the License.
|
|||
package monitor
|
||||
|
||||
const (
|
||||
// GithubAccessTokenEnvVar is the env var name to use
|
||||
GithubAccessTokenEnvVar = "GITHUB_ACCESS_TOKEN"
|
||||
OkToTestLabel = "ok-to-test"
|
||||
GithubOwner = "kubernetes"
|
||||
GithubRepo = "minikube"
|
||||
BotName = "minikube-pr-bot"
|
||||
|
||||
// OkToTestLabel is the github label for ok-to-test
|
||||
OkToTestLabel = "ok-to-test"
|
||||
|
||||
// GithubOwner is the owner of the github repository
|
||||
GithubOwner = "kubernetes"
|
||||
|
||||
// GithubRepo is the name of the github repository
|
||||
GithubRepo = "minikube"
|
||||
|
||||
// BotName is the name of the minikube Pull Request bot
|
||||
BotName = "minikube-pr-bot"
|
||||
)
|
||||
|
|
|
@ -47,14 +47,17 @@ func CalculateSizeInMB(humanReadableSize string) (int, error) {
|
|||
return int(size / units.MiB), nil
|
||||
}
|
||||
|
||||
// ConvertMBToBytes converts MB to bytes
|
||||
func ConvertMBToBytes(mbSize int) int64 {
|
||||
return int64(mbSize) * units.MiB
|
||||
}
|
||||
|
||||
// ConvertBytesToMB converts bytes to MB
|
||||
func ConvertBytesToMB(byteSize int64) int {
|
||||
return int(ConvertUnsignedBytesToMB(uint64(byteSize)))
|
||||
}
|
||||
|
||||
// ConvertUnsignedBytesToMB converts bytes to MB
|
||||
func ConvertUnsignedBytesToMB(byteSize uint64) int64 {
|
||||
return int64(byteSize / units.MiB)
|
||||
}
|
||||
|
|
|
@ -83,6 +83,7 @@ minikube start [flags]
|
|||
--no-vtx-check Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)
|
||||
-n, --nodes int The number of nodes to spin up. Defaults to 1. (default 1)
|
||||
-o, --output string Format to print stdout in. Options include: [text,json] (default "text")
|
||||
--ports strings List of ports that should be exposed (docker and podman driver only)
|
||||
--preload If set, download tarball of preloaded images if available to improve start time. Defaults to true. (default true)
|
||||
--registry-mirror strings Registry mirrors to pass to the Docker daemon
|
||||
--service-cluster-ip-range string The CIDR to be used for service cluster IPs. (default "10.96.0.0/12")
|
||||
|
|
|
@ -11,8 +11,7 @@ Stops a running local Kubernetes cluster
|
|||
|
||||
### Synopsis
|
||||
|
||||
Stops a local Kubernetes cluster running in Virtualbox. This command stops the VM
|
||||
itself, leaving all files intact. The cluster can be started again with the "start" command.
|
||||
Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the "start" command.
|
||||
|
||||
```
|
||||
minikube stop [flags]
|
||||
|
|
|
@ -23,6 +23,10 @@ Add your manifest YAML's to the directory you have created:
|
|||
|
||||
`cp *.yaml deploy/addons/<addon name>`
|
||||
|
||||
Note: If the addon never needs authentication to GCP, then consider adding the following label to the pod's yaml:
|
||||
|
||||
`gcp-auth-skip-secret: "true"`
|
||||
|
||||
To make the addon appear in `minikube addons list`, add it to `pkg/addons/config.go`. Here is the entry used by the `registry` addon, which will work for any addon which does not require custom code:
|
||||
|
||||
```go
|
||||
|
|
|
@ -41,7 +41,7 @@ The list of outstanding items are at http://tinyurl.com/mk-tparty/daily-triage -
|
|||
The most important level of categorizing the issue is defining what type it is.
|
||||
We typically want at least one of the following labels on every issue, and some issues may fall into multiple categories:
|
||||
|
||||
- `triage/support` - The default for most incoming issues
|
||||
- `kind/support` - The default for most incoming issues
|
||||
- `kind/bug` - When it’s a bug or we aren’t delivering the best user experience
|
||||
|
||||
Other possibilities:
|
||||
|
@ -104,7 +104,7 @@ Suspected **Root cause**:
|
|||
|
||||
|
||||
## Prioritization
|
||||
If the issue is not `triage/support`, it needs a [priority label](https://github.com/kubernetes/community/blob/master/contributors/guide/issue-triage.md#define-priority):
|
||||
If the issue is not `kind/support`, it needs a [priority label](https://github.com/kubernetes/community/blob/master/contributors/guide/issue-triage.md#define-priority):
|
||||
|
||||
`priority/critical-urgent` - someones top priority ASAP, such as security issue, user-visible bug, or build breakage. Rarely used.
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ Also see [co/kvm2 open issues](https://github.com/kubernetes/minikube/labels/co%
|
|||
|
||||
### Nested Virtulization
|
||||
|
||||
If you are running KVM in a nested virtualization environment ensure your config the kernel modules correctly follow either [this](https://stafwag.github.io/blog/blog/2018/06/04/nested-virtualization-in-kvm/) or [this](VM follow to config the kernel modules. also https://computingforgeeks.com/how-to-install-kvm-virtualization-on-debian/) tutorial.
|
||||
If you are running KVM in a nested virtualization environment ensure your config the kernel modules correctly follow either [this](https://stafwag.github.io/blog/blog/2018/06/04/nested-virtualization-in-kvm/) or [this](https://computingforgeeks.com/how-to-install-kvm-virtualization-on-debian/) tutorial.
|
||||
|
||||
## Troubleshooting
|
||||
* Run `virt-host-validate` and check for the suggestions.
|
||||
|
|
|
@ -52,7 +52,7 @@ const (
|
|||
|
||||
// TestMain is the test main
|
||||
func TestMain(m *testing.M) {
|
||||
flag.Parse()
|
||||
// flag.Parse()
|
||||
setMaxParallelism()
|
||||
|
||||
start := time.Now()
|
||||
|
|
|
@ -52,7 +52,7 @@ func TestInsufficientStorage(t *testing.T) {
|
|||
}
|
||||
|
||||
// make sure 'minikube status' has correct output
|
||||
stdout := runStatusCmd(ctx, t, profile)
|
||||
stdout := runStatusCmd(ctx, t, profile, true)
|
||||
verifyClusterState(t, stdout)
|
||||
|
||||
// try deleting events.json and make sure this still works
|
||||
|
@ -60,16 +60,18 @@ func TestInsufficientStorage(t *testing.T) {
|
|||
if err := os.Remove(eventsFile); err != nil {
|
||||
t.Fatalf("removing %s", eventsFile)
|
||||
}
|
||||
stdout = runStatusCmd(ctx, t, profile)
|
||||
stdout = runStatusCmd(ctx, t, profile, true)
|
||||
verifyClusterState(t, stdout)
|
||||
}
|
||||
|
||||
// runStatusCmd runs the status command and returns stdout
|
||||
func runStatusCmd(ctx context.Context, t *testing.T, profile string) []byte {
|
||||
func runStatusCmd(ctx context.Context, t *testing.T, profile string, increaseEnv bool) []byte {
|
||||
// make sure minikube status shows insufficient storage
|
||||
c := exec.CommandContext(ctx, Target(), "status", "-p", profile, "--output=json", "--layout=cluster")
|
||||
// artificially set /var to 100% capacity
|
||||
c.Env = append(os.Environ(), fmt.Sprintf("%s=100", constants.TestDiskUsedEnv))
|
||||
if increaseEnv {
|
||||
c.Env = append(os.Environ(), fmt.Sprintf("%s=100", constants.TestDiskUsedEnv))
|
||||
}
|
||||
rr, err := Run(t, c)
|
||||
// status exits non-0 if status isn't Running
|
||||
if err == nil {
|
||||
|
@ -96,3 +98,41 @@ func verifyClusterState(t *testing.T, contents []byte) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPauseStatus(t *testing.T) {
|
||||
// run start
|
||||
profile := UniqueProfileName("pause-status")
|
||||
ctx, cancel := context.WithTimeout(context.Background(), Minutes(5))
|
||||
defer Cleanup(t, profile, cancel)
|
||||
|
||||
startArgs := []string{"start", "-p", profile, "--output=json", "--wait=true"}
|
||||
startArgs = append(startArgs, StartArgs()...)
|
||||
c := exec.CommandContext(ctx, Target(), startArgs...)
|
||||
|
||||
rr, err := Run(t, c)
|
||||
if err != nil {
|
||||
t.Fatalf("minikube start failed %v\n%v", rr.Command(), err)
|
||||
}
|
||||
|
||||
// run pause
|
||||
pauseArgs := []string{"pause", "-p", profile}
|
||||
c = exec.CommandContext(ctx, Target(), pauseArgs...)
|
||||
rr, err = Run(t, c)
|
||||
if err != nil {
|
||||
t.Fatalf("minikube pause failed %v\n%v", rr.Command(), err)
|
||||
}
|
||||
|
||||
// run status
|
||||
statusOutput := runStatusCmd(context.Background(), t, profile, false)
|
||||
var cs cmd.ClusterState
|
||||
if err := json.Unmarshal(statusOutput, &cs); err != nil {
|
||||
t.Fatalf("unmarshalling: %v", err)
|
||||
}
|
||||
// verify the status looks as we expect
|
||||
if cs.StatusCode != cmd.Paused {
|
||||
t.Fatalf("incorrect status code: %v", cs.StatusCode)
|
||||
}
|
||||
if cs.StatusName != "Paused" {
|
||||
t.Fatalf("incorrect status name: %v", cs.StatusName)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -123,7 +123,7 @@
|
|||
"Docker is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "",
|
||||
"Docker is out of disk space! (/var is at {{.p}}% of capacity)": "",
|
||||
"Docs have been saved at - {{.path}}": "Dokumentacja została zapisana w {{.path}}",
|
||||
"Documentation: {{.url}}": "Dokumentacja",
|
||||
"Documentation: {{.url}}": "Dokumentacja: {{.url}}",
|
||||
"Done! kubectl is now configured to use \"{{.name}}": "Gotowe! kubectl jest skonfigurowany do użycia z \"{{.name}}\".",
|
||||
"Done! kubectl is now configured to use \"{{.name}}\"": "Gotowe! kubectl jest skonfigurowany do użycia z \"{{.name}}\".",
|
||||
"Done! kubectl is now configured to use \"{{.name}}\" by default": "",
|
||||
|
@ -330,7 +330,7 @@
|
|||
"Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "",
|
||||
"Number of CPUs allocated to Kubernetes.": "",
|
||||
"Number of CPUs allocated to the minikube VM": "Liczba procesorów przypisana do maszyny wirtualnej minikube",
|
||||
"Number of CPUs allocated to the minikube VM.": "Liczba procesorów przypisana do maszyny wirtualnej minikube",
|
||||
"Number of CPUs allocated to the minikube VM.": "Liczba procesorów przypisana do maszyny wirtualnej minikube.",
|
||||
"Number of lines back to go within the log": "",
|
||||
"OS release is {{.pretty_name}}": "",
|
||||
"One of 'yaml' or 'json'.": "",
|
||||
|
@ -372,9 +372,9 @@
|
|||
"Print current and latest version number": "Wyświetl aktualną i najnowszą wersję",
|
||||
"Print just the version number.": "",
|
||||
"Print the version of minikube": "Wyświetl wersję minikube",
|
||||
"Print the version of minikube.": "Wyświetl wersję minikube",
|
||||
"Print the version of minikube.": "Wyświetl wersję minikube.",
|
||||
"Problems detected in {{.entry}}:": "Wykryto problem w {{.name}}",
|
||||
"Problems detected in {{.name}}:": "Wykryto problem w {{.name}}",
|
||||
"Problems detected in {{.name}}:": "Wykryto problem w {{.name}}:",
|
||||
"Profile gets or sets the current minikube profile": "Pobiera lub ustawia aktywny profil minikube",
|
||||
"Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "",
|
||||
"Profile name '{{.name}}' is not valid": "",
|
||||
|
@ -486,7 +486,7 @@
|
|||
"The \"{{.driver_name}}\" driver requires root privileges. Please run minikube using 'sudo -E minikube start --driver={{.driver_name}}'.": "",
|
||||
"The \"{{.driver_name}}\" driver requires root privileges. Please run minikube using 'sudo minikube --vm-driver={{.driver_name}}'.": "Sterownik \"{{.driver_name}}\" wymaga uprawnień root'a. Użyj 'sudo minikube --vm-driver={{.driver_name}}'",
|
||||
"The \"{{.driver_name}}\" driver should not be used with root privileges.": "",
|
||||
"The \"{{.name}}\" cluster has been deleted.": "Klaster \"{{.name}}\" został usunięty",
|
||||
"The \"{{.name}}\" cluster has been deleted.": "Klaster \"{{.name}}\" został usunięty.",
|
||||
"The 'none' driver is designed for experts who need to integrate with an existing VM": "",
|
||||
"The '{{.addonName}}' addon is enabled": "",
|
||||
"The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "",
|
||||
|
@ -799,4 +799,4 @@
|
|||
"{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.prefix}}minikube {{.version}} na {{.platform}}",
|
||||
"{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} nie jest wspierany przez system plików. I tak spróbujemy!",
|
||||
"{{.url}} is not accessible: {{.error}}": ""
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue