Merge branch 'master' into fix-TestNetworkPlugins-Linux_Docker
commit
15bb620ca1
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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/
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
11
Makefile
11
Makefile
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
8
go.mod
|
@ -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
14
go.sum
|
@ -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=
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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" %}}
|
||||
```
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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"]
|
|
@ -0,0 +1,4 @@
|
|||
FROM alpine:latest
|
||||
ARG AAA
|
||||
RUN echo "test-build-arg" $AAA
|
||||
CMD ["/bin/sh", "-c"]
|
|
@ -0,0 +1,3 @@
|
|||
FROM alpine:latest
|
||||
|
||||
CMD ["/bin/sh", "-c"]
|
|
@ -0,0 +1 @@
|
|||
Dockerfile
|
|
@ -0,0 +1,3 @@
|
|||
FROM alpine:latest
|
||||
|
||||
CMD ["/bin/sh", "-c"]
|
|
@ -0,0 +1,3 @@
|
|||
FROM alpine:latest
|
||||
|
||||
CMD ["/bin/sh", "-c"]
|
|
@ -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é.",
|
||||
|
|
Loading…
Reference in New Issue