Merge branch 'master' into fix-TestNetworkPlugins-Linux_Docker

pull/15463/head
Predrag Rogic 2023-01-18 02:43:47 +00:00 committed by GitHub
commit 15bb620ca1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
54 changed files with 456 additions and 66 deletions

View File

@ -12,7 +12,7 @@ on:
- "!deploy/iso/**"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -6,7 +6,7 @@ on:
- master
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -22,7 +22,7 @@ on:
- deleted
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -6,7 +6,7 @@ on:
- 'v*-beta.*'
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -14,7 +14,7 @@ on:
- "!deploy/iso/**"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -12,7 +12,7 @@ on:
- "!deploy/iso/**"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read
@ -290,6 +290,125 @@ jobs:
if [ "$numPass" -lt 36 ];then echo "*** Failed to pass at least 36 ! ***";exit 2;fi
if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi
functional_docker_rootless_containerd_ubuntu:
permissions:
contents: none
needs: [build_minikube]
env:
TIME_ELAPSED: time
JOB_NAME: "functional_docker_rootless_containerd_ubuntu"
GOPOGH_RESULT: ""
SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643
DEBIAN_FRONTEND: noninteractive
# ubuntu-22.04 is needed for cgroup v2
runs-on: ubuntu-22.04
steps:
- name: Install kubectl
shell: bash
run: |
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install kubectl /usr/local/bin/kubectl
kubectl version --client=true
# https://rootlesscontaine.rs/getting-started/common/cgroup2/
- name: Set up cgroup v2 delegation
run: |
sudo mkdir -p /etc/systemd/system/user@.service.d
cat <<EOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf
[Service]
Delegate=cpu cpuset io memory pids
EOF
sudo systemctl daemon-reload
- name: Set up Rootless Docker
run: |
sudo apt-get remove moby-engine-*
curl https://get.docker.com | sudo sh
dockerd-rootless-setuptool.sh install -f
docker context use rootless
- name: Docker Info
shell: bash
run: |
echo "--------------------------"
docker version || true
echo "--------------------------"
docker info || true
echo "--------------------------"
docker system df || true
echo "--------------------------"
docker system info --format='{{json .}}'|| true
echo "--------------------------"
docker ps || true
echo "--------------------------"
- uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613
with:
go-version: ${{env.GO_VERSION}}
- name: Install gopogh
shell: bash
run: |
curl -LO https://github.com/medyagh/gopogh/releases/download/v0.13.0/gopogh-linux-amd64
sudo install gopogh-linux-amd64 /usr/local/bin/gopogh
- name: Download Binaries
uses: actions/download-artifact@9782bd6a9848b53b110e712e20e42d89988822b7
with:
name: minikube_binaries
path: minikube_binaries
- name: Run Integration Test
continue-on-error: false
# bash {0} to allow test to continue to next step. in case of
shell: bash {0}
run: |
cd minikube_binaries
mkdir -p report
mkdir -p testhome
chmod a+x e2e-*
chmod a+x minikube-*
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
MINIKUBE_HOME=$(pwd)/testhome ./minikube-linux-amd64 delete --all --purge
START_TIME=$(date -u +%s)
KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args="--vm-driver=docker --rootless --container-runtime=containerd" -test.run TestFunctional -test.timeout=30m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
END_TIME=$(date -u +%s)
TIME_ELAPSED=$(($END_TIME-$START_TIME))
min=$((${TIME_ELAPSED}/60))
sec=$((${TIME_ELAPSED}%60))
TIME_ELAPSED="${min} min $sec seconds "
echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV
- name: Generate HTML Report
shell: bash
run: |
cd minikube_binaries
export PATH=${PATH}:`go env GOPATH`/bin
go tool test2json -t < ./report/testout.txt > ./report/testout.json || true
STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true
echo status: ${STAT}
FailNum=$(echo $STAT | jq '.NumberOfFail')
TestsNum=$(echo $STAT | jq '.NumberOfTests')
GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}"
echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV
echo 'STAT<<EOF' >> $GITHUB_ENV
echo "${STAT}" >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
- uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb
with:
name: functional_docker_rootless_containerd_ubuntu
path: minikube_binaries/report
- name: The End Result functional_docker_rootless_containerd_ubuntu
shell: bash
run: |
echo ${GOPOGH_RESULT}
numFail=$(echo $STAT | jq '.NumberOfFail')
numPass=$(echo $STAT | jq '.NumberOfPass')
echo "*******************${numPass} Passes :) *******************"
echo $STAT | jq '.PassedTests' || true
echo "*******************************************************"
echo "---------------- ${numFail} Failures :( ----------------------------"
echo $STAT | jq '.FailedTests' || true
echo "-------------------------------------------------------"
if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi
if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi
if [ "$numPass" -lt 36 ];then echo "*** Failed to pass at least 36 ! ***";exit 2;fi
if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi
functional_podman_ubuntu:
permissions:
contents: none
@ -611,6 +730,7 @@ jobs:
[
functional_docker_ubuntu,
functional_docker_containerd_ubuntu,
functional_docker_rootless_containerd_ubuntu,
functional_podman_ubuntu,
functional_virtualbox_macos,
functional_baremetal_ubuntu20_04,
@ -627,6 +747,7 @@ jobs:
ls -lah
cp -r ./functional_docker_ubuntu ./all_reports/
cp -r ./functional_docker_containerd_ubuntu ./all_reports/
cp -r ./functional_docker_rootless_containerd_ubuntu ./all_reports/
cp -r ./functional_podman_ubuntu ./all_reports/
cp -r ./functional_virtualbox_macos ./all_reports/
cp -r ./functional_baremetal_ubuntu20_04 ./all_reports/

View File

@ -6,7 +6,7 @@ on:
- cron: "0 2,14 * * *"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -6,7 +6,7 @@ on:
- cron: "0 2,14 * * *"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -5,7 +5,7 @@ on:
types: [released]
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -6,7 +6,7 @@ on:
- "translations/**"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -6,7 +6,7 @@ on:
- cron: "0 10 * * 1"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -6,7 +6,7 @@ on:
- cron: "0 9 * * 1"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -6,7 +6,7 @@ on:
- cron: "0 10 * * 1"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -6,7 +6,7 @@ on:
- cron: "0 9 * * 1"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -6,7 +6,7 @@ on:
- cron: "0 10 * * 1"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -6,7 +6,7 @@ on:
- cron: "0 8 * * 1"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -6,7 +6,7 @@ on:
- cron: "0 6 * * 1"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -6,7 +6,7 @@ on:
- cron: "0 0 2 * *"
env:
GOPROXY: https://proxy.golang.org
GO_VERSION: '1.19.3'
GO_VERSION: '1.19.5'
permissions:
contents: read

View File

@ -34,9 +34,9 @@ RPM_REVISION ?= 0
# used by hack/jenkins/release_build_and_upload.sh and KVM_BUILD_IMAGE, see also BUILD_IMAGE below
# update this only by running `make update-golang-version`
GO_VERSION ?= 1.19.3
GO_VERSION ?= 1.19.5
# update this only by running `make update-golang-version`
GO_K8S_VERSION_PREFIX ?= v1.25.0
GO_K8S_VERSION_PREFIX ?= v1.26.0
# replace "x.y.0" => "x.y". kube-cross and go.dev/dl use different formats for x.y.0 go versions
KVM_GO_VERSION ?= $(GO_VERSION:.0=)
@ -901,7 +901,7 @@ else
-buildvcs=false \
-installsuffix "static" \
-ldflags="$(KVM2_LDFLAGS)" \
-tags "libvirt.1.3.1 without_lxc" \
-tags "libvirt_without_lxc" \
-o $@ \
k8s.io/minikube/cmd/drivers/kvm
endif
@ -911,15 +911,14 @@ out/docker-machine-driver-kvm2-%:
ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y)
docker image inspect -f '{{.Id}} {{.RepoTags}}' $(KVM_BUILD_IMAGE_AMD64) || $(MAKE) kvm-image-amd64
$(call DOCKER,$(KVM_BUILD_IMAGE_AMD64),/usr/bin/make $@ COMMIT=$(COMMIT))
# make extra sure that we are linking with the older version of libvirt (1.3.1)
test "`strings $@ | grep '^LIBVIRT_[0-9]' | sort | tail -n 1`" = "LIBVIRT_1.2.9"
else
$(if $(quiet),@echo " GO $@")
$(Q)GOARCH=$* \
go build \
-buildvcs=false \
-installsuffix "static" \
-ldflags="$(KVM2_LDFLAGS)" \
-tags "libvirt.1.3.1 without_lxc" \
-tags "libvirt_without_lxc" \
-o $@ \
k8s.io/minikube/cmd/drivers/kvm
endif

View File

@ -75,7 +75,7 @@ var nodeStartCmd = &cobra.Command{
if err != nil {
_, err := maybeDeleteAndRetry(cmd, *cc, *n, nil, err)
if err != nil {
node.ExitIfFatal(err)
node.ExitIfFatal(err, false)
exit.Error(reason.GuestNodeStart, "failed to start node", err)
}
}

View File

@ -218,9 +218,11 @@ func runStart(cmd *cobra.Command, args []string) {
}
}
useForce := viper.GetBool(force)
starter, err := provisionWithDriver(cmd, ds, existing)
if err != nil {
node.ExitIfFatal(err)
node.ExitIfFatal(err, useForce)
machine.MaybeDisplayAdvice(err, ds.Name)
if specified {
// If the user specified a driver, don't fallback to anything else
@ -280,7 +282,7 @@ func runStart(cmd *cobra.Command, args []string) {
kubeconfig, err := startWithDriver(cmd, starter, existing)
if err != nil {
node.ExitIfFatal(err)
node.ExitIfFatal(err, useForce)
exit.Error(reason.GuestStart, "failed to start node", err)
}

View File

@ -20,6 +20,7 @@ import (
"bytes"
"crypto/sha1"
"encoding/hex"
"errors"
"flag"
"fmt"
"log"
@ -51,6 +52,10 @@ import (
"k8s.io/minikube/pkg/minikube/machine"
"k8s.io/minikube/pkg/minikube/out"
_ "k8s.io/minikube/pkg/provision"
dconfig "github.com/docker/cli/cli/config"
ddocker "github.com/docker/cli/cli/context/docker"
dstore "github.com/docker/cli/cli/context/store"
)
const minikubeEnableProfile = "MINIKUBE_ENABLE_PROFILING"
@ -68,6 +73,8 @@ func main() {
bridgeLogMessages()
defer klog.Flush()
propagateDockerContextToEnv()
// Don't parse flags when running as kubectl
_, callingCmd := filepath.Split(os.Args[0])
callingCmd = strings.TrimSuffix(callingCmd, ".exe")
@ -247,3 +254,54 @@ func setLastStartFlags() {
klog.Warningf("Unable to set default flag value for log_file: %v", err)
}
}
// propagateDockerContextToEnv propagates the current context in ~/.docker/config.json to $DOCKER_HOST,
// so that google/go-containerregistry can pick it up.
func propagateDockerContextToEnv() {
if os.Getenv("DOCKER_HOST") != "" {
// Already explicitly set
return
}
currentContext := os.Getenv("DOCKER_CONTEXT")
if currentContext == "" {
dockerConfigDir := dconfig.Dir()
if _, err := os.Stat(dockerConfigDir); err != nil {
if !errors.Is(err, os.ErrNotExist) {
klog.Warning(err)
}
return
}
cf, err := dconfig.Load(dockerConfigDir)
if err != nil {
klog.Warningf("Unable to load the current Docker config from %q", dockerConfigDir)
return
}
currentContext = cf.CurrentContext
}
if currentContext == "" {
return
}
storeConfig := dstore.NewConfig(
func() interface{} { return &ddocker.EndpointMeta{} },
dstore.EndpointTypeGetter(ddocker.DockerEndpoint, func() interface{} { return &ddocker.EndpointMeta{} }),
)
st := dstore.New(dconfig.ContextStoreDir(), storeConfig)
md, err := st.GetMetadata(currentContext)
if err != nil {
klog.Warningf("Unable to resolve the current Docker CLI context %q: %v", currentContext, err)
return
}
dockerEP, ok := md.Endpoints[ddocker.DockerEndpoint]
if !ok {
// No warning (the context is not for Docker)
return
}
dockerEPMeta, ok := dockerEP.(ddocker.EndpointMeta)
if !ok {
klog.Warningf("expected docker.EndpointMeta, got %T", dockerEP)
return
}
if dockerEPMeta.Host != "" {
os.Setenv("DOCKER_HOST", dockerEPMeta.Host)
}
}

View File

@ -39,7 +39,7 @@ RUN if [ "$PREBUILT_AUTO_PAUSE" != "true" ]; then cd ./cmd/auto-pause/ && go bui
# for a kubernetes node image, it doesn't contain much we don't need
FROM ubuntu:focal-20221019 as kicbase
ARG BUILDKIT_VERSION="v0.10.3"
ARG BUILDKIT_VERSION="v0.11.0"
ARG FUSE_OVERLAYFS_VERSION="v1.7.1"
ARG CONTAINERD_FUSE_OVERLAYFS_VERSION="1.0.3"
ARG CRIO_VERSION="1.24"
@ -223,8 +223,8 @@ RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/' | sed 's/
# enable podman socket on archs that support it
RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/') && if [ "$ARCH" != "ppc64le" ]; then systemctl enable podman.socket; fi
# enable docker which is default
RUN systemctl enable docker.service
# making SSH work for docker container
RUN systemctl enable docker.service
# making SSH work for docker container
# based on https://github.com/rastasheep/ubuntu-sshd/blob/master/18.04/Dockerfile
RUN mkdir /var/run/sshd
RUN echo 'root:root' |chpasswd
@ -240,7 +240,7 @@ RUN sed -ri 's/mountopt = "nodev,metacopy=on"/mountopt = "nodev"/g' /etc/contain
EXPOSE 22
# create docker user for minikube ssh. to match VM using "docker" as username
RUN adduser --ingroup docker --disabled-password --gecos '' docker
RUN adduser --ingroup docker --disabled-password --gecos '' docker
RUN adduser docker sudo
RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/') && if [ "$ARCH" != "ppc64le" ]; then adduser docker podman; fi
RUN adduser docker buildkit
@ -255,5 +255,5 @@ RUN mkdir -p /kind
RUN rm -rf \
/usr/share/doc/* \
/usr/share/man/* \
/usr/share/local/*
/usr/share/local/*
RUN echo "kic! Build: ${COMMIT_SHA} Time :$(date)" > "/kic.txt"

8
go.mod
View File

@ -69,7 +69,8 @@ require (
golang.org/x/term v0.4.0
golang.org/x/text v0.6.0
gonum.org/v1/plot v0.12.0
google.golang.org/api v0.106.0
google.golang.org/api v0.107.0
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.26.0
k8s.io/apimachinery v0.26.0
@ -79,13 +80,14 @@ require (
k8s.io/klog/v2 v2.80.1
k8s.io/kubectl v0.26.0
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d
libvirt.org/go/libvirt v1.8009.0
libvirt.org/go/libvirt v1.9000.0
sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0
)
require (
github.com/Xuanwo/go-locale v1.1.0
github.com/blang/semver v3.5.1+incompatible
github.com/docker/cli v20.10.22+incompatible
github.com/docker/go-connections v0.4.0
github.com/google/go-github/v43 v43.0.0
github.com/juju/clock v1.0.2
@ -121,13 +123,13 @@ require (
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/cyphar/filepath-securejoin v0.2.3 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/docker/cli v20.10.20+incompatible // indirect
github.com/docker/distribution v2.8.1+incompatible // indirect
github.com/docker/docker-credential-helpers v0.7.0 // indirect
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
github.com/fatih/color v1.13.0 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/fvbommel/sortorder v1.0.1 // indirect
github.com/go-fonts/liberation v0.2.0 // indirect
github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81 // indirect
github.com/go-logr/logr v1.2.3 // indirect

14
go.sum
View File

@ -349,8 +349,8 @@ github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
github.com/docker/cli v20.10.20+incompatible h1:lWQbHSHUFs7KraSN2jOJK7zbMS2jNCHI4mt4xUFUVQ4=
github.com/docker/cli v20.10.20+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/cli v20.10.22+incompatible h1:0E7UqWPcn4SlvLImMHyh6xwyNRUGdPxhstpHeh0bFL0=
github.com/docker/cli v20.10.22+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY=
github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
@ -411,6 +411,8 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
github.com/fvbommel/sortorder v1.0.1 h1:dSnXLt4mJYH25uDDGa3biZNQsozaUWDSWeKJ0qqFfzE=
github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0=
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@ -1539,8 +1541,8 @@ google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqiv
google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI=
google.golang.org/api v0.58.0/go.mod h1:cAbP2FsxoGVNwtgNAmmn3y5G1TWAiVYRmg4yku3lv+E=
google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU=
google.golang.org/api v0.106.0 h1:ffmW0faWCwKkpbbtvlY/K/8fUl+JKvNS5CVzRoyfCv8=
google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY=
google.golang.org/api v0.107.0 h1:I2SlFjD8ZWabaIFOfeEDg3pf0BHJDh6iYQ1ic3Yu/UU=
google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@ -1772,8 +1774,8 @@ k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d h1:0Smp/HP1OH4Rvhe+4B8nWGERtlqAGSftbSbbmm45oFs=
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
libvirt.org/go/libvirt v1.8009.0 h1:ifd5De36JZPex+gZRe352REw5OVHBIfpprBigs22shM=
libvirt.org/go/libvirt v1.8009.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ=
libvirt.org/go/libvirt v1.9000.0 h1:u95YEBuk85v2GO6+M3qv+WdAu2JKQSMWhCJ4R+kNDQo=
libvirt.org/go/libvirt v1.9000.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=

View File

@ -30,7 +30,7 @@ function Write-GithubStatus {
$env:SHORT_COMMIT=$env:COMMIT.substring(0, 7)
$gcs_bucket="minikube-builds/logs/$env:MINIKUBE_LOCATION/$env:ROOT_JOB_ID"
$env:MINIKUBE_SUPPRESS_DOCKER_PERFORMANCE="true"
$GoVersion = "1.19.3"
$GoVersion = "1.19.5"
# Docker's kubectl breaks things, and comes earlier in the path than the regular kubectl. So download the expected kubectl and replace Docker's version.
$KubeVersion = (Invoke-WebRequest -Uri 'https://storage.googleapis.com/kubernetes-release/release/stable.txt' -UseBasicParsing).Content
@ -68,7 +68,7 @@ if ($CurrentGo -NotLike "*$GoVersion*") {
# Download gopogh and gotestsum
(New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.13.0/gopogh.exe", "C:\Go\bin\gopogh.exe")
(New-Object Net.WebClient).DownloadFile("https://github.com/gotestyourself/gotestsum/releases/download/v1.8.2/gotestsum_1.8.2_windows_amd64.tar.gz", "$env:TEMP\gotestsum.tar.gz")
(New-Object Net.WebClient).DownloadFile("https://github.com/gotestyourself/gotestsum/releases/download/v1.9.0/gotestsum_1.9.0_windows_amd64.tar.gz", "$env:TEMP\gotestsum.tar.gz")
tar --directory "C:\Go\bin\" -xzvf "$env:TEMP\gotestsum.tar.gz" "gotestsum.exe"
# Grab all the scripts we'll need for integration tests

View File

@ -22,7 +22,7 @@ if (($# < 1)); then
exit 1
fi
VERSION_TO_INSTALL=1.19.3
VERSION_TO_INSTALL=1.19.5
INSTALL_PATH=${1}
function current_arch() {

View File

@ -18,7 +18,7 @@ set -eux -o pipefail
function install_gotestsum() {
rm -f $(which gotestsum)
GOBIN="$GOROOT/bin" go install gotest.tools/gotestsum@v1.8.2
GOBIN="$GOROOT/bin" go install gotest.tools/gotestsum@v1.9.0
}
which gotestsum || install_gotestsum

View File

@ -39,6 +39,7 @@ declare -rx DEB_VER="$(make deb_version)"
docker kill $(docker ps -q) || true
docker rm $(docker ps -aq) || true
docker system prune -a --volumes -f
make -j 16 \
all \
minikube-darwin-arm64 \

View File

@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
FROM gcr.io/gcp-runtimes/ubuntu_16_0_4
FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \

View File

@ -24,10 +24,10 @@ import (
const (
// Version is the current version of kic
Version = "v0.0.36-1668787669-15272"
Version = "v0.0.36-1673540226-15630"
// SHA of the kic base image
baseImageSHA = "06094fc04b5dc02fbf1e2de7723c2a6db5d24c21fd2ddda91f6daaf29038cd9c"
baseImageSHA = "03c9592728381094cbd0ff9603f75ae6b485dd7a390c3e35f02ae5ec10f2f3ad"
// The name of the GCR kicbase repository
gcrRepo = "gcr.io/k8s-minikube/kicbase-builds"
// The name of the Dockerhub kicbase repository

View File

@ -197,6 +197,11 @@ func (k *Bootstrapper) init(cfg config.ClusterConfig) error {
"Port-10250", // For "none" users who already have a kubelet online
"Swap", // For "none" users who have swap configured
}
if version.GE(semver.MustParse("1.13.0")) {
ignore = append(ignore,
"NumCPU", // For "none" users who have too few CPUs
)
}
if version.GE(semver.MustParse("1.20.0")) {
ignore = append(ignore,
"Mem", // For "none" users who have too little memory

View File

@ -36,6 +36,7 @@ import (
"k8s.io/minikube/pkg/minikube/detect"
"k8s.io/minikube/pkg/minikube/image"
"k8s.io/minikube/pkg/minikube/localpath"
"k8s.io/minikube/pkg/minikube/out"
)
var (
@ -138,6 +139,12 @@ func ImageToCache(img string) error {
return errors.Wrap(err, "getting remote image")
}
klog.V(3).Infof("Writing image %v", tag)
if out.JSON {
if err := tarball.WriteToFile(f, tag, i); err != nil {
return errors.Wrap(err, "writing tarball image")
}
return nil
}
errchan := make(chan error)
p := pb.Full.Start64(0)
fn := image.Tag(ref.Name())

View File

@ -131,6 +131,7 @@ func saveToTarFile(iname, rawDest string, overwrite bool) error {
img, cname, err := retrieveImage(ref, iname)
if err != nil {
klog.V(2).ErrorS(err, "an error while retrieving the image")
return errCacheImageDoesntExist
}
if img == nil {

View File

@ -25,12 +25,13 @@ import (
"k8s.io/minikube/pkg/minikube/bootstrapper/kubeadm"
"k8s.io/minikube/pkg/minikube/cruntime"
"k8s.io/minikube/pkg/minikube/exit"
"k8s.io/minikube/pkg/minikube/out"
"k8s.io/minikube/pkg/minikube/reason"
"k8s.io/minikube/pkg/minikube/style"
)
// ExitIfFatal before exiting will try to check for different error types and provide advice if we know for sure what the error is
func ExitIfFatal(err error) {
func ExitIfFatal(err error, force bool) {
if err == nil {
return
}
@ -52,7 +53,10 @@ func ExitIfFatal(err error) {
if runtime.GOOS == "windows" {
exit.Message(reason.RsrcInsufficientWindowsDockerCores, "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available")
}
exit.Message(reason.RsrcInsufficientCores, "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available")
if !force {
exit.Message(reason.RsrcInsufficientCores, "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available")
}
out.Error(reason.RsrcInsufficientCores, "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available")
}
if errors.Is(err, kubeadm.ErrNoExecLinux) {

View File

@ -261,7 +261,7 @@ func handleAPIServer(starter Starter, cr cruntime.Manager, hostIP net.IP) (*kube
bs := setupKubeAdm(starter.MachineAPI, *starter.Cfg, *starter.Node, starter.Runner)
err = bs.StartCluster(*starter.Cfg)
if err != nil {
ExitIfFatal(err)
ExitIfFatal(err, false)
out.LogEntries("Error starting cluster", err, logs.FindProblems(cr, bs, *starter.Cfg, starter.Runner))
return nil, bs, err
}

View File

@ -48,7 +48,7 @@ func init() {
Config: configure,
Status: status,
Default: true,
Priority: registry.Experimental,
Priority: registry.Default,
}); err != nil {
panic(fmt.Sprintf("register failed: %v", err))
}

View File

@ -26,7 +26,7 @@ minikube start [flags]
--apiserver-names strings 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
--apiserver-port int The apiserver listening port (default 8443)
--auto-update-drivers If set, automatically updates drivers to the latest version. Defaults to true. (default true)
--base-image string The base image to use for docker/podman drivers. Intended for local development. (default "gcr.io/k8s-minikube/kicbase-builds:v0.0.36-1668787669-15272@sha256:06094fc04b5dc02fbf1e2de7723c2a6db5d24c21fd2ddda91f6daaf29038cd9c")
--base-image string The base image to use for docker/podman drivers. Intended for local development. (default "gcr.io/k8s-minikube/kicbase-builds:v0.0.36-1673540226-15630@sha256:03c9592728381094cbd0ff9603f75ae6b485dd7a390c3e35f02ae5ec10f2f3ad")
--binary-mirror string Location to fetch kubectl, kubelet, & kubeadm binaries from.
--cache-images If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none. (default true)
--cert-expiration duration Duration until minikube certificate expiration, defaults to three years (26280h). (default 26280h0m0s)

View File

@ -425,6 +425,24 @@ verifies files and packages installed inside minikube ISO/Base image
## TestGvisorAddon
tests the functionality of the gVisor addon
## TestImageBuild
makes sure the 'minikube image build' command works fine
#### validateNormalImageBuild
is normal test case for minikube image build, with -t parameter
#### validateNormalImageBuildWithSpecifiedDockerfile
is normal test case for minikube image build, with -t and -f parameter
#### validateImageBuildWithBuildArg
is a test case building with --build-opt
#### validateImageBuildWithBuildEnv
is a test case building with --build-env
#### validateImageBuildWithDockerIgnore
is a test case building with .dockerignore
## TestIngressAddonLegacy
tests ingress and ingress-dns addons with legacy k8s version <1.19

View File

@ -17,7 +17,7 @@ To do so, we use the [Docker Machine](https://github.com/docker/machine) library
* [Docker]({{<ref "docker.md">}}) - container-based (preferred)
* [KVM2]({{<ref "kvm2.md">}}) - VM-based (preferred)
* [VirtualBox]({{<ref "virtualbox.md">}}) - VM
* [QEMU]({{<ref "qemu.md">}}) - VM (experimental)
* [QEMU]({{<ref "qemu.md">}}) - VM
* [None]({{<ref "none.md">}}) - bare-metal
* [Podman]({{<ref "podman.md">}}) - container (experimental)
* [SSH]({{<ref "ssh.md">}}) - remote ssh
@ -30,7 +30,7 @@ To do so, we use the [Docker Machine](https://github.com/docker/machine) library
* [VirtualBox]({{<ref "virtualbox.md">}}) - VM
* [Parallels]({{<ref "parallels.md">}}) - VM
* [VMware Fusion]({{<ref "vmware.md">}}) - VM
* [QEMU]({{<ref "qemu.md">}}) - VM (experimental)
* [QEMU]({{<ref "qemu.md">}}) - VM
* [SSH]({{<ref "ssh.md">}}) - remote ssh
## Windows

View File

@ -34,10 +34,7 @@ minikube start supports some qemu specific flags:
The QEMU driver has two networking options, `user` & `socket_vmnet`.
{{% tabs %}}
{{% tab "user - limited functionality" %}}
The `user` network is not a dedicated network, it doesn't support some networking commands such as `minikube service` and `minikube tunnel`, and its IP address is not reachable from the host.
{{% /tab %}}
{{% tab "socket_vmnet - experimental/needs installation" %}}
{{% tab "socket_vmnet - needs installation" %}}
### Requirements
@ -57,6 +54,9 @@ minikube start --driver qemu --network socket_vmnet
The `socket_vmnet` network is a dedicated network and supports the `minikube service` and `minikube tunnel` commands.
{{% /tab %}}
{{% tab "user - limited functionality" %}}
The `user` network is not a dedicated network, it doesn't support some networking commands such as `minikube service` and `minikube tunnel`, and its IP address is not reachable from the host.
{{% /tab %}}
{{% /tabs %}}
## Known Issues

View File

@ -166,3 +166,12 @@ minikube start
Currently a static IP can only be set when using the Docker or Podman driver.
For more details see the [static IP tutorial]({{< ref "docs/tutorials/static_ip.md" >}}).
## How to ignore the kubeadm requirements and pre-flight checks (such as minimum CPU count)?
Kubeadm has certain software and hardware requirements to maintain a stable Kubernetes cluster. However, these requirements can be ignored (such as when running minikube on a single CPU) by running the following:
```
minikube start --force --extra-config=kubeadm.skip-phases=preflight
```
This is not recommended, but for some users who are willing to accept potential performance or stability issues, this may be the only option.

View File

@ -536,7 +536,7 @@ minikube dashboard
{{% tabs %}}
{{% tab Service %}}
Create a sample deployment and expose it on port 80:
Create a sample deployment and expose it on port 8080:
```shell
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0

View File

@ -87,6 +87,8 @@ minikube start --container-runtime=docker --vm=true
<h2 class="step"><span class="fa-stack fa-1x"><i class="fa fa-circle fa-stack-2x"></i><strong class="fa-stack-1x text-primary">3</strong></span>Point Docker CLI to minikube</h2>
Use the `minikube docker-env` command to point your terminal's Docker CLI to the Docker instance inside minikube.
<br>Note: the default profile name is `minikube`
{{% tabs %}}
{{% tab "bash/zsh" %}}
```

View File

@ -52,6 +52,9 @@ func validateMountCmd(ctx context.Context, t *testing.T, profile string) { // no
if HyperVDriver() {
t.Skip("skipping: mount broken on hyperv: https://github.com/kubernetes/minikube/issues/5029")
}
if RootlessDriver() {
t.Skip("skipping: rootless driver does not support mount (because 9p is not mountable inside UserNS)")
}
if runtime.GOOS == "windows" {
t.Skip("skipping: mount broken on windows: https://github.com/kubernetes/minikube/issues/8303")

View File

@ -0,0 +1,132 @@
//go:build integration
/*
Copyright 2022 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package integration
import (
"context"
"os/exec"
"strings"
"testing"
"k8s.io/minikube/pkg/minikube/constants"
)
// TestImageBuild makes sure the 'minikube image build' command works fine
func TestImageBuild(t *testing.T) {
if ContainerRuntime() != constants.Docker {
t.Skip()
}
type validateFunc func(context.Context, *testing.T, string)
profile := UniqueProfileName("image")
ctx, cancel := context.WithTimeout(context.Background(), Minutes(15))
startArgs := []string{"start", "-p", profile}
startArgs = append(startArgs, StartArgs()...)
rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...))
defer Cleanup(t, profile, cancel)
if err != nil {
t.Fatalf("failed to start minikube with args: %q : %v", rr.Command(), err)
}
// Serial tests
t.Run("serial", func(t *testing.T) {
tests := []struct {
name string
validator validateFunc
}{
{"NormalBuild", validateNormalImageBuild},
{"BuildWithBuildArg", validateImageBuildWithBuildArg},
{"BuildWithDockerIgnore", validateImageBuildWithDockerIgnore},
{"BuildWithSpecifiedDockerfile", validateNormalImageBuildWithSpecifiedDockerfile},
{"validateImageBuildWithBuildEnv", validateImageBuildWithBuildEnv},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
tc.validator(ctx, t, profile)
if t.Failed() && *postMortemLogs {
PostMortemLogs(t, profile)
}
})
}
})
}
// validateNormalImageBuild is normal test case for minikube image build, with -t parameter
func validateNormalImageBuild(ctx context.Context, t *testing.T, profile string) {
defer PostMortemLogs(t, profile)
args := []string{"image", "build", "-t", "aaa:latest", "./testdata/image-build/test-normal", "-p", profile}
rr, err := Run(t, exec.CommandContext(ctx, Target(), args...))
if err != nil {
t.Fatalf("failed to build image with args: %q : %v", rr.Command(), err)
}
}
// validateNormalImageBuildWithSpecifiedDockerfile is normal test case for minikube image build, with -t and -f parameter
func validateNormalImageBuildWithSpecifiedDockerfile(ctx context.Context, t *testing.T, profile string) {
defer PostMortemLogs(t, profile)
args := []string{"image", "build", "-t", "aaa:latest", "-f", "inner/Dockerfile", "./testdata/image-build/test-f", "-p", profile}
rr, err := Run(t, exec.CommandContext(ctx, Target(), args...))
if err != nil {
t.Fatalf("failed to build image with args: %q : %v", rr.Command(), err)
}
}
// validateImageBuildWithBuildArg is a test case building with --build-opt
func validateImageBuildWithBuildArg(ctx context.Context, t *testing.T, profile string) {
// test case for bug in https://github.com/kubernetes/minikube/issues/12384
defer PostMortemLogs(t, profile)
args := []string{"image", "build", "-t", "aaa:latest", "--build-opt=build-arg=ENV_A=test_env_str", "--build-opt=no-cache", "./testdata/image-build/test-arg", "-p", profile}
rr, err := Run(t, exec.CommandContext(ctx, Target(), args...))
if err != nil {
t.Fatalf("failed to build image with args: %q : %v", rr.Command(), err)
}
output := rr.Stdout.String()
if !strings.Contains(output, "test_env_str") {
t.Fatalf("failed to pass build-args with args: %q : %s", rr.Command(), output)
}
}
// validateImageBuildWithBuildEnv is a test case building with --build-env
func validateImageBuildWithBuildEnv(ctx context.Context, t *testing.T, profile string) {
defer PostMortemLogs(t, profile)
// current this test cannot be passed because issue https://github.com/kubernetes/minikube/issues/12431 hasn't been fixed, so this test case is not enabled
t.Skip("skipping due to https://github.com/kubernetes/minikube/issues/12431")
args := []string{"image", "build", "--build-opt=help", "--build-env=DOCKER_BUILDKIT=1", ".", profile}
rr, err := Run(t, exec.CommandContext(ctx, Target(), args...))
if err != nil {
t.Fatalf("failed to build image with args: %q : %v", rr.Command(), err)
}
output := rr.Stdout.String()
if strings.Contains(output, "--cgroup-parent") {
// when DOCKER_BUILDKIT=0, "docker build" has the --cgroup-parent parameter, and when DOCKER_BUILDKIT=1, DOCKER_BUILDKIT doesn't provide this option at all.
// we have set --build-env=DOCKER_BUILDKIT=1 so --cgroup-parent should not appear in help page
t.Fatalf("failed to pass envs for command %q : %v", rr.Command(), err)
}
}
// validateImageBuildWithDockerIgnore is a test case building with .dockerignore
func validateImageBuildWithDockerIgnore(ctx context.Context, t *testing.T, profile string) {
defer PostMortemLogs(t, profile)
args := []string{"image", "build", "-t", "aaa:latest", "./testdata/image-build/test-normal", "--build-opt=no-cache", "-p", profile}
rr, err := Run(t, exec.CommandContext(ctx, Target(), args...))
if err != nil {
t.Fatalf("failed to build image with args: %q : %v", rr.Command(), err)
}
}

View File

@ -149,6 +149,11 @@ func PodmanDriver() bool {
return strings.Contains(*startArgs, "--driver=podman") || strings.Contains(*startArgs, "--vm-driver=podman")
}
// Rootless returns whether or not this test is using the rootless KIC driver
func RootlessDriver() bool {
return strings.Contains(*startArgs, "--rootless")
}
// KicDriver returns whether or not this test is using the docker or podman driver
func KicDriver() bool {
return DockerDriver() || PodmanDriver()
@ -176,9 +181,9 @@ func arm64Platform() bool {
}
// NeedsPortForward returns access to endpoints with this driver needs port forwarding
// (Docker on non-Linux platforms requires ports to be forwarded to 127.0.0.1)
// (Docker on non-Linux platforms and rootless KIC requires ports to be forwarded to 127.0.0.1)
func NeedsPortForward() bool {
return KicDriver() && (runtime.GOOS == "windows" || runtime.GOOS == "darwin") || detect.IsMicrosoftWSL()
return KicDriver() && (runtime.GOOS == "windows" || runtime.GOOS == "darwin") || detect.IsMicrosoftWSL() || RootlessDriver()
}
// CanCleanup returns if cleanup is allowed

View File

@ -0,0 +1,5 @@
FROM alpine:latest
ARG ENV_A
ARG ENV_B
RUN echo "test-build-arg" $ENV_A $ENV_B
CMD ["/bin/sh", "-c"]

View File

@ -0,0 +1,4 @@
FROM alpine:latest
ARG AAA
RUN echo "test-build-arg" $AAA
CMD ["/bin/sh", "-c"]

View File

@ -0,0 +1,3 @@
FROM alpine:latest
CMD ["/bin/sh", "-c"]

View File

@ -0,0 +1 @@
Dockerfile

View File

@ -0,0 +1,3 @@
FROM alpine:latest
CMD ["/bin/sh", "-c"]

View File

@ -0,0 +1,3 @@
FROM alpine:latest
CMD ["/bin/sh", "-c"]

View File

@ -25,8 +25,8 @@
"--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "l'indicateur --network est valide uniquement avec les pilotes docker/podman et KVM, il va être ignoré",
"--network flag is only valid with the docker/podman, KVM and Qemu drivers, it will be ignored": "L'indicateur --network n'est valide qu'avec les pilotes docker/podman, KVM et Qemu, il sera ignoré",
"--network with QEMU must be 'user' or 'socket_vmnet'": "--network avec QEMU doit être 'user' ou 'socket_vmnet'",
"--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "",
"--static-ip overrides --subnet, --subnet will be ignored": "",
"--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "--static-ip n'est implémenté que sur les pilotes Docker et Podman, l'indicateur sera ignoré",
"--static-ip overrides --subnet, --subnet will be ignored": "--static-ip remplace --subnet, --subnet sera ignoré",
"1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube delete {{.profile}}\n\t\t minikube start {{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\t \n\t\t minikube start {{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) Recréez le cluster avec Kubernetes {{.new}}, en exécutant :\n\t \n\t\t minikube delete {{.profile}}\n\t\t minikube start {{.profile}} - -kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Créez un deuxième cluster avec Kubernetes {{.new}}, en exécutant :\n\t \n \t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Utiliser le cluster existant à la version Kubernetes {{.old}}, en exécutant :\n\t \n\t\t minikube start {{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t \t",
"1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) Recréez le cluster avec Kubernetes {{.new}}, en exécutant :\n\t \n\t\t minikube delete {{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Créez un deuxième cluster avec Kubernetes {{.new}}, en exécutant :\n\t \n \t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Utiliser le cluster existant à la version Kubernetes {{.old}}, en exécutant :\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t \t",
"1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Cliquez sur l'icône de menu \"Docker for Desktop\"\n\t\t\t2. Cliquez sur \"Preferences\"\n\t\t\t3. Cliquez sur \"Ressources\"\n\t\t\t4. Augmentez la barre de défilement \"CPU\" à 2 ou plus\n\t\t\t5. Cliquez sur \"Apply \u0026 Restart\"",
@ -570,7 +570,7 @@
"Select a valid value for --dnsdomain": "Sélectionnez une valeur valide pour --dnsdomain",
"Send trace events. Options include: [gcp]": "Envoyer des événements de trace. Les options incluent : [gcp]",
"Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "Le service '{{.service}}' n'a pas été trouvé dans l'espace de noms '{{.namespace}}'.\nVous pouvez sélectionner un autre espace de noms en utilisant 'minikube service {{.service}} -n \u003cnamespace\u003e'. Ou répertoriez tous les services à l'aide de 'minikube service list'",
"Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "",
"Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "Définissez une adresse IP statique pour le cluster minikube, l'adresse IP doit être : privée, IPv4, et le dernier octet doit être compris entre 2 et 254, par exemple 192.168.200.200 (pilotes Docker et Podman uniquement)",
"Set failed": "Échec de la définition",
"Set flag to delete all profiles": "Définir un indicateur pour supprimer tous les profils",
"Set flag to stop all profiles (clusters)": "Définir un indicateur pour arrêter tous les profils (clusters)",
@ -875,7 +875,7 @@
"You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier les processeurs d'un cluster minikube existant. Veuillez d'abord supprimer le cluster.",
"You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier la taille du disque pour un cluster minikube existant. Veuillez d'abord supprimer le cluster.",
"You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier la taille de la mémoire d'un cluster minikube existant. Veuillez d'abord supprimer le cluster.",
"You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "",
"You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier l'adresse IP statique d'un cluster minikube existant. Veuillez d'abord supprimer le cluster.",
"You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "Vous vous êtes authentifié avec un compte de service qui n'a pas de fichier JSON associé. Le module complémentaire GCP Auth nécessite des informations d'identification avec un fichier JSON pour continuer.",
"You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue. The image pull secret has been imported.": "Vous vous êtes authentifié avec un compte de service qui n'a pas de fichier JSON associé. Le module complémentaire GCP Auth nécessite des informations d'identification avec un fichier JSON pour continuer. Le secret d'extraction d'image a été importé.",
"You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file in order to continue. The image pull secret has been imported.": "Vous vous êtes authentifié avec un compte de service qui n'a pas de fichier JSON associé. L'authentification GCP nécessite des informations d'identification avec un fichier JSON pour continuer. Le secret d'extraction d'image a été importé.",