Merge branch 'master' into DELETE_ALL_PROFILES
commit
1efdf11abb
|
@ -0,0 +1,8 @@
|
|||
<!-- 🎉 Thank you for contributing to minikube! 🎉 Here are some hints to get your PR merged faster:
|
||||
|
||||
1. Your PR title will be included in the release notes, choose it carefully
|
||||
2. If the PR fixes an issue, add "fixes #<issue number>" to the description.
|
||||
3. If the PR is a user interface change, please include a "before" and "after" example.
|
||||
4. If the PR is a large design change, please include an enhancement proposal:
|
||||
https://github.com/kubernetes/minikube/tree/master/enhancements
|
||||
-->
|
|
@ -326,7 +326,7 @@ func runStart(cmd *cobra.Command, args []string) {
|
|||
mRunner, preExists, machineAPI, host := startMachine(&config)
|
||||
defer machineAPI.Close()
|
||||
// configure the runtime (docker, containerd, crio)
|
||||
cr := configureRuntimes(mRunner, driver)
|
||||
cr := configureRuntimes(mRunner, driver, config.KubernetesConfig)
|
||||
showVersionInfo(k8sVersion, cr)
|
||||
waitCacheImages(&cacheGroup)
|
||||
|
||||
|
@ -556,9 +556,8 @@ func selectImageRepository(mirrorCountry string, k8sVersion string) (bool, strin
|
|||
}
|
||||
|
||||
checkRepository := func(repo string) error {
|
||||
podInfraContainerImage, _ := images.CachedImages(repo, k8sVersion)
|
||||
|
||||
ref, err := name.ParseReference(podInfraContainerImage, name.WeakValidation)
|
||||
pauseImage := images.PauseImage(repo, k8sVersion)
|
||||
ref, err := name.ParseReference(pauseImage, name.WeakValidation)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -1011,8 +1010,8 @@ func setupKubeAdm(mAPI libmachine.API, kc cfg.KubernetesConfig) bootstrapper.Boo
|
|||
}
|
||||
|
||||
// configureRuntimes does what needs to happen to get a runtime going.
|
||||
func configureRuntimes(runner cruntime.CommandRunner, driver string) cruntime.Manager {
|
||||
config := cruntime.Config{Type: viper.GetString(containerRuntime), Runner: runner}
|
||||
func configureRuntimes(runner cruntime.CommandRunner, driver string, k8s cfg.KubernetesConfig) cruntime.Manager {
|
||||
config := cruntime.Config{Type: viper.GetString(containerRuntime), Runner: runner, ImageRepository: k8s.ImageRepository, KubernetesVersion: k8s.KubernetesVersion}
|
||||
cr, err := cruntime.New(config)
|
||||
if err != nil {
|
||||
exit.WithError("Failed runtime", err)
|
||||
|
|
|
@ -9,7 +9,7 @@ minikube addons enable helm-tiller
|
|||
```
|
||||
|
||||
In a minute or so tiller will be installed into your cluster. You could run `helm init` each time you create a new minikube instance or you could just enable this addon.
|
||||
Each time you start a new minikube instance tiller will be automatically installed.
|
||||
Each time you start a new minikube instance, tiller will be automatically installed.
|
||||
|
||||
### Testing installation
|
||||
|
||||
|
@ -17,7 +17,7 @@ Each time you start a new minikube instance tiller will be automatically install
|
|||
helm ls
|
||||
```
|
||||
|
||||
If everything wen't well you shouldn't get any errors about tiller not being installed in your cluster. If you haven't deployed any releases `helm ls` won't return anything.
|
||||
If everything went well you shouldn't get any errors about tiller being installed in your cluster. If you haven't deployed any releases `helm ls` won't return anything.
|
||||
|
||||
### Deprecation of Tiller
|
||||
When tiller is finally deprecated this addon won't be necessary anymore. If your version of helm doesn't use tiller, you don't need this addon.
|
||||
|
|
|
@ -24,6 +24,12 @@ metadata:
|
|||
addonmanager.kubernetes.io/mode: Reconcile
|
||||
spec:
|
||||
replicas: 1
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate:
|
||||
# maxUnavailable needs to be 1 so that port conflicts between the old and new pod doesn't happen when using hostPort
|
||||
maxUnavailable: 1
|
||||
maxSurge: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: nginx-ingress-controller
|
||||
|
@ -42,7 +48,7 @@ spec:
|
|||
serviceAccountName: nginx-ingress
|
||||
terminationGracePeriodSeconds: 60
|
||||
containers:
|
||||
- image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller{{.ExoticArch}}:0.25.1
|
||||
- image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller{{.ExoticArch}}:0.26.1
|
||||
name: nginx-ingress-controller
|
||||
imagePullPolicy: IfNotPresent
|
||||
readinessProbe:
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
# Enhancements
|
||||
|
||||
The *minikube enhancement process (MEP)* is a way to propose, communicate, and coordinate on new efforts for the minikube project. You can read the full details in the (MEP proposal)[proposed/20190925-minikube-enhancement-process.md]
|
||||
|
||||
MEP is based on a simplification of the [Kubernetes Enhancement Process](https://github.com/kubernetes/enhancements/blob/master/keps/0001-kubernetes-enhancement-proposal-process.md).
|
||||
|
||||
## Workflow
|
||||
|
||||
1. Copy `template.md` to `proposed/<date>-title.md`
|
||||
1. Send PR out for review, titled: `Proposal: <title>`
|
||||
1. Proposal will be discussed at the bi-weekly minikube office hours
|
||||
1. After a 2-week review window, the proposal can be merged once there are 3 approving maintainers or reviewers. To keep proposals neutral, each reviewer must be independent and/or represent a different company.
|
||||
1. In your PR that implements the enhancement, move the proposal to the `implemented/` folder.
|
|
@ -0,0 +1,78 @@
|
|||
# minikube enhancement process
|
||||
|
||||
First proposed: 2019-09-25
|
||||
Authors: tstromberg
|
||||
|
||||
## Reviewer Priorities
|
||||
|
||||
Please review this proposal with the following priorities:
|
||||
|
||||
* Does this fit with minikube's principles?
|
||||
* Are there other approaches to consider?
|
||||
* Could the implementation be made simpler?
|
||||
|
||||
Please leave the above text in your proposal as instructions to the reader.
|
||||
|
||||
## Summary
|
||||
|
||||
A design review process for non-trivial enhancements to minikube.
|
||||
|
||||
## Goals
|
||||
|
||||
* Facilitate communication about the "how" and "why" of an enhancement before code is written
|
||||
* Lightweight enough to not deter casual contributions
|
||||
* A process applicable to any roadmap-worthy enhancement
|
||||
|
||||
## Non-Goals
|
||||
|
||||
* Coverage for smaller enhancements that would not be represented within the minikube roadmap.
|
||||
* Reduced development velocity
|
||||
|
||||
## Design Details
|
||||
|
||||
The *minikube enhancement process (MEP)* is a way to propose, communicate, and coordinate on new efforts for the minikube project. MEP is based on a simplification of the [Kubernetes Enhancement Process](https://github.com/kubernetes/enhancements/blob/master/keps/0001-kubernetes-enhancement-proposal-process.md).
|
||||
|
||||
### Proposal Workflow
|
||||
|
||||
1. Copy `template.md` to `proposed/<date>-title.md`
|
||||
1. Send PR out for review, titled: `Proposal: <title>`
|
||||
1. Proposal will be discussed at the bi-weekly minikube office hours
|
||||
1. After a 2-week review window, the proposal can be merged once there are 3 approving maintainers or reviewers. To keep proposals neutral, each reviewer must be independent and/or represent a different company.
|
||||
|
||||
### Implementation Workflow
|
||||
|
||||
1. In your PR that implements the enhancement, move the proposal to the `implemented/` folder.
|
||||
|
||||
## Alternatives Considered
|
||||
|
||||
### Kubernetes Enhancement Process
|
||||
|
||||
KEP's are a well-understood, but lengthier process geared toward making changes where multiple Kubernetes SIG's are affected.
|
||||
|
||||
#### Pro's
|
||||
|
||||
* Easily facilitate input from multiple SIG's
|
||||
* Clear, well understood process within Kubernetes, shared by multiple projects
|
||||
|
||||
#### Con's
|
||||
|
||||
* Invisible to casual contributors to a project, as these proposals do not show up within the GitHub project page
|
||||
* Lengthy template (1870+ words) that prompts for information that is not relevant to minikube
|
||||
* Time commitment deters casual contribution
|
||||
|
||||
### Google Docs Proposal Template
|
||||
|
||||
Rather than maintaining Markdown documents in the minikube repository, we could use a Google Docs template, and then a Google Sheet to track proposal status.
|
||||
|
||||
### Pro's
|
||||
|
||||
* Easier editing for trivial proposals
|
||||
|
||||
### Con's
|
||||
|
||||
* Authors may waste unnecessary time styling output
|
||||
* Styling may be inconsistent between proposals
|
||||
* Invisible to casual contributors to a project, as these proposals do not show up within the GitHub project page
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
# Your inspiring proposal title
|
||||
|
||||
* First proposed: <date>
|
||||
* Authors: $full_name (@github-handle), $full_name2 (@github_handle2)
|
||||
|
||||
## Reviewer Priorities
|
||||
|
||||
Please review this proposal with the following priorities:
|
||||
|
||||
* Does this fit with minikube's [principles](https://minikube.sigs.k8s.io/docs/concepts/principles/)?
|
||||
* Are there other approaches to consider?
|
||||
* Could the implementation be made simpler?
|
||||
* Are there usability, reliability, or technical debt concerns?
|
||||
|
||||
Please leave the above text in your proposal as instructions to the reader.
|
||||
|
||||
## Summary
|
||||
|
||||
_(1 paragraph) What are you proposing, and why is it important to users and/or developers?_
|
||||
|
||||
## Goals
|
||||
|
||||
* _A bulleted list of specific goals for this proposal_
|
||||
* _How will we know that this proposal has succeeded?_
|
||||
|
||||
## Non-Goals
|
||||
|
||||
* _A bulleted list of what is out of scope for this proposal_
|
||||
* _Listing non-goals helps to focus the discussion_
|
||||
|
||||
## Design Details
|
||||
|
||||
_(2+ paragraphs) A short overview of your implementation idea, containing only as much detail as required to convey your idea._
|
||||
|
||||
_If you have multiple ideas, list them concisely._
|
||||
|
||||
_Include a testing plan to ensure that your enhancement is not broken by future changes._
|
||||
|
||||
## Alternatives Considered
|
||||
|
||||
_Alternative ideas that you are leaning against._
|
|
@ -68,7 +68,7 @@ func GetCachedBinaryList(bootstrapper string) []string {
|
|||
func GetCachedImageList(imageRepository string, version string, bootstrapper string) []string {
|
||||
switch bootstrapper {
|
||||
case BootstrapperTypeKubeadm:
|
||||
_, images := images.CachedImages(imageRepository, version)
|
||||
images := images.CachedImages(imageRepository, version)
|
||||
return images
|
||||
default:
|
||||
return []string{}
|
||||
|
|
|
@ -25,19 +25,36 @@ import (
|
|||
minikubeVersion "k8s.io/minikube/pkg/version"
|
||||
)
|
||||
|
||||
// CachedImages gets the images to cache for kubeadm for a version
|
||||
func CachedImages(imageRepository string, kubernetesVersionStr string) (string, []string) {
|
||||
minikubeRepository := imageRepository
|
||||
// getImageRepositories returns either the k8s image registry on GCR or a mirror if specified
|
||||
func getImageRepository(imageRepository string) string {
|
||||
if imageRepository == "" {
|
||||
imageRepository = "k8s.gcr.io"
|
||||
minikubeRepository = "gcr.io/k8s-minikube"
|
||||
}
|
||||
if !strings.HasSuffix(imageRepository, "/") {
|
||||
imageRepository += "/"
|
||||
}
|
||||
|
||||
return imageRepository
|
||||
}
|
||||
|
||||
// getMinikubeRepository returns either the minikube image registry on GCR or a mirror if specified
|
||||
func getMinikubeRepository(imageRepository string) string {
|
||||
minikubeRepository := imageRepository
|
||||
if minikubeRepository == "" {
|
||||
minikubeRepository = "gcr.io/k8s-minikube"
|
||||
}
|
||||
if !strings.HasSuffix(minikubeRepository, "/") {
|
||||
minikubeRepository += "/"
|
||||
}
|
||||
|
||||
return minikubeRepository
|
||||
}
|
||||
|
||||
// CachedImages gets the images to cache for kubeadm for a version
|
||||
func CachedImages(imageRepositoryStr string, kubernetesVersionStr string) []string {
|
||||
imageRepository := getImageRepository(imageRepositoryStr)
|
||||
minikubeRepository := getMinikubeRepository(imageRepositoryStr)
|
||||
|
||||
v1_16plus := semver.MustParseRange(">=1.16.0")
|
||||
v1_14plus := semver.MustParseRange(">=1.14.0 <1.16.0")
|
||||
v1_13 := semver.MustParseRange(">=1.13.0 <1.14.0")
|
||||
|
@ -67,9 +84,8 @@ func CachedImages(imageRepository string, kubernetesVersionStr string) (string,
|
|||
}...)
|
||||
}
|
||||
|
||||
var podInfraContainerImage string
|
||||
podInfraContainerImage := PauseImage(imageRepository, kubernetesVersionStr)
|
||||
if v1_16plus(kubernetesVersion) {
|
||||
podInfraContainerImage = imageRepository + "pause:3.1"
|
||||
images = append(images, []string{
|
||||
podInfraContainerImage,
|
||||
imageRepository + "k8s-dns-kube-dns" + ArchTag(true) + "1.14.13",
|
||||
|
@ -80,7 +96,6 @@ func CachedImages(imageRepository string, kubernetesVersionStr string) (string,
|
|||
}...)
|
||||
|
||||
} else if v1_14plus(kubernetesVersion) {
|
||||
podInfraContainerImage = imageRepository + "pause:3.1"
|
||||
images = append(images, []string{
|
||||
podInfraContainerImage,
|
||||
imageRepository + "k8s-dns-kube-dns" + ArchTag(true) + "1.14.13",
|
||||
|
@ -91,7 +106,6 @@ func CachedImages(imageRepository string, kubernetesVersionStr string) (string,
|
|||
}...)
|
||||
|
||||
} else if v1_13(kubernetesVersion) {
|
||||
podInfraContainerImage = imageRepository + "pause" + ArchTag(false) + "3.1"
|
||||
images = append(images, []string{
|
||||
podInfraContainerImage,
|
||||
imageRepository + "k8s-dns-kube-dns" + ArchTag(true) + "1.14.8",
|
||||
|
@ -102,7 +116,6 @@ func CachedImages(imageRepository string, kubernetesVersionStr string) (string,
|
|||
}...)
|
||||
|
||||
} else if v1_12(kubernetesVersion) {
|
||||
podInfraContainerImage = imageRepository + "pause:3.1"
|
||||
images = append(images, []string{
|
||||
podInfraContainerImage,
|
||||
imageRepository + "k8s-dns-kube-dns" + ArchTag(true) + "1.14.8",
|
||||
|
@ -113,7 +126,6 @@ func CachedImages(imageRepository string, kubernetesVersionStr string) (string,
|
|||
}...)
|
||||
|
||||
} else if v1_11(kubernetesVersion) {
|
||||
podInfraContainerImage = imageRepository + "pause" + ArchTag(false) + "3.1"
|
||||
images = append(images, []string{
|
||||
podInfraContainerImage,
|
||||
imageRepository + "k8s-dns-kube-dns" + ArchTag(true) + "1.14.8",
|
||||
|
@ -122,8 +134,6 @@ func CachedImages(imageRepository string, kubernetesVersionStr string) (string,
|
|||
imageRepository + "etcd" + ArchTag(true) + "3.2.18",
|
||||
imageRepository + "coredns:1.1.3",
|
||||
}...)
|
||||
} else {
|
||||
podInfraContainerImage = imageRepository + "pause" + ArchTag(false) + "3.0"
|
||||
}
|
||||
|
||||
images = append(images, []string{
|
||||
|
@ -132,7 +142,46 @@ func CachedImages(imageRepository string, kubernetesVersionStr string) (string,
|
|||
minikubeRepository + "storage-provisioner" + ArchTag(false) + "v1.8.1",
|
||||
}...)
|
||||
|
||||
return podInfraContainerImage, images
|
||||
return images
|
||||
}
|
||||
|
||||
// PauseImage returns the image name for pause image (for pod infra)
|
||||
func PauseImage(imageRepositoryStr string, kubernetesVersionStr string) string {
|
||||
imageRepository := getImageRepository(imageRepositoryStr)
|
||||
|
||||
v1_16plus := semver.MustParseRange(">=1.16.0")
|
||||
v1_14plus := semver.MustParseRange(">=1.14.0 <1.16.0")
|
||||
v1_13 := semver.MustParseRange(">=1.13.0 <1.14.0")
|
||||
v1_12 := semver.MustParseRange(">=1.12.0 <1.13.0")
|
||||
v1_11 := semver.MustParseRange(">=1.11.0 <1.12.0")
|
||||
|
||||
kubernetesVersion, err := semver.Make(strings.TrimPrefix(kubernetesVersionStr, minikubeVersion.VersionPrefix))
|
||||
if err != nil {
|
||||
glog.Errorln("Error parsing version semver: ", err)
|
||||
}
|
||||
|
||||
var podInfraContainerImage string
|
||||
switch {
|
||||
case v1_16plus(kubernetesVersion):
|
||||
podInfraContainerImage = imageRepository + "pause:3.1"
|
||||
|
||||
case v1_14plus(kubernetesVersion):
|
||||
podInfraContainerImage = imageRepository + "pause:3.1"
|
||||
|
||||
case v1_13(kubernetesVersion):
|
||||
podInfraContainerImage = imageRepository + "pause" + ArchTag(false) + "3.1"
|
||||
|
||||
case v1_12(kubernetesVersion):
|
||||
podInfraContainerImage = imageRepository + "pause:3.1"
|
||||
|
||||
case v1_11(kubernetesVersion):
|
||||
podInfraContainerImage = imageRepository + "pause" + ArchTag(false) + "3.1"
|
||||
|
||||
default:
|
||||
podInfraContainerImage = imageRepository + "pause" + ArchTag(false) + "3.0"
|
||||
}
|
||||
|
||||
return podInfraContainerImage
|
||||
}
|
||||
|
||||
// ArchTag returns the archtag for images
|
||||
|
|
|
@ -65,6 +65,11 @@ const (
|
|||
kubeletSystemdConfFile = "/etc/systemd/system/kubelet.service.d/10-kubeadm.conf"
|
||||
)
|
||||
|
||||
const (
|
||||
// Container runtimes
|
||||
remoteContainerRuntime = "remote"
|
||||
)
|
||||
|
||||
// KubeadmExtraArgsWhitelist is a whitelist of supported kubeadm params that can be supplied to kubeadm through
|
||||
// minikube's ExtraArgs parameter. The list is split into two parts - params that can be supplied as flags on the
|
||||
// command line and params that have to be inserted into the kubeadm config file. This is because of a kubeadm
|
||||
|
@ -556,9 +561,9 @@ func NewKubeletConfig(k8s config.KubernetesConfig, r cruntime.Manager) ([]byte,
|
|||
extraOpts["node-ip"] = k8s.NodeIP
|
||||
}
|
||||
|
||||
podInfraContainerImage, _ := images.CachedImages(k8s.ImageRepository, k8s.KubernetesVersion)
|
||||
if _, ok := extraOpts["pod-infra-container-image"]; !ok && k8s.ImageRepository != "" && podInfraContainerImage != "" {
|
||||
extraOpts["pod-infra-container-image"] = podInfraContainerImage
|
||||
pauseImage := images.PauseImage(k8s.ImageRepository, k8s.KubernetesVersion)
|
||||
if _, ok := extraOpts["pod-infra-container-image"]; !ok && k8s.ImageRepository != "" && pauseImage != "" && k8s.ContainerRuntime != remoteContainerRuntime {
|
||||
extraOpts["pod-infra-container-image"] = pauseImage
|
||||
}
|
||||
|
||||
// parses a map of the feature gates for kubelet
|
||||
|
@ -590,7 +595,7 @@ func NewKubeletConfig(k8s config.KubernetesConfig, r cruntime.Manager) ([]byte,
|
|||
|
||||
// UpdateCluster updates the cluster
|
||||
func (k *Bootstrapper) UpdateCluster(cfg config.KubernetesConfig) error {
|
||||
_, images := images.CachedImages(cfg.ImageRepository, cfg.KubernetesVersion)
|
||||
images := images.CachedImages(cfg.ImageRepository, cfg.KubernetesVersion)
|
||||
if cfg.ShouldLoadCachedImages {
|
||||
if err := machine.LoadImages(k.c, images, constants.ImageCacheDir); err != nil {
|
||||
out.FailureT("Unable to load cached images: {{.error}}", out.V{"error": err})
|
||||
|
|
|
@ -17,17 +17,99 @@ limitations under the License.
|
|||
package cruntime
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"path"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/minikube/pkg/minikube/bootstrapper/images"
|
||||
"k8s.io/minikube/pkg/minikube/out"
|
||||
)
|
||||
|
||||
const (
|
||||
// ContainerdConfFile is the path to the containerd configuration
|
||||
containerdConfigFile = "/etc/containerd/config.toml"
|
||||
containerdConfigTemplate = `root = "/var/lib/containerd"
|
||||
state = "/run/containerd"
|
||||
oom_score = 0
|
||||
|
||||
[grpc]
|
||||
address = "/run/containerd/containerd.sock"
|
||||
uid = 0
|
||||
gid = 0
|
||||
max_recv_message_size = 16777216
|
||||
max_send_message_size = 16777216
|
||||
|
||||
[debug]
|
||||
address = ""
|
||||
uid = 0
|
||||
gid = 0
|
||||
level = ""
|
||||
|
||||
[metrics]
|
||||
address = ""
|
||||
grpc_histogram = false
|
||||
|
||||
[cgroup]
|
||||
path = ""
|
||||
|
||||
[plugins]
|
||||
[plugins.cgroups]
|
||||
no_prometheus = false
|
||||
[plugins.cri]
|
||||
stream_server_address = ""
|
||||
stream_server_port = "10010"
|
||||
enable_selinux = false
|
||||
sandbox_image = "{{ .PodInfraContainerImage }}"
|
||||
stats_collect_period = 10
|
||||
systemd_cgroup = false
|
||||
enable_tls_streaming = false
|
||||
max_container_log_line_size = 16384
|
||||
[plugins.cri.containerd]
|
||||
snapshotter = "overlayfs"
|
||||
no_pivot = true
|
||||
[plugins.cri.containerd.default_runtime]
|
||||
runtime_type = "io.containerd.runtime.v1.linux"
|
||||
runtime_engine = ""
|
||||
runtime_root = ""
|
||||
[plugins.cri.containerd.untrusted_workload_runtime]
|
||||
runtime_type = ""
|
||||
runtime_engine = ""
|
||||
runtime_root = ""
|
||||
[plugins.cri.cni]
|
||||
bin_dir = "/opt/cni/bin"
|
||||
conf_dir = "/etc/cni/net.d"
|
||||
conf_template = ""
|
||||
[plugins.cri.registry]
|
||||
[plugins.cri.registry.mirrors]
|
||||
[plugins.cri.registry.mirrors."docker.io"]
|
||||
endpoint = ["https://registry-1.docker.io"]
|
||||
[plugins.diff-service]
|
||||
default = ["walking"]
|
||||
[plugins.linux]
|
||||
shim = "containerd-shim"
|
||||
runtime = "runc"
|
||||
runtime_root = ""
|
||||
no_shim = false
|
||||
shim_debug = false
|
||||
[plugins.scheduler]
|
||||
pause_threshold = 0.02
|
||||
deletion_threshold = 0
|
||||
mutation_threshold = 100
|
||||
schedule_delay = "0s"
|
||||
startup_delay = "100ms"
|
||||
`
|
||||
)
|
||||
|
||||
// Containerd contains containerd runtime state
|
||||
type Containerd struct {
|
||||
Socket string
|
||||
Runner CommandRunner
|
||||
Socket string
|
||||
Runner CommandRunner
|
||||
ImageRepository string
|
||||
KubernetesVersion string
|
||||
}
|
||||
|
||||
// Name is a human readable name for containerd
|
||||
|
@ -79,6 +161,22 @@ func (r *Containerd) Available() error {
|
|||
return r.Runner.Run("command -v containerd")
|
||||
}
|
||||
|
||||
// generateContainerdConfig sets up /etc/containerd/config.toml
|
||||
func generateContainerdConfig(cr CommandRunner, imageRepository string, k8sVersion string) error {
|
||||
cPath := containerdConfigFile
|
||||
t, err := template.New("containerd.config.toml").Parse(containerdConfigTemplate)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pauseImage := images.PauseImage(imageRepository, k8sVersion)
|
||||
opts := struct{ PodInfraContainerImage string }{PodInfraContainerImage: pauseImage}
|
||||
var b bytes.Buffer
|
||||
if err := t.Execute(&b, opts); err != nil {
|
||||
return err
|
||||
}
|
||||
return cr.Run(fmt.Sprintf("sudo mkdir -p %s && printf %%s \"%s\" | base64 -d | sudo tee %s", path.Dir(cPath), base64.StdEncoding.EncodeToString(b.Bytes()), cPath))
|
||||
}
|
||||
|
||||
// Enable idempotently enables containerd on a host
|
||||
func (r *Containerd) Enable(disOthers bool) error {
|
||||
if disOthers {
|
||||
|
@ -89,6 +187,9 @@ func (r *Containerd) Enable(disOthers bool) error {
|
|||
if err := populateCRIConfig(r.Runner, r.SocketPath()); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := generateContainerdConfig(r.Runner, r.ImageRepository, r.KubernetesVersion); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := enableIPForwarding(r.Runner); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -18,12 +18,314 @@ package cruntime
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/minikube/pkg/minikube/bootstrapper/images"
|
||||
)
|
||||
|
||||
const (
|
||||
// CRIOConfFile is the path to the CRI-O configuration
|
||||
crioConfigFile = "/etc/crio/crio.conf"
|
||||
crioConfigTemplate = `# The CRI-O configuration file specifies all of the available configuration
|
||||
# options and command-line flags for the crio(8) OCI Kubernetes Container Runtime
|
||||
# daemon, but in a TOML format that can be more easily modified and versioned.
|
||||
#
|
||||
# Please refer to crio.conf(5) for details of all configuration options.
|
||||
|
||||
# CRI-O supports partial configuration reload during runtime, which can be
|
||||
# done by sending SIGHUP to the running process. Currently supported options
|
||||
# are explicitly mentioned with: 'This option supports live configuration
|
||||
# reload'.
|
||||
|
||||
# CRI-O reads its storage defaults from the containers-storage.conf(5) file
|
||||
# located at /etc/containers/storage.conf. Modify this storage configuration if
|
||||
# you want to change the system's defaults. If you want to modify storage just
|
||||
# for CRI-O, you can change the storage configuration options here.
|
||||
[crio]
|
||||
|
||||
# Path to the "root directory". CRI-O stores all of its data, including
|
||||
# containers images, in this directory.
|
||||
root = "/var/lib/containers/storage"
|
||||
|
||||
# Path to the "run directory". CRI-O stores all of its state in this directory.
|
||||
runroot = "/var/run/containers/storage"
|
||||
|
||||
# Storage driver used to manage the storage of images and containers. Please
|
||||
# refer to containers-storage.conf(5) to see all available storage drivers.
|
||||
storage_driver = "overlay"
|
||||
|
||||
# List to pass options to the storage driver. Please refer to
|
||||
# containers-storage.conf(5) to see all available storage options.
|
||||
#storage_option = [
|
||||
#]
|
||||
|
||||
# If set to false, in-memory locking will be used instead of file-based locking.
|
||||
# **Deprecated** this option will be removed in the future.
|
||||
file_locking = false
|
||||
|
||||
# Path to the lock file.
|
||||
# **Deprecated** this option will be removed in the future.
|
||||
file_locking_path = "/run/crio.lock"
|
||||
|
||||
|
||||
# The crio.api table contains settings for the kubelet/gRPC interface.
|
||||
[crio.api]
|
||||
|
||||
# Path to AF_LOCAL socket on which CRI-O will listen.
|
||||
listen = "/var/run/crio/crio.sock"
|
||||
|
||||
# IP address on which the stream server will listen.
|
||||
stream_address = "127.0.0.1"
|
||||
|
||||
# The port on which the stream server will listen.
|
||||
stream_port = "0"
|
||||
|
||||
# Enable encrypted TLS transport of the stream server.
|
||||
stream_enable_tls = false
|
||||
|
||||
# Path to the x509 certificate file used to serve the encrypted stream. This
|
||||
# file can change, and CRI-O will automatically pick up the changes within 5
|
||||
# minutes.
|
||||
stream_tls_cert = ""
|
||||
|
||||
# Path to the key file used to serve the encrypted stream. This file can
|
||||
# change, and CRI-O will automatically pick up the changes within 5 minutes.
|
||||
stream_tls_key = ""
|
||||
|
||||
# Path to the x509 CA(s) file used to verify and authenticate client
|
||||
# communication with the encrypted stream. This file can change, and CRI-O will
|
||||
# automatically pick up the changes within 5 minutes.
|
||||
stream_tls_ca = ""
|
||||
|
||||
# Maximum grpc send message size in bytes. If not set or <=0, then CRI-O will default to 16 * 1024 * 1024.
|
||||
grpc_max_send_msg_size = 16777216
|
||||
|
||||
# Maximum grpc receive message size. If not set or <= 0, then CRI-O will default to 16 * 1024 * 1024.
|
||||
grpc_max_recv_msg_size = 16777216
|
||||
|
||||
# The crio.runtime table contains settings pertaining to the OCI runtime used
|
||||
# and options for how to set up and manage the OCI runtime.
|
||||
[crio.runtime]
|
||||
|
||||
# A list of ulimits to be set in containers by default, specified as
|
||||
# "<ulimit name>=<soft limit>:<hard limit>", for example:
|
||||
# "nofile=1024:2048"
|
||||
# If nothing is set here, settings will be inherited from the CRI-O daemon
|
||||
#default_ulimits = [
|
||||
#]
|
||||
|
||||
# default_runtime is the _name_ of the OCI runtime to be used as the default.
|
||||
# The name is matched against the runtimes map below.
|
||||
default_runtime = "runc"
|
||||
|
||||
# If true, the runtime will not use pivot_root, but instead use MS_MOVE.
|
||||
no_pivot = true
|
||||
|
||||
# Path to the conmon binary, used for monitoring the OCI runtime.
|
||||
conmon = "/usr/libexec/crio/conmon"
|
||||
|
||||
# Cgroup setting for conmon
|
||||
conmon_cgroup = "pod"
|
||||
|
||||
# Environment variable list for the conmon process, used for passing necessary
|
||||
# environment variables to conmon or the runtime.
|
||||
conmon_env = [
|
||||
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||
]
|
||||
|
||||
# If true, SELinux will be used for pod separation on the host.
|
||||
selinux = false
|
||||
|
||||
# Path to the seccomp.json profile which is used as the default seccomp profile
|
||||
# for the runtime. If not specified, then the internal default seccomp profile
|
||||
# will be used.
|
||||
seccomp_profile = ""
|
||||
|
||||
# Used to change the name of the default AppArmor profile of CRI-O. The default
|
||||
# profile name is "crio-default-" followed by the version string of CRI-O.
|
||||
apparmor_profile = "crio-default"
|
||||
|
||||
# Cgroup management implementation used for the runtime.
|
||||
cgroup_manager = "cgroupfs"
|
||||
|
||||
# List of default capabilities for containers. If it is empty or commented out,
|
||||
# only the capabilities defined in the containers json file by the user/kube
|
||||
# will be added.
|
||||
default_capabilities = [
|
||||
"CHOWN",
|
||||
"DAC_OVERRIDE",
|
||||
"FSETID",
|
||||
"FOWNER",
|
||||
"NET_RAW",
|
||||
"SETGID",
|
||||
"SETUID",
|
||||
"SETPCAP",
|
||||
"NET_BIND_SERVICE",
|
||||
"SYS_CHROOT",
|
||||
"KILL",
|
||||
]
|
||||
|
||||
# List of default sysctls. If it is empty or commented out, only the sysctls
|
||||
# defined in the container json file by the user/kube will be added.
|
||||
default_sysctls = [
|
||||
]
|
||||
|
||||
# List of additional devices. specified as
|
||||
# "<device-on-host>:<device-on-container>:<permissions>", for example: "--device=/dev/sdc:/dev/xvdc:rwm".
|
||||
#If it is empty or commented out, only the devices
|
||||
# defined in the container json file by the user/kube will be added.
|
||||
additional_devices = [
|
||||
]
|
||||
|
||||
# Path to OCI hooks directories for automatically executed hooks.
|
||||
hooks_dir = [
|
||||
]
|
||||
|
||||
# List of default mounts for each container. **Deprecated:** this option will
|
||||
# be removed in future versions in favor of default_mounts_file.
|
||||
default_mounts = [
|
||||
]
|
||||
|
||||
# Path to the file specifying the defaults mounts for each container. The
|
||||
# format of the config is /SRC:/DST, one mount per line. Notice that CRI-O reads
|
||||
# its default mounts from the following two files:
|
||||
#
|
||||
# 1) /etc/containers/mounts.conf (i.e., default_mounts_file): This is the
|
||||
# override file, where users can either add in their own default mounts, or
|
||||
# override the default mounts shipped with the package.
|
||||
#
|
||||
# 2) /usr/share/containers/mounts.conf: This is the default file read for
|
||||
# mounts. If you want CRI-O to read from a different, specific mounts file,
|
||||
# you can change the default_mounts_file. Note, if this is done, CRI-O will
|
||||
# only add mounts it finds in this file.
|
||||
#
|
||||
#default_mounts_file = ""
|
||||
|
||||
# Maximum number of processes allowed in a container.
|
||||
pids_limit = 1024
|
||||
|
||||
# Maximum sized allowed for the container log file. Negative numbers indicate
|
||||
# that no size limit is imposed. If it is positive, it must be >= 8192 to
|
||||
# match/exceed conmon's read buffer. The file is truncated and re-opened so the
|
||||
# limit is never exceeded.
|
||||
log_size_max = -1
|
||||
|
||||
# Whether container output should be logged to journald in addition to the kuberentes log file
|
||||
log_to_journald = false
|
||||
|
||||
# Path to directory in which container exit files are written to by conmon.
|
||||
container_exits_dir = "/var/run/crio/exits"
|
||||
|
||||
# Path to directory for container attach sockets.
|
||||
container_attach_socket_dir = "/var/run/crio"
|
||||
|
||||
# If set to true, all containers will run in read-only mode.
|
||||
read_only = false
|
||||
|
||||
# Changes the verbosity of the logs based on the level it is set to. Options
|
||||
# are fatal, panic, error, warn, info, and debug. This option supports live
|
||||
# configuration reload.
|
||||
log_level = "error"
|
||||
|
||||
# The default log directory where all logs will go unless directly specified by the kubelet
|
||||
log_dir = "/var/log/crio/pods"
|
||||
|
||||
# The UID mappings for the user namespace of each container. A range is
|
||||
# specified in the form containerUID:HostUID:Size. Multiple ranges must be
|
||||
# separated by comma.
|
||||
uid_mappings = ""
|
||||
|
||||
# The GID mappings for the user namespace of each container. A range is
|
||||
# specified in the form containerGID:HostGID:Size. Multiple ranges must be
|
||||
# separated by comma.
|
||||
gid_mappings = ""
|
||||
|
||||
# The minimal amount of time in seconds to wait before issuing a timeout
|
||||
# regarding the proper termination of the container.
|
||||
ctr_stop_timeout = 0
|
||||
|
||||
# ManageNetworkNSLifecycle determines whether we pin and remove network namespace
|
||||
# and manage its lifecycle.
|
||||
manage_network_ns_lifecycle = false
|
||||
|
||||
# The "crio.runtime.runtimes" table defines a list of OCI compatible runtimes.
|
||||
# The runtime to use is picked based on the runtime_handler provided by the CRI.
|
||||
# If no runtime_handler is provided, the runtime will be picked based on the level
|
||||
# of trust of the workload.
|
||||
|
||||
[crio.runtime.runtimes.runc]
|
||||
runtime_path = "/usr/bin/runc"
|
||||
runtime_type = "oci"
|
||||
runtime_root = "/run/runc"
|
||||
|
||||
|
||||
# The crio.image table contains settings pertaining to the management of OCI images.
|
||||
#
|
||||
# CRI-O reads its configured registries defaults from the system wide
|
||||
# containers-registries.conf(5) located in /etc/containers/registries.conf. If
|
||||
# you want to modify just CRI-O, you can change the registries configuration in
|
||||
# this file. Otherwise, leave insecure_registries and registries commented out to
|
||||
# use the system's defaults from /etc/containers/registries.conf.
|
||||
[crio.image]
|
||||
|
||||
# Default transport for pulling images from a remote container storage.
|
||||
default_transport = "docker://"
|
||||
|
||||
# The path to a file containing credentials necessary for pulling images from
|
||||
# secure registries. The file is similar to that of /var/lib/kubelet/config.json
|
||||
global_auth_file = ""
|
||||
|
||||
# The image used to instantiate infra containers.
|
||||
# This option supports live configuration reload.
|
||||
pause_image = "{{ .PodInfraContainerImage }}"
|
||||
|
||||
# The path to a file containing credentials specific for pulling the pause_image from
|
||||
# above. The file is similar to that of /var/lib/kubelet/config.json
|
||||
# This option supports live configuration reload.
|
||||
pause_image_auth_file = ""
|
||||
|
||||
# The command to run to have a container stay in the paused state.
|
||||
# This option supports live configuration reload.
|
||||
pause_command = "/pause"
|
||||
|
||||
# Path to the file which decides what sort of policy we use when deciding
|
||||
# whether or not to trust an image that we've pulled. It is not recommended that
|
||||
# this option be used, as the default behavior of using the system-wide default
|
||||
# policy (i.e., /etc/containers/policy.json) is most often preferred. Please
|
||||
# refer to containers-policy.json(5) for more details.
|
||||
signature_policy = ""
|
||||
|
||||
# Controls how image volumes are handled. The valid values are mkdir, bind and
|
||||
# ignore; the latter will ignore volumes entirely.
|
||||
image_volumes = "mkdir"
|
||||
|
||||
# List of registries to be used when pulling an unqualified image (e.g.,
|
||||
# "alpine:latest"). By default, registries is set to "docker.io" for
|
||||
# compatibility reasons. Depending on your workload and usecase you may add more
|
||||
# registries (e.g., "quay.io", "registry.fedoraproject.org",
|
||||
# "registry.opensuse.org", etc.).
|
||||
registries = [
|
||||
"docker.io"
|
||||
]
|
||||
|
||||
|
||||
# The crio.network table containers settings pertaining to the management of
|
||||
# CNI plugins.
|
||||
[crio.network]
|
||||
|
||||
# Path to the directory where CNI configuration files are located.
|
||||
network_dir = "/etc/cni/net.d/"
|
||||
|
||||
# Paths to directories where CNI plugin binaries are located.
|
||||
plugin_dirs = [
|
||||
"/opt/cni/bin/",
|
||||
]
|
||||
`
|
||||
)
|
||||
|
||||
// listCRIContainers returns a list of containers using crictl
|
||||
|
@ -84,6 +386,22 @@ image-endpoint: unix://{{.Socket}}
|
|||
return cr.Run(fmt.Sprintf("sudo mkdir -p %s && printf %%s \"%s\" | sudo tee %s", path.Dir(cPath), b.String(), cPath))
|
||||
}
|
||||
|
||||
// generateCRIOConfig sets up /etc/crio/crio.conf
|
||||
func generateCRIOConfig(cr CommandRunner, imageRepository string, k8sVersion string) error {
|
||||
cPath := crioConfigFile
|
||||
t, err := template.New("crio.conf").Parse(crioConfigTemplate)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pauseImage := images.PauseImage(imageRepository, k8sVersion)
|
||||
opts := struct{ PodInfraContainerImage string }{PodInfraContainerImage: pauseImage}
|
||||
var b bytes.Buffer
|
||||
if err := t.Execute(&b, opts); err != nil {
|
||||
return err
|
||||
}
|
||||
return cr.Run(fmt.Sprintf("sudo mkdir -p %s && printf %%s \"%s\" | base64 -d | sudo tee %s", path.Dir(cPath), base64.StdEncoding.EncodeToString(b.Bytes()), cPath))
|
||||
}
|
||||
|
||||
// criContainerLogCmd returns the command to retrieve the log for a container based on ID
|
||||
func criContainerLogCmd(id string, len int, follow bool) string {
|
||||
var cmd strings.Builder
|
||||
|
|
|
@ -26,8 +26,10 @@ import (
|
|||
|
||||
// CRIO contains CRIO runtime state
|
||||
type CRIO struct {
|
||||
Socket string
|
||||
Runner CommandRunner
|
||||
Socket string
|
||||
Runner CommandRunner
|
||||
ImageRepository string
|
||||
KubernetesVersion string
|
||||
}
|
||||
|
||||
// Name is a human readable name for CRIO
|
||||
|
@ -87,6 +89,9 @@ func (r *CRIO) Enable(disOthers bool) error {
|
|||
if err := populateCRIConfig(r.Runner, r.SocketPath()); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := generateCRIOConfig(r.Runner, r.ImageRepository, r.KubernetesVersion); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := enableIPForwarding(r.Runner); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -78,6 +78,10 @@ type Config struct {
|
|||
Socket string
|
||||
// Runner is the CommandRunner object to execute commands with
|
||||
Runner CommandRunner
|
||||
// ImageRepository image repository to download image from
|
||||
ImageRepository string
|
||||
// KubernetesVersion Kubernetes version
|
||||
KubernetesVersion string
|
||||
}
|
||||
|
||||
// New returns an appropriately configured runtime
|
||||
|
@ -86,9 +90,9 @@ func New(c Config) (Manager, error) {
|
|||
case "", "docker":
|
||||
return &Docker{Socket: c.Socket, Runner: c.Runner}, nil
|
||||
case "crio", "cri-o":
|
||||
return &CRIO{Socket: c.Socket, Runner: c.Runner}, nil
|
||||
return &CRIO{Socket: c.Socket, Runner: c.Runner, ImageRepository: c.ImageRepository, KubernetesVersion: c.KubernetesVersion}, nil
|
||||
case "containerd":
|
||||
return &Containerd{Socket: c.Socket, Runner: c.Runner}, nil
|
||||
return &Containerd{Socket: c.Socket, Runner: c.Runner, ImageRepository: c.ImageRepository, KubernetesVersion: c.KubernetesVersion}, nil
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown runtime type: %q", c.Type)
|
||||
}
|
||||
|
|
|
@ -37,6 +37,12 @@ Once you've discovered an issue to work on:
|
|||
4. Fork the minikube repository, develop and test your code changes.
|
||||
5. Submit a pull request.
|
||||
|
||||
## Contributing larger changes
|
||||
|
||||
To get feedback on a larger, more ambitious changes, create a PR containing your idea using the [MEP (minikube enhancement proposal) template](https://github.com/kubernetes/minikube/tree/master/enhancements). This way other contributors can comment on design issues early on, though you are welcome to work on the code in parallel.
|
||||
|
||||
If you send out a large change without a MEP, prepare to be asked by other contributors for one to be included within the PR.
|
||||
|
||||
### Style Guides
|
||||
|
||||
For coding, refer to the [Kubernetes Coding Conventions](https://github.com/kubernetes/community/blob/master/contributors/guide/coding-conventions.md#code-conventions)
|
||||
|
|
|
@ -4,7 +4,7 @@ linkTitle: "dashboard"
|
|||
weight: 1
|
||||
date: 2019-08-01
|
||||
description: >
|
||||
Access the kubernetes dashboard running within the minikube cluster
|
||||
Access the Kubernetes dashboard running within the minikube cluster
|
||||
---
|
||||
|
||||
## Usage
|
||||
|
|
|
@ -4,12 +4,12 @@ linkTitle: "delete"
|
|||
weight: 1
|
||||
date: 2019-08-01
|
||||
description: >
|
||||
Deletes a local kubernetes cluster
|
||||
Deletes a local Kubernetes cluster
|
||||
---
|
||||
|
||||
### Overview
|
||||
|
||||
Deletes a local kubernetes cluster. This command deletes the VM, and removes all
|
||||
Deletes a local Kubernetes cluster. This command deletes the VM, and removes all
|
||||
associated files.
|
||||
|
||||
## Usage
|
||||
|
|
|
@ -10,7 +10,7 @@ description: >
|
|||
|
||||
### Overview
|
||||
|
||||
Run the kubernetes client, download it if necessary.
|
||||
Run the Kubernetes client, download it if necessary.
|
||||
|
||||
### Usage
|
||||
|
||||
|
|
|
@ -4,12 +4,12 @@ linkTitle: "service"
|
|||
weight: 1
|
||||
date: 2019-08-01
|
||||
description: >
|
||||
Gets the kubernetes URL(s) for the specified service in your local cluster
|
||||
Gets the Kubernetes URL(s) for the specified service in your local cluster
|
||||
---
|
||||
|
||||
### Overview
|
||||
|
||||
Gets the kubernetes URL(s) for the specified service in your local cluster. In the case of multiple URLs they will be printed one at a time.
|
||||
Gets the Kubernetes URL(s) for the specified service in your local cluster. In the case of multiple URLs they will be printed one at a time.
|
||||
|
||||
### Usage
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ linkTitle: "start"
|
|||
weight: 1
|
||||
date: 2019-08-01
|
||||
description: >
|
||||
Starts a local kubernetes cluster
|
||||
Starts a local Kubernetes cluster
|
||||
---
|
||||
|
||||
### Usage
|
||||
|
|
|
@ -4,15 +4,15 @@ linkTitle: "status"
|
|||
weight: 1
|
||||
date: 2019-08-01
|
||||
description: >
|
||||
Gets the status of a local kubernetes cluster
|
||||
Gets the status of a local Kubernetes cluster
|
||||
---
|
||||
|
||||
|
||||
### Overview
|
||||
|
||||
Gets the status of a local kubernetes cluster.
|
||||
Exit status contains the status of minikube's VM, cluster and kubernetes encoded on it's bits in this order from right to left.
|
||||
Eg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for kubernetes NOK)
|
||||
Gets the status of a local Kubernetes cluster.
|
||||
Exit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.
|
||||
Eg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)
|
||||
|
||||
### Usage
|
||||
|
||||
|
|
|
@ -4,12 +4,12 @@ linkTitle: "stop"
|
|||
weight: 1
|
||||
date: 2019-08-01
|
||||
description: >
|
||||
Stops a running local kubernetes cluster
|
||||
Stops a running local Kubernetes cluster
|
||||
---
|
||||
|
||||
### Overview
|
||||
|
||||
Stops a local kubernetes cluster running in Virtualbox. This command stops the VM
|
||||
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.
|
||||
|
||||
### Usage
|
||||
|
|
|
@ -0,0 +1,233 @@
|
|||
---
|
||||
title: "Ingress nginx for TCP and UDP services"
|
||||
linkTitle: "Ingress nginx for TCP and UDP services"
|
||||
weight: 1
|
||||
date: 2019-08-15
|
||||
description: >
|
||||
How to set up a minikube ingress for TCP and UDP services
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
The minikube [ingress addon](https://github.com/kubernetes/minikube/tree/master/deploy/addons/ingress) enables developers
|
||||
to route traffic from their host (Laptop, Desktop, etc) to a Kubernetes service running inside their minikube cluster.
|
||||
The ingress addon uses the [ingress nginx](https://github.com/kubernetes/ingress-nginx) controller which by default
|
||||
is only configured to listen on ports 80 and 443. TCP and UDP services listening on other ports can be enabled.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Latest minikube binary and ISO
|
||||
- Telnet command line tool
|
||||
- [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl) command line tool
|
||||
- A text editor
|
||||
|
||||
## Configuring TCP and UDP services with the nginx ingress controller
|
||||
|
||||
### Enable the ingress addon
|
||||
|
||||
Enable the minikube ingress addon with the following command:
|
||||
|
||||
```shell
|
||||
minikube addons enable ingress
|
||||
```
|
||||
|
||||
### Update the TCP and/or UDP services configmaps
|
||||
|
||||
Borrowing from the tutorial on [configuring TCP and UDP services with the ingress nginx controller](https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/)
|
||||
we will need to edit the configmap which is installed by default when enabling the minikube ingress addon.
|
||||
|
||||
There are 2 configmaps, 1 for TCP services and 1 for UDP services. By default they look like this:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: tcp-services
|
||||
namespace: ingress-nginx
|
||||
```
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: udp-services
|
||||
namespace: ingress-nginx
|
||||
```
|
||||
|
||||
Since these configmaps are centralized and may contain configurations, it is best if we only patch them rather than completely overwrite them.
|
||||
|
||||
Let's use this redis deployment as an example:
|
||||
|
||||
`redis-deployment.yaml`
|
||||
```yaml
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: redis-deployment
|
||||
namespace: default
|
||||
labels:
|
||||
app: redis
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: redis
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: redis
|
||||
spec:
|
||||
containers:
|
||||
- image: redis
|
||||
imagePullPolicy: Always
|
||||
name: redis
|
||||
ports:
|
||||
- containerPort: 6379
|
||||
protocol: TCP
|
||||
```
|
||||
|
||||
Create a file `redis-deployment.yaml` and paste the contents above. Then install the redis deployment with the following command:
|
||||
|
||||
```shell
|
||||
kubectl apply -f redis-deployment.yaml
|
||||
```
|
||||
|
||||
Next we need to create a service that can route traffic to our pods:
|
||||
|
||||
`redis-service.yaml`
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: redis-service
|
||||
namespace: default
|
||||
spec:
|
||||
selector:
|
||||
app: redis
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: tcp-port
|
||||
port: 6379
|
||||
targetPort: 6379
|
||||
protocol: TCP
|
||||
```
|
||||
|
||||
Create a file `redis-service.yaml` and paste the contents above. Then install the redis service with the following command:
|
||||
|
||||
```shell
|
||||
kubectl apply -f redis-service.yaml
|
||||
```
|
||||
|
||||
To add a TCP service to the nginx ingress controller you can run the following command:
|
||||
|
||||
```shell
|
||||
kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'
|
||||
```
|
||||
|
||||
Where:
|
||||
|
||||
- `6379` : the port your service should listen to from outside the minikube virtual machine
|
||||
- `default` : the namespace that your service is installed in
|
||||
- `redis-service` : the name of the service
|
||||
|
||||
We can verify that our resource was patched with the following command:
|
||||
|
||||
```shell
|
||||
kubectl get configmap tcp-services -n kube-system -o yaml
|
||||
```
|
||||
|
||||
We should see something like this:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
data:
|
||||
"6379": default/redis-service:6379
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: "2019-10-01T16:19:57Z"
|
||||
labels:
|
||||
addonmanager.kubernetes.io/mode: EnsureExists
|
||||
name: tcp-services
|
||||
namespace: kube-system
|
||||
resourceVersion: "2857"
|
||||
selfLink: /api/v1/namespaces/kube-system/configmaps/tcp-services
|
||||
uid: 4f7fac22-e467-11e9-b543-080027057910
|
||||
```
|
||||
|
||||
The only value you need to validate is that there is a value under the `data` property that looks like this:
|
||||
|
||||
```yaml
|
||||
"6379": default/redis-service:6379
|
||||
```
|
||||
|
||||
### Patch the ingress-nginx-controller
|
||||
|
||||
There is one final step that must be done in order to obtain connectivity from the outside cluster.
|
||||
We need to patch our nginx controller so that it is listening on port 6379 and can route traffic to your service. To do
|
||||
this we need to create a patch file.
|
||||
|
||||
`nginx-ingress-controller-patch.yaml`
|
||||
```yaml
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: nginx-ingress-controller
|
||||
ports:
|
||||
- containerPort: 6379
|
||||
hostPort: 6379
|
||||
```
|
||||
|
||||
Create a file called `nginx-ingress-controller-patch.yaml` and paste the contents above.
|
||||
|
||||
Next apply the changes with the following command:
|
||||
|
||||
```shell
|
||||
kubectl patch deployment nginx-ingress-controller --patch "$(cat nginx-ingress-controller-patch.yaml)" -n kube-system
|
||||
```
|
||||
|
||||
### Test your connection
|
||||
|
||||
Test that you can reach your service with telnet via the following command:
|
||||
|
||||
```shell
|
||||
telnet $(minikube ip) 6379
|
||||
```
|
||||
|
||||
You should see the following output:
|
||||
|
||||
```text
|
||||
Trying 192.168.99.179...
|
||||
Connected to 192.168.99.179.
|
||||
Escape character is '^]'
|
||||
```
|
||||
|
||||
To exit telnet enter the `Ctrl` key and `]` at the same time. Then type `quit` and press enter.
|
||||
|
||||
If you were not able to connect please review your steps above.
|
||||
|
||||
## Review
|
||||
|
||||
In the above example we did the following:
|
||||
|
||||
- Created a redis deployment and service in the `default` namespace
|
||||
- Patched the `tcp-services` configmap in the `kube-system` namespace
|
||||
- Patched the `nginx-ingress-controller` deployment in the `kube-system` namespace
|
||||
- Connected to our service from the host via port 6379
|
||||
|
||||
You can apply the same steps that were applied to `tcp-services` to the `udp-services` configmap as well if you have a
|
||||
service that uses UDP and/or TCP
|
||||
|
||||
## Caveats
|
||||
|
||||
With the exception of ports 80 and 443, each minikube instance can only be configured for exactly 1 service to be listening
|
||||
on any particular port. Multiple TCP and/or UDP services listening on the same port in the same minikube instance is not supported
|
||||
and can not be supported until an update of the ingress spec is released.
|
||||
Please see [this document](https://docs.google.com/document/d/1BxYbDovMwnEqe8lj8JwHo8YxHAt3oC7ezhlFsG_tyag/edit#)
|
||||
for the latest info on these potential changes.
|
||||
|
||||
## Related articles
|
||||
|
||||
- [Routing traffic multiple services on ports 80 and 443 in minikube with the Kubernetes Ingress resource](https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/)
|
||||
- [Use port forwarding to access applications in a cluster](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)
|
||||
|
|
@ -58,7 +58,7 @@ func TestDownloadOnly(t *testing.T) {
|
|||
|
||||
// None driver does not cache images, so this test will fail
|
||||
if !NoneDriver() {
|
||||
_, imgs := images.CachedImages("", v)
|
||||
imgs := images.CachedImages("", v)
|
||||
for _, img := range imgs {
|
||||
img = strings.Replace(img, ":", "_", 1) // for example kube-scheduler:v1.15.2 --> kube-scheduler_v1.15.2
|
||||
fp := filepath.Join(localpath.MiniPath(), "cache", "images", img)
|
||||
|
|
|
@ -0,0 +1,520 @@
|
|||
{
|
||||
"\"{{.minikube_addon}}\" was successfully disabled": "\"{{.minikube_addon}}\" został wyłaczony",
|
||||
"\"{{.name}}\" cluster does not exist. Proceeding ahead with cleanup.": "",
|
||||
"\"{{.name}}\" profile does not exist": "Profil \"{{.name}}\" nie istnieje",
|
||||
"\"{{.profile_name}}\" VM does not exist, nothing to stop": "Maszyna wirtualna \"{{.profile_name}}\" nie istnieje. Nie można zatrzymać",
|
||||
"\"{{.profile_name}}\" host does not exist, unable to show an IP": "Profil \"{{.profile_name}}\" nie istnieje. Nie można wyświetlić adresu IP ",
|
||||
"\"{{.profile_name}}\" stopped.": "Zatrzymano \"{{.profile_name}}\"",
|
||||
"'none' driver does not support 'minikube docker-env' command": "sterownik 'none' nie wspiera komendy 'minikube docker-env'",
|
||||
"'none' driver does not support 'minikube mount' command": "sterownik 'none' nie wspiera komendy 'minikube mount'",
|
||||
"'none' driver does not support 'minikube ssh' command": "sterownik 'none' nie wspiera komendy 'minikube ssh'",
|
||||
"A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "",
|
||||
"A firewall is blocking Docker within the minikube VM from reaching the internet. You may need to configure it to use a proxy.": "",
|
||||
"A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "",
|
||||
"A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "",
|
||||
"A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "",
|
||||
"A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "",
|
||||
"A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "",
|
||||
"A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "",
|
||||
"A set of key=value pairs that describe configuration that may be passed to different components.\nThe key should be '.' separated, and the first part before the dot is the component to apply the configuration to.\nValid components are: kubelet, kubeadm, apiserver, controller-manager, etcd, proxy, scheduler\nValid kubeadm parameters:": "",
|
||||
"A set of key=value pairs that describe feature gates for alpha/experimental features.": "",
|
||||
"Access the kubernetes dashboard running within the minikube cluster": "Dostęp do dashboardu uruchomionego w klastrze kubernetesa w minikube",
|
||||
"Add an image to local cache.": "",
|
||||
"Add machine IP to NO_PROXY environment variable": "",
|
||||
"Add or delete an image from the local cache.": "",
|
||||
"Additional help topics": "Dodatkowe tematy pomocy",
|
||||
"Additional mount options, such as cache=fscache": "Dodatkowe opcje montowania, jak na przykład cache=fscache",
|
||||
"Advanced Commands:": "Zaawansowane komendy",
|
||||
"Aliases": "Aliasy",
|
||||
"Allow user prompts for more information": "",
|
||||
"Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "",
|
||||
"Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "Ilość zarezerwowanej pamieci RAM dla maszyny wirtualnej minikube (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or )",
|
||||
"Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Ilość zarezerwowanej pamieci RAM dla maszyny wirtualnej minikube (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or )",
|
||||
"Amount of time to wait for a service in seconds": "Czas oczekiwania na serwis w sekundach",
|
||||
"Amount of time to wait for service in seconds": "Czas oczekiwania na servis w sekundach",
|
||||
"Available Commands": "Dostępne polecenia",
|
||||
"Basic Commands:": "Podstawowe polecenia",
|
||||
"Cannot find directory {{.path}} for mount": "Nie można odnoleść folderu {{.path}} do zamontowania",
|
||||
"Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "Upewnij się że minikube zpstało uruchomione i że podano poprawną przestrzeń nazw(-n flag) celem zamontowania",
|
||||
"Check that your --kubernetes-version has a leading 'v'. For example: 'v1.1.14'": "Upewnij się że --kubernetes-version ma 'v' z przodu. Na przykład `v1.1.14`",
|
||||
"Check that your apiserver flags are valid, or run 'minikube delete'": "",
|
||||
"Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --vm-driver=none": "",
|
||||
"Configuration and Management Commands:": "Polecenia konfiguracji i zarządzania",
|
||||
"Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "",
|
||||
"Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "",
|
||||
"Configuring environment for Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}}": "Konfiguruje środowisko dla: Kubernetesa w wersji {{.k8sVersion}} na {{.runtime}} {{.runtimeVersion}}",
|
||||
"Configuring local host environment ...": "Konfiguruje lokalne środowisko hosta",
|
||||
"Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "",
|
||||
"Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "",
|
||||
"Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "",
|
||||
"Created a new profile : {{.profile_name}}": "Stworzono nowy profil : {{.profile_name}}",
|
||||
"Creating a new profile failed": "Tworzenie nowego profilu nie powiodło się",
|
||||
"Creating mount {{.name}} ...": "",
|
||||
"Creating {{.driver_name}} VM (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Tworzenie {{.driver_name}} (CPUs={{.number_of_cpus}}, Pamięć={{.memory_size}}MB, Dysk={{.disk_size}}MB)...",
|
||||
"Default group id used for the mount": "Domyślne id groupy użyte dla montowania",
|
||||
"Default user id used for the mount": "Domyślne id użytkownia użyte dla montowania ",
|
||||
"Delete an image from the local cache.": "",
|
||||
"Deletes a local kubernetes cluster": "Usuwa lokalny klaster kubernetesa",
|
||||
"Deletes a local kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "Usuwa lokalny klaster kubernetesa. Ta komenda usuwa maszynę wirtualna i wszystkie powiązane pliki.",
|
||||
"Deletes a local kubernetes cluster. This command deletes the VM, and removes all associated files.": "Usuwa lokalny klaster kubernetesa. Ta komenda usuwa maszynę wirtualna i wszystkie powiązane pliki.",
|
||||
"Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "Usuwanie \"{{.profile_name}}\" - {{.driver_name}}...",
|
||||
"Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "",
|
||||
"Disable dynamic memory in your VM manager, or pass in a larger --memory value": "",
|
||||
"Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list": "",
|
||||
"Disables the filesystem mounts provided by the hypervisors": "",
|
||||
"Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "",
|
||||
"Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "",
|
||||
"Display dashboard URL instead of opening a browser": "",
|
||||
"Display the kubernetes addons URL in the CLI instead of opening it in the default browser": "",
|
||||
"Display the kubernetes service URL in the CLI instead of opening it in the default browser": "",
|
||||
"Display values currently set in the minikube config file": "Wyświetl wartości z obecnej konfiguracji minikube",
|
||||
"Display values currently set in the minikube config file.": "Wyświetl wartości z obecnej konfiguracji minikube",
|
||||
"Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "",
|
||||
"Docs have been saved at - {{.path}}": "Dokumentacja została zapisana w {{.path}}",
|
||||
"Documentation: {{.url}}": "Dokumentacja",
|
||||
"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}}\".",
|
||||
"Download complete!": "Pobieranie zakończone!",
|
||||
"Downloading VM boot image ...": "Pobieranie obrazu maszyny wirtualnej ...",
|
||||
"Downloading driver {{.driver}}:": "",
|
||||
"Downloading {{.name}} {{.version}}": "Pobieranie {{.name}} {{.version}}",
|
||||
"ERROR creating `registry-creds-dpr` secret": "",
|
||||
"ERROR creating `registry-creds-ecr` secret: {{.error}}": "",
|
||||
"ERROR creating `registry-creds-gcr` secret: {{.error}}": "",
|
||||
"Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "",
|
||||
"Enable experimental NVIDIA GPU support in minikube": "aktywuj eksperymentalne wsparcie minikube dla NVIDIA GPU",
|
||||
"Enable host resolver for NAT DNS requests (virtualbox driver only)": "",
|
||||
"Enable proxy for NAT DNS requests (virtualbox driver only)": "",
|
||||
"Enable the default CNI plugin (/etc/cni/net.d/k8s.conf). Used in conjunction with \\\"--network-plugin=cni\\": "",
|
||||
"Enable the default CNI plugin (/etc/cni/net.d/k8s.conf). Used in conjunction with \\\"--network-plugin=cni\\\".": "",
|
||||
"Enables the addon w/ADDON_NAME within minikube (example: minikube addons enable dashboard). For a list of available addons use: minikube addons list": "",
|
||||
"Enabling dashboard ...": "",
|
||||
"Environment variables to pass to the Docker daemon. (format: key=value)": "Zmienne środowiskowe do przekazania do demona docker (format: klucz-wartość)",
|
||||
"Error checking driver version: {{.error}}": "Błąd podczas sprawdzania wersij sterownika : {{.error}}",
|
||||
"Error creating list template": "",
|
||||
"Error creating minikube directory": "",
|
||||
"Error creating status template": "",
|
||||
"Error creating view template": "",
|
||||
"Error executing list template": "",
|
||||
"Error executing status template": "",
|
||||
"Error executing template": "",
|
||||
"Error executing view template": "",
|
||||
"Error finding port for mount": "",
|
||||
"Error getting IP": "",
|
||||
"Error getting bootstrapper": "",
|
||||
"Error getting client": "",
|
||||
"Error getting client: {{.error}}": "",
|
||||
"Error getting cluster": "",
|
||||
"Error getting cluster bootstrapper": "",
|
||||
"Error getting config": "",
|
||||
"Error getting host": "",
|
||||
"Error getting host status": "",
|
||||
"Error getting machine logs": "",
|
||||
"Error getting machine status": "",
|
||||
"Error getting service status": "",
|
||||
"Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "",
|
||||
"Error getting the host IP address to use from within the VM": "",
|
||||
"Error host driver ip status": "",
|
||||
"Error killing mount process": "",
|
||||
"Error loading api": "",
|
||||
"Error loading profile config": "",
|
||||
"Error loading profile config: {{.error}}": "",
|
||||
"Error loading profile {{.name}}: {{.error}}": "",
|
||||
"Error opening service": "",
|
||||
"Error parsing minikube version: {{.error}}": "Bład parsowania wersji minikube: {{.error}}",
|
||||
"Error parsing vmDriver version: {{.error}}": "Błąd parsowania wersji vmDriver: {{.error}}",
|
||||
"Error reading {{.path}}: {{.error}}": "Błąd odczytu {{.path}} {{.error}}",
|
||||
"Error restarting cluster": "Błąd podczas restartowania klastra",
|
||||
"Error setting shell variables": "Błąd podczas ustawiania zmiennych powłoki(shell)",
|
||||
"Error starting cluster": "Błąd podczas uruchamiania klastra",
|
||||
"Error starting mount": "",
|
||||
"Error unsetting shell variables": "",
|
||||
"Error while setting kubectl current context : {{.error}}": "Błąd podczas ustawiania kontekstu kubectl: {{.error}}",
|
||||
"Error writing mount pid": "",
|
||||
"Error: You have selected Kubernetes v{{.new}}, but the existing cluster for your profile is running Kubernetes v{{.old}}. Non-destructive downgrades are not supported, but you can proceed by performing one of the following options:\n\n* Recreate the cluster using Kubernetes v{{.new}}: Run \"minikube delete {{.profile}}\", then \"minikube start {{.profile}} --kubernetes-version={{.new}}\"\n* Create a second cluster with Kubernetes v{{.new}}: Run \"minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}\"\n* Reuse the existing cluster with Kubernetes v{{.old}} or newer: Run \"minikube start {{.profile}} --kubernetes-version={{.old}}\"": "",
|
||||
"Error: You have selected Kubernetes v{{.new}}, but the existing cluster for your profile is running Kubernetes v{{.old}}. Non-destructive downgrades are not supported, but you can proceed by performing one of the following options:\n* Recreate the cluster using Kubernetes v{{.new}}: Run \"minikube delete {{.profile}}\", then \"minikube start {{.profile}} --kubernetes-version={{.new}}\"\n* Create a second cluster with Kubernetes v{{.new}}: Run \"minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}\"\n* Reuse the existing cluster with Kubernetes v{{.old}} or newer: Run \"minikube start {{.profile}} --kubernetes-version={{.old}}": "Erreur : Vous avez sélectionné Kubernetes v{{.new}}, mais le cluster existent pour votre profil exécute Kubernetes v{{.old}}. Les rétrogradations non-destructives ne sont pas compatibles. Toutefois, vous pouvez poursuivre le processus en réalisant l'une des trois actions suivantes :\n* Créer à nouveau le cluster en utilisant Kubernetes v{{.new}} – exécutez \"minikube delete {{.profile}}\", puis \"minikube start {{.profile}} --kubernetes-version={{.new}}\".\n* Créer un second cluster avec Kubernetes v{{.new}} – exécutez \"minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}\".\n* Réutiliser le cluster existent avec Kubernetes v{{.old}} ou version ultérieure – exécutez \"minikube start {{.profile}} --kubernetes-version={{.old}}\".",
|
||||
"Error: [{{.id}}] {{.error}}": "",
|
||||
"Examples": "Przykłady",
|
||||
"Exiting": "",
|
||||
"Exiting due to driver incompatibility": "",
|
||||
"Failed runtime": "",
|
||||
"Failed to cache ISO": "",
|
||||
"Failed to cache and load images": "",
|
||||
"Failed to cache binaries": "",
|
||||
"Failed to cache images": "",
|
||||
"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Nie udało się zmienić uprawnień pliku {{.minikube_dir_path}}: {{.error}}",
|
||||
"Failed to check if machine exists": "",
|
||||
"Failed to check main repository and mirrors for images for images": "",
|
||||
"Failed to delete cluster: {{.error}}": "",
|
||||
"Failed to delete cluster: {{.error}}__1": "",
|
||||
"Failed to delete images": "",
|
||||
"Failed to delete images from config": "",
|
||||
"Failed to download kubectl": "Pobieranie kubectl nie powiodło się",
|
||||
"Failed to enable container runtime": "",
|
||||
"Failed to generate config": "",
|
||||
"Failed to get bootstrapper": "",
|
||||
"Failed to get command runner": "",
|
||||
"Failed to get driver URL": "",
|
||||
"Failed to get image map": "",
|
||||
"Failed to get machine client": "",
|
||||
"Failed to get service URL: {{.error}}": "",
|
||||
"Failed to kill mount process: {{.error}}": "Zabicie procesu nie powiodło się: {{.error}}",
|
||||
"Failed to list cached images": "",
|
||||
"Failed to remove profile": "Usunięcie profilu nie powiodło się",
|
||||
"Failed to save config": "Zapisywanie konfiguracji nie powiodło się",
|
||||
"Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}": "",
|
||||
"Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "",
|
||||
"Failed to setup certs": "Konfiguracja certyfikatów nie powiodła się",
|
||||
"Failed to setup kubeconfig": "Konfiguracja kubeconfig nie powiodła się",
|
||||
"Failed to update cluster": "Aktualizacja klastra nie powiodła się",
|
||||
"Failed to update config": "Aktualizacja konfiguracji nie powiodła się",
|
||||
"Failed unmount: {{.error}}": "",
|
||||
"File permissions used for the mount": "",
|
||||
"Flags": "",
|
||||
"Follow": "",
|
||||
"For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "",
|
||||
"For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/__1": "",
|
||||
"For more information, see:": "",
|
||||
"Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "",
|
||||
"Force minikube to perform possibly dangerous operations": "Wymuś wykonanie potencjalnie niebezpiecznych operacji",
|
||||
"Found network options:": "Wykryto opcje sieciowe:",
|
||||
"Found {{.number}} invalid profile(s) !": "Wykryto {{.number}} nieprawidłowych profili ! ",
|
||||
"Gets the kubernetes URL(s) for the specified service in your local cluster": "",
|
||||
"Gets the kubernetes URL(s) for the specified service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "",
|
||||
"Gets the logs of the running instance, used for debugging minikube, not user code.": "Pobiera logi z aktualnie uruchomionej instancji. Przydatne do debugowania kodu który nie należy do aplikacji użytkownika",
|
||||
"Gets the status of a local kubernetes cluster": "Pobiera aktualny status klastra kubernetesa",
|
||||
"Gets the status of a local kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for kubernetes NOK)": "",
|
||||
"Gets the value of PROPERTY_NAME from the minikube config file": "",
|
||||
"Global Flags": "",
|
||||
"Go template format string for the addon list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#AddonListTemplate": "",
|
||||
"Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "",
|
||||
"Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "",
|
||||
"Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "",
|
||||
"Group ID: {{.groupID}}": "",
|
||||
"Have you set up libvirt correctly?": "Czy napewno skonfigurowano libvirt w sposób prawidłowy?",
|
||||
"Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "",
|
||||
"If the above advice does not help, please let us know:": "",
|
||||
"If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --vm-driver=none.": "",
|
||||
"If true, only download and cache files for later use - don't install or start anything.": "",
|
||||
"If using the none driver, ensure that systemctl is installed": "Jeśli użyto sterownika 'none', upewnij się że systemctl jest zainstalowany",
|
||||
"If you are running minikube within a VM, consider using --vm-driver=none:": "",
|
||||
"Images Commands:": "",
|
||||
"Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "",
|
||||
"Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "",
|
||||
"Install VirtualBox, or select an alternative value for --vm-driver": "",
|
||||
"Install the latest hyperkit binary, and run 'minikube delete'": "",
|
||||
"Invalid size passed in argument: {{.error}}": "Nieprawidłowy rozmiar przekazany w argumencie: {{.error}}",
|
||||
"IsEnabled failed": "",
|
||||
"Kill the mount process spawned by minikube start": "",
|
||||
"Kubernetes {{.version}} is not supported by this release of minikube": "",
|
||||
"Launching Kubernetes ...": "Uruchamianie Kubernetesa...",
|
||||
"Launching proxy ...": "",
|
||||
"List all available images from the local cache.": "",
|
||||
"List of guest VSock ports that should be exposed as sockets on the host (hyperkit driver only)": "",
|
||||
"Lists all available minikube addons as well as their current statuses (enabled/disabled)": "",
|
||||
"Lists all minikube profiles.": "Wylistuj wszystkie profile minikube",
|
||||
"Lists all valid minikube profiles and detects all possible invalid profiles.": "",
|
||||
"Lists the URLs for the services in your local cluster": "",
|
||||
"Local folders to share with Guest via NFS mounts (hyperkit driver only)": "",
|
||||
"Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "",
|
||||
"Location of the minikube iso": "Ścieżka do obrazu iso minikube",
|
||||
"Location of the minikube iso.": "Ścieżka do obrazu iso minikube",
|
||||
"Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'": "Zaloguj się i wykonaj polecenie w maszynie za pomocą ssh. Podobne do 'docker-machine ssh'",
|
||||
"Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "Zaloguj się i wykonaj polecenie w maszynie za pomocą ssh. Podobne do 'docker-machine ssh'",
|
||||
"Message Size: {{.size}}": "",
|
||||
"Minikube is a CLI tool that provisions and manages single-node Kubernetes clusters optimized for development workflows.": "",
|
||||
"Minikube is a tool for managing local Kubernetes clusters.": "",
|
||||
"Modify minikube config": "",
|
||||
"Modify minikube's kubernetes addons": "",
|
||||
"Mount type: {{.name}}": "",
|
||||
"Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "",
|
||||
"Mounts the specified directory into minikube": "Montuje podany katalog wewnątrz minikube",
|
||||
"Mounts the specified directory into minikube.": "Montuje podany katalog wewnątrz minikube",
|
||||
"NOTE: This process must stay alive for the mount to be accessible ...": "",
|
||||
"Networking and Connectivity Commands:": "",
|
||||
"No minikube profile was found. You can create one using `minikube start`.": "",
|
||||
"None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "",
|
||||
"None of the known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "",
|
||||
"Not passing {{.name}}={{.value}} to docker env.": "",
|
||||
"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}}": "",
|
||||
"Open the addons URL with https instead of http": "",
|
||||
"Open the service URL with https instead of http": "",
|
||||
"Opening kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "",
|
||||
"Opening {{.url}} in your default browser...": "",
|
||||
"Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list": "",
|
||||
"Options: {{.options}}": "",
|
||||
"Outputs minikube shell completion for the given shell (bash or zsh)": "Zwraca autouzupełnianie poleceń minikube dla powłoki system(bash, zsh)",
|
||||
"Outputs minikube shell completion for the given shell (bash or zsh)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash-completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2": "",
|
||||
"Permissions: {{.octalMode}} ({{.writtenMode}})": "",
|
||||
"Please enter a value:": "Wprowadź wartość",
|
||||
"Please install the minikube hyperkit VM driver, or select an alternative --vm-driver": "",
|
||||
"Please install the minikube kvm2 VM driver, or select an alternative --vm-driver": "",
|
||||
"Please make sure the service you are looking for is deployed or is in the correct namespace.": "Proszę upewnij się, że serwis którego szukasz znajduje się w prawidłowej przestrzeni nazw",
|
||||
"Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "",
|
||||
"Please upgrade the '{{.driver_executable}}'. {{.documentation_url}}": "Proszę zaktualizować '{{.driver_executable}}'. {{.documentation_url}}",
|
||||
"Populates the specified folder with documentation in markdown about minikube": "",
|
||||
"Powering off \"{{.profile_name}}\" via SSH ...": "",
|
||||
"Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "przygowowywanie Kubernetesa {{.k8sVersion}} na {{.runtime}} {{.runtimeVersion}}...",
|
||||
"Print current and latest version number": "Wyświetl aktualna i najnowszą wersję",
|
||||
"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}}",
|
||||
"Profile gets or sets the current minikube profile": "Pobiera lub ustawia aktywny profil minikube",
|
||||
"Provide VM UUID to restore MAC address (hyperkit driver only)": "",
|
||||
"Pulling images ...": "",
|
||||
"Reboot to complete VirtualBox installation, and verify that VirtualBox is not blocked by your system": "Uruchom ponownie komputer aby zakończyć instalacje VirtualBox'a i upewnij się że nie jest on blokowany przez twój system",
|
||||
"Rebuild libvirt with virt-network support": "",
|
||||
"Received {{.name}} signal": "",
|
||||
"Registry mirrors to pass to the Docker daemon": "",
|
||||
"Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "",
|
||||
"Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "",
|
||||
"Related issues:": "Powiązane problemy",
|
||||
"Relaunching Kubernetes using {{.bootstrapper}} ...": "",
|
||||
"Removing {{.directory}} ...": "",
|
||||
"Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "",
|
||||
"Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "",
|
||||
"Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.": "",
|
||||
"Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}": "",
|
||||
"Retriable failure: {{.error}}": "",
|
||||
"Retrieve the ssh identity key path of the specified cluster": "Pozyskuje ścieżkę do klucza ssh dla wyspecyfikowanego klastra",
|
||||
"Retrieve the ssh identity key path of the specified cluster.": "Pozyskuje ścieżkę do klucza ssh dla wyspecyfikowanego klastra.",
|
||||
"Retrieves the IP address of the running cluster": "Pobiera adres IP aktualnie uruchomionego klastra",
|
||||
"Retrieves the IP address of the running cluster, and writes it to STDOUT.": "Pobiera adres IP aktualnie uruchomionego klastra i wypisuje go do STDOUT",
|
||||
"Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "",
|
||||
"Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "",
|
||||
"Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "",
|
||||
"Run 'minikube delete' to delete the stale VM": "",
|
||||
"Run kubectl": "Uruchamia kubectl",
|
||||
"Run minikube from the C: drive.": "",
|
||||
"Run the kubernetes client, download it if necessary.\nExamples:\nminikube kubectl -- --help\nkubectl get pods --namespace kube-system": "",
|
||||
"Run the minikube command as an Administrator": "",
|
||||
"Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "",
|
||||
"Set failed": "",
|
||||
"Sets an individual value in a minikube config file": "",
|
||||
"Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "",
|
||||
"Sets up docker env variables; similar to '$(docker-machine env)'": "Ustawia zmienne środowiskowe dockera. Podobne do `(docker-machine env)`",
|
||||
"Sets up docker env variables; similar to '$(docker-machine env)'.": "Ustawia zmienne środowiskowe dockera. Podobne do `(docker-machine env)`",
|
||||
"Setting profile failed": "Ustawianie profilu nie powiodło się",
|
||||
"Show only log entries which point to known problems": "Pokaż logi które wskazują na znane problemy",
|
||||
"Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "",
|
||||
"Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "Zignorowano zmianę kontekstu kubectl ponieważ --keep-context zostało przekazane",
|
||||
"Sorry that minikube crashed. If this was unexpected, we would love to hear from you:": "",
|
||||
"Sorry, Kubernetes {{.version}} is not supported by this release of minikube": "",
|
||||
"Sorry, completion support is not yet implemented for {{.name}}": "",
|
||||
"Sorry, the kubeadm.{{.parameter_name}} parameter is currently not supported by --extra-config": "",
|
||||
"Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "",
|
||||
"Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}": "",
|
||||
"Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "",
|
||||
"Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "",
|
||||
"Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "",
|
||||
"Specify the 9p version that the mount should use": "",
|
||||
"Specify the ip that the mount should be setup on": "",
|
||||
"Specify the mount filesystem type (supported types: 9p)": "",
|
||||
"Starting existing {{.driver_name}} VM for \"{{.profile_name}}\" ...": "",
|
||||
"Starts a local kubernetes cluster": "Uruchamianie lokalnego klastra kubernetesa",
|
||||
"Stopping \"{{.profile_name}}\" in {{.driver_name}} ...": "Zatrzymywanie \"{{.profile_name}}\" - {{.driver_name}}...",
|
||||
"Stops a local kubernetes cluster running in Virtualbox. This command stops the VM\nitself, leaving all files intact. The cluster can be started again with the \"start\" command.": "",
|
||||
"Stops a running local kubernetes cluster": "Zatrzymuje lokalny klaster kubernetesa",
|
||||
"Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "Pomyślnie zamontowano {{.sourcePath}} do {{.destinationPath}}",
|
||||
"Suggestion: {{.advice}}": "Sugestia: {{.advice}}",
|
||||
"Target directory {{.path}} must be an absolute path": "",
|
||||
"The \"{{.cluster_name}}\" cluster has been deleted.": "Klaster \"{{.cluster_name}}\" został usunięty",
|
||||
"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 'none' driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "",
|
||||
"The 'none' driver provides limited isolation and may reduce system security and reliability.": "",
|
||||
"The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "",
|
||||
"The CIDR to be used for service cluster IPs.": "",
|
||||
"The CIDR to be used for the minikube VM (virtualbox driver only)": "",
|
||||
"The KVM QEMU connection URI. (kvm2 driver only)": "",
|
||||
"The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "",
|
||||
"The KVM network name. (kvm2 driver only)": "Nazwa sieci KVM(wspierane tylko przez kvm2)",
|
||||
"The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "",
|
||||
"The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "",
|
||||
"The VM that minikube is configured for no longer exists. Run 'minikube delete'": "",
|
||||
"The apiserver listening port": "API nasłuchuje na porcie:",
|
||||
"The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "",
|
||||
"The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "",
|
||||
"The argument to pass the minikube mount command on start": "",
|
||||
"The argument to pass the minikube mount command on start.": "",
|
||||
"The cluster dns domain name used in the kubernetes cluster": "Domena dns clastra użyta przez kubernetesa",
|
||||
"The container runtime to be used (docker, crio, containerd)": "Runtime konteneryzacji (docker, crio, containerd).",
|
||||
"The container runtime to be used (docker, crio, containerd).": "",
|
||||
"The cri socket path to be used": "",
|
||||
"The cri socket path to be used.": "",
|
||||
"The docker host is currently not running": "",
|
||||
"The docker service is currently not active": "Serwis docker jest nieaktywny",
|
||||
"The driver '{{.driver}}' is not supported on {{.os}}": "Sterownik '{{.driver}} jest niewspierany przez system {{.os}}",
|
||||
"The existing \"{{.profile_name}}\" VM that was created using the \"{{.old_driver}}\" driver, and is incompatible with the \"{{.driver}}\" driver.": "",
|
||||
"The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "",
|
||||
"The initial time interval for each check that wait performs in seconds": "",
|
||||
"The kubernetes version that the minikube VM will use (ex: v1.2.3)": "Wersja kubernetesa która zostanie użyta przez wirtualną maszyna minikube (np. v1.2.3)",
|
||||
"The minikube VM is offline. Please run 'minikube start' to start it again.": "",
|
||||
"The name of the network plugin": "Nazwa pluginu sieciowego",
|
||||
"The name of the network plugin.": "Nazwa pluginu sieciowego",
|
||||
"The number of bytes to use for 9p packet payload": "",
|
||||
"The path on the file system where the docs in markdown need to be saved": "",
|
||||
"The service namespace": "",
|
||||
"The services namespace": "",
|
||||
"The time interval for each check that wait performs in seconds": "",
|
||||
"The value passed to --format is invalid": "Wartość przekazana do --format jest nieprawidłowa",
|
||||
"The value passed to --format is invalid: {{.error}}": "Wartość przekazana do --format jest nieprawidłowa: {{.error}}",
|
||||
"The vmwarefusion driver is deprecated and support for it will be removed in a future release.\n\t\t\tPlease consider switching to the new vmware unified driver, which is intended to replace the vmwarefusion driver.\n\t\t\tSee https://minikube.sigs.k8s.io/docs/reference/drivers/vmware/ for more information.\n\t\t\tTo disable this message, run [minikube config set ShowDriverDeprecationNotification false]": "",
|
||||
"The {{.driver_name}} driver should not be used with root privileges.": "{{.driver_name}} nie powinien byc używany z przywilejami root'a.",
|
||||
"There appears to be another hypervisor conflicting with KVM. Please stop the other hypervisor, or use --vm-driver to switch to it.": "",
|
||||
"There's a new version for '{{.driver_executable}}'. Please consider upgrading. {{.documentation_url}}": "",
|
||||
"These changes will take effect upon a minikube delete and then a minikube start": "",
|
||||
"This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "",
|
||||
"This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "",
|
||||
"This will keep the existing kubectl context and will create a minikube context.": "",
|
||||
"This will start the mount daemon and automatically mount files into minikube": "",
|
||||
"This will start the mount daemon and automatically mount files into minikube.": "",
|
||||
"Tip: To remove this root owned cluster, run: sudo {{.cmd}} delete": "",
|
||||
"Tip: Use 'minikube start -p \u003cname\u003e' to create a new cluster, or 'minikube delete' to delete this one.": "",
|
||||
"To connect to this cluster, use: kubectl --context={{.name}}": "Aby połączyć się z klastrem użyj: kubectl --context={{.name}}",
|
||||
"To connect to this cluster, use: kubectl --context={{.profile_name}}": "Aby połaczyć się z klastem uzyj: kubectl --context={{.profile_name}}",
|
||||
"To disable this notice, run: 'minikube config set WantUpdateNotification false'": "Aby wyłączyć te notyfikację, użyj: 'minikube config set WantUpdateNotification false'",
|
||||
"To disable this notice, run: 'minikube config set WantUpdateNotification false'\\n": "",
|
||||
"To proceed, either:\n 1) Delete the existing VM using: '{{.command}} delete'\n or\n 2) Restart with the existing driver: '{{.command}} start --vm-driver={{.old_driver}}'": "",
|
||||
"To start minikube with HyperV Powershell must be in your PATH`": "Aby uruchomić minikube z HyperV Powershell musi znajdować się w zmiennej PATH",
|
||||
"To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:": "",
|
||||
"Troubleshooting Commands:": "",
|
||||
"Unable to bind flags": "",
|
||||
"Unable to enable dashboard": "",
|
||||
"Unable to fetch latest version info": "",
|
||||
"Unable to generate docs": "",
|
||||
"Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "",
|
||||
"Unable to get VM IP address": "",
|
||||
"Unable to get bootstrapper: {{.error}}": "",
|
||||
"Unable to get current user": "",
|
||||
"Unable to get runtime": "",
|
||||
"Unable to get the status of the cluster.": "",
|
||||
"Unable to kill mount process: {{.error}}": "",
|
||||
"Unable to load cached images from config file.": "",
|
||||
"Unable to load cached images: {{.error}}": "",
|
||||
"Unable to load config: {{.error}}": "",
|
||||
"Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "",
|
||||
"Unable to parse oldest Kubernetes version from constants: {{.error}}": "",
|
||||
"Unable to pull images, which may be OK: {{.error}}": "",
|
||||
"Unable to remove machine directory: %v": "",
|
||||
"Unable to start VM": "Nie można uruchomić maszyny wirtualnej",
|
||||
"Unable to stop VM": "Nie można zatrzymać maszyny wirtualnej",
|
||||
"Unable to update {{.driver}} driver: {{.error}}": "",
|
||||
"Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...": "",
|
||||
"Unmounting {{.path}} ...": "",
|
||||
"Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "",
|
||||
"Unset variables instead of setting them": "",
|
||||
"Update server returned an empty list": "",
|
||||
"Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "",
|
||||
"Upgrading from Kubernetes {{.old}} to {{.new}}": "",
|
||||
"Usage": "",
|
||||
"Usage: minikube completion SHELL": "",
|
||||
"Usage: minikube delete": "",
|
||||
"Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "",
|
||||
"Use VirtualBox to remove the conflicting VM and/or network interfaces": "",
|
||||
"Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "",
|
||||
"User ID: {{.userID}}": "",
|
||||
"Userspace file server is shutdown": "",
|
||||
"Userspace file server:": "",
|
||||
"Using image repository {{.name}}": "",
|
||||
"Using the running {{.driver_name}} \"{{.profile_name}}\" VM ...": "",
|
||||
"VM driver is one of: %v": "Sterownik wirtualnej maszyny to jeden z: %v",
|
||||
"Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "Weryfikuję czy zmienne HTTP_PROXY i HTTPS_PROXY sa ustawione poprawnie",
|
||||
"Verify the IP address of the running cluster in kubeconfig.": "Weryfikuję adres IP działającego klastra w kubeconfig",
|
||||
"Verifying dashboard health ...": "Weryfikuję status dashboardu",
|
||||
"Verifying proxy health ...": "Weryfukuje status proxy",
|
||||
"Verifying:": "Weryfikuje :",
|
||||
"Version: {{.version}}": "",
|
||||
"VirtualBox and Hyper-V are having a conflict. Use '--vm-driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "",
|
||||
"VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "",
|
||||
"VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "",
|
||||
"VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "",
|
||||
"Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--vm-driver=none'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "",
|
||||
"Wait failed": "",
|
||||
"Wait failed: {{.error}}": "",
|
||||
"Wait until Kubernetes core services are healthy before exiting": "",
|
||||
"Wait until Kubernetes core services are healthy before exiting.": "",
|
||||
"Waiting for SSH access ...": "Oczekiwanie na połaczenie SSH...",
|
||||
"Waiting for the host to be provisioned ...": "",
|
||||
"Waiting for:": "Oczekiwanie na :",
|
||||
"Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "",
|
||||
"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": "",
|
||||
"You can delete them using the following command(s):": "",
|
||||
"You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "",
|
||||
"You must specify a service name": "Musisz podać nazwę serwisu",
|
||||
"Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "Twoje środowisko nie wspiera virtualizacji KVM. Upewnij się że qemu-kvm jest zainstalowane i uruchom 'virt-host-validate' aby rozwiązać problem.",
|
||||
"Your host does not support virtualization. If you are running minikube within a VM, try '--vm-driver=none'. Otherwise, enable virtualization in your BIOS": "",
|
||||
"Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "",
|
||||
"Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "",
|
||||
"Your minikube vm is not running, try minikube start.": "",
|
||||
"addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "",
|
||||
"addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "",
|
||||
"addon list failed": "",
|
||||
"addons modifies minikube addons files using subcommands like \"minikube addons enable heapster\"": "",
|
||||
"api load": "",
|
||||
"bash completion failed": "",
|
||||
"browser failed to open url: {{.error}}": "",
|
||||
"call with cleanup=true to remove old tunnels": "",
|
||||
"command runner": "",
|
||||
"config modifies minikube config files using subcommands like \"minikube config set vm-driver kvm\"\nConfigurable fields:\\n\\n": "",
|
||||
"config view failed": "",
|
||||
"dashboard service is not running: {{.error}}": "",
|
||||
"disable failed": "",
|
||||
"enable failed": "",
|
||||
"error creating clientset": "",
|
||||
"error creating machine client": "",
|
||||
"error getting driver": "",
|
||||
"error parsing the input ip address for mount": "",
|
||||
"error starting tunnel": "",
|
||||
"failed to open browser: {{.error}}": "Nie udało się otworzyć przeglądarki: {{.error}}",
|
||||
"if true, will embed the certs in kubeconfig.": "",
|
||||
"kubectl and minikube configuration will be stored in {{.home_folder}}": "konfiguracja minikube i kubectl będzie przechowywana w katalogu {{.home_dir}}",
|
||||
"kubectl not found in PATH, but is required for the dashboard. Installation guide: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "kubectl nie zostało odnaleźione w zmiennej środowiskowej ${PATH}. Instrukcja instalacji: https://kubernetes.io/docs/tasks/tools/install-kubectl/",
|
||||
"kubectl proxy": "",
|
||||
"logdir set failed": "",
|
||||
"max time to wait per Kubernetes core services to be healthy.": "",
|
||||
"minikube is not running, so the service cannot be accessed": "",
|
||||
"minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "",
|
||||
"minikube profile was successfully set to {{.profile_name}}": "",
|
||||
"minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} jest dostępne! Pobierz je z: {{.url}}",
|
||||
"mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "",
|
||||
"mount failed": "Montowanie się nie powiodło",
|
||||
"not enough arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "",
|
||||
"profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "",
|
||||
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
|
||||
"stat failed": "",
|
||||
"toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "",
|
||||
"tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP": "",
|
||||
"tunnel makes services of type LoadBalancer accessible on localhost": "",
|
||||
"unable to bind flags": "",
|
||||
"unable to set logtostderr": "",
|
||||
"unset failed": "",
|
||||
"unset minikube profile": "",
|
||||
"unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "",
|
||||
"unsets an individual value in a minikube config file": "",
|
||||
"unsupported driver: {{.name}}": "nie wspierany sterownik: {{.name}}",
|
||||
"update config": "",
|
||||
"usage: minikube addons configure ADDON_NAME": "",
|
||||
"usage: minikube addons disable ADDON_NAME": "",
|
||||
"usage: minikube addons enable ADDON_NAME": "",
|
||||
"usage: minikube addons list": "",
|
||||
"usage: minikube addons open ADDON_NAME": "",
|
||||
"usage: minikube config unset PROPERTY_NAME": "",
|
||||
"usage: minikube profile [MINIKUBE_PROFILE_NAME]": "",
|
||||
"zsh completion failed": "",
|
||||
"{{.addonName}} was successfully enabled": "{{.addonName}} został aktywowany pomyślnie",
|
||||
"{{.extra_option_component_name}}.{{.key}}={{.value}}": "",
|
||||
"{{.machine}} IP has been updated to point at {{.ip}}": "",
|
||||
"{{.machine}} IP was already correctly configured for {{.ip}}": "",
|
||||
"{{.name}} cluster does not exist": "Klaster {{.name}} nie istnieje",
|
||||
"{{.name}} has no available configuration options": "{{.name}} nie posiada opcji configuracji",
|
||||
"{{.name}} was successfully configured": "{{.name}} skonfigurowano pomyślnie",
|
||||
"{{.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