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變量。

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