minkube安装

由于我国局域网的现状,我在安装minikube的时候出现了问题。

按照官网教程下载来了minikube和kubectl,然后按照官网教程minikube start。我是在Virtualbox里面的Ubuntu18.04虚拟机里面装的,所以不能嵌套虚拟机,因此采用docker作为容器。

因此,命令变为 minikube start --driver=none。然而直接运行就会显示

VM is unable to access k8s.gcr.io, you may need to configure a proxy or set --image-repository

然后在之后出现大量报错,类似如下错误

[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.18.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

为此,我配置了proxy(electron-ssr)。配置proxy的时候遇到了巨多的坑,如下:

  1. 在设置proxy的时候,一定要注意环境变量是分大小写的,如果一开始设置错了HTTP_PROXY,后来设置了http_proxy,也是会有问题的,必须用export -n HTTP_PROXY 删除之。

  2. 即便使用了export -n HTTP_PROXY 删除了环境变量,如果直接在当前的Shell使用minikube start命令,也是会出错的,因为此时该变量是从环境变量里删除了,依然存在于当前的Shell中,比如通过echo $HTTP_PROXY 依然可以显示出来。因此要设置HTTP_PROXY=""来删除这个Shell变量。注意这里等号两边不能有空格!

  3. 一般minikube start 需要sudo,这样子又会导致一个问题:不使用sudo设置的环境变量在sudo时会丢失,因此可以用以下的方法:

    • sudo export ...
    • 更改/etc/sudoers,在里面的Defaults env_keep=后面加上HTTP_PROXY HTTPS_PROXY http_proxy https_proxy NO_PROXY no_proxy ,注意要通过空格分离。
  4. 官方文档 已经提示设置代理之后需要设置NO_PROXY 环境变量防止访问本地网络被阻隔。但是在我自己运行的时候,依然会报错:

    but your NO_PROXY environment does not include the minikube IP (10.0.2.15)

    因此需要在NO_PROXY里面加上这一项。注意到这里面多个地址并列的时候逗号之间也不能有空格。

在这些设置完之后,也要把环境变量传给Docker。因此命令要变为

export http_proxy="http://127.0.0.1:1081"
export https_proxy="http://127.0.0.1:1081"
export NO_PROXY="localhost,127.0.0.1,10.96.0.0/12,192.168.99.0/24,192.168.39.0/24,10.0.2.15"
sudo https_proxy=$https_proxy minikube start --driver=none \
--docker-env http_proxy=$http_proxy \
--docker-env https_proxy=$https_proxy \
--docker-env NO_PROXY=$NO_PROXY,$(sudo minikube ip)

这里$(sudo minikube ip) 就是10.0.2.15

注意到要用minikube delete来删除一下之前的安装文件。多次尝试之后,终于出现了如下的输出:

▪ kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
> kubelet.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s
> kubeadm.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s
> kubectl.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s
> kubeadm: 37.96 MiB / 37.96 MiB [---------------] 100.00% 3.41 MiB p/s 11s
> kubectl: 41.98 MiB / 41.98 MiB [-------------] 100.00% 867.31 KiB p/s 50s
> kubelet: 108.01 MiB / 108.01 MiB [---------] 100.00% 578.07 KiB p/s 3m11s

之前一直在kubelet.resolv-conf那里卡着。正当我以为minikube终于要成功start时,又出现了一堆错误:

💥 initialization failed, will try again: run: /bin/bash -c "sudo env PATH=/var/lib/minikube/binaries/v1.18.0:$PATH kubeadm init --config

stderr:
W0329 14:24:09.463412 31628 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.18.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1

To see the stack trace of this error execute with --v=5 or higher

💣 Error starting cluster: run: /bin/bash -c “sudo env PATH=/var/lib/minikube/binaries/v1.18.0:$PATH kubeadm init --config /var/tmp/minikube/kubeadm.yaml --ignore-preflight-errors=DirAvailable–etc-kubernetes-manifests,DirAvailable–var-lib-minikube,DirAvailable–var-lib-minikube-etcd,FileAvailable–etc-kubernetes-manifests-kube-scheduler.yaml,FileAvailable–etc-kubernetes-manifests-kube-apiserver.yaml,FileAvailable–etc-kubernetes-manifests-kube-controller-manager.yaml,FileAvailable–etc-kubernetes-manifests-etcd.yaml,Port-10250,Swap,SystemVerification”: exit status 1
stdout:
[init] Using Kubernetes version: v1.18.0
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using ‘kubeadm config images pull’

stderr:
W0329 14:33:01.162969 22356 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.18.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.18.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1

To see the stack trace of this error execute with --v=5 or higher

😿 minikube is exiting due to an error. If the above message is not useful, open an issue:
👉 https://github.com/kubernetes/minikube/issues/new/choose

看着这么一长串的报错真的令人崩溃,于是我决定关闭代理,直接用镜像。通过查找多方资料,把命令变为

export http_proxy="http://127.0.0.1:1081"
export https_proxy="http://127.0.0.1:1081"
export NO_PROXY="localhost,127.0.0.1,10.96.0.0/12,192.168.99.0/24,192.168.39.0/24,10.0.2.15"
sudo https_proxy=$https_proxy minikube start --driver=none \
	--registry-mirror=https://docker.mirrors.ustc.edu.cn \
	--image-mirror-country=cn \
	--docker-env http_proxy=$http_proxy \
	--docker-env https_proxy=$https_proxy \
	--docker-env NO_PROXY=$NO_PROXY,$(sudo minikube ip)

在等待一段时间后,终于显示:

🏄 Done! kubectl is now configured to use “minikube”

再通过

sudo kubectl cluster-info可以看到如下信息:

Kubernetes master is running at https://10.0.2.15:8443
KubeDNS is running at https://10.0.2.15:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

如果minikube start成功之后出现如下信息:

To further debug and diagnose cluster problems, use ‘kubectl cluster-info dump’.
The connection to the server 10.0.2.15:8443 was refused - did you specify the right host or port?

很可能是代理问题导致的,注意设置NO_PROXY变量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章