minikube與kubectl版本不一致問題

王清培發表於2021-05-29

在使用minikube學習的時候,會出現你在mac上安裝的minikube預設是最新版本,但是實際情況是需要安裝低一些版本。可以按照k8s官方文件安裝的時候指定不同安裝版本,如果很慢或者無法訪問直接走github安裝也行。

curl -LO https://github.com/kubernetes/minikube/releases/download/v1.16.0/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

比較尷尬的是安裝kubectl工具,預設使用brew安裝的一定是最新的版本,最新的版本一些命令已經移除了,比較常見的就是

kubectl run kubia --image=wangqingpei/kubia --port=8080 --generator=run/v1
Error: unknown flag: --generator
See 'kubectl run --help' for usage.

由於一些原因,還尷尬的就是k8s官方安裝路徑是訪問不了的。如:https://storage.googleapis.com.cnpmjs.org/release

github上kubectl的release也都是一些原始檔,安裝起來也很麻煩。

通過國內一些映象站點也沒有mac上的kubectl版本,只有linux類的。如:https://mirrors.ustc.edu.cn/kubernetes/apt/pool/

如果非要在mac上使用有個辦法就是在docker裡跑kubectl指定版本,然後設定~.kube/config。

如果minikube不經常重啟,埠是固定的就不需要每次設定,基礎映象的時候就設定進去。

  • step1:容器裡安裝kubectl
    直接 wget下載,我是使用的deb檔案,需要安裝下dpkg,然後複製到/usr/local/bin,再試下版本是否正確。
wget https://mirrors.ustc.edu.cn/kubernetes/apt/pool/kubectl_1.10.0-00_amd64_e391c19fa377b84587676c5577222ceb5d8fcbde442c79a9cd55d1f344293834.deb

dpkg -X 解壓deb檔案
  • step2:將容器匯出映象,便於隨時使用
d commit -a "@plen" -m"kubectlv1.10.7" kubectl  kubectlv1.10.7
  • step3:設定kubectl客戶端證書和配置
vim ~.kube/config

通過mac宿主機器的 k config view 直接複製貼上

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /Users/wangqingpei/.minikube/ca.crt
    server: https://host.docker.internal:57219
  name: minikube
contexts:
- context:
    cluster: minikube
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /Users/wangqingpei/.minikube/profiles/minikube/client.crt
    client-key: /Users/wangqingpei/.minikube/profiles/minikube/client.key

地址 host.docker.internal 是為了在容器裡訪問宿主埠。

  • step 4:啟動映象&設定volume卷對映
    這一步只要將config原路徑完整對映即可。
d run -it --rm --name kubectl2  \
-v /Users/wangqingpei/.minikube/profiles/minikube/client.crt:/Users/wangqingpei/.minikube/profiles/minikube/client.crt \
-v /Users/wangqingpei/.minikube/ca.crt:/Users/wangqingpei/.minikube/ca.crt \
-v /Users/wangqingpei/.minikube/profiles/minikube/client.key:/Users/wangqingpei/.minikube/profiles/minikube/client.key \
kubectlv1.10.7
  • step 5:如果覺得麻煩,將上述過程做成Dockerfile
FROM debian:latest
MAINTAINER "kubectl@plen"
RUN apt-get -y update && \
	apt-get -y  install wget && \
	apt-get -y install vim && \
	wget https://mirrors.ustc.edu.cn/kubernetes/apt/pool/kubectl_1.10.7-00_amd64_52542710044cb4ad30def799dc4392d18a56cd6f2dc0d675825a085d0b2882f1.deb && \
	dpkg -X ./kubectl_1.10.7-00_amd64_52542710044cb4ad30def799dc4392d18a56cd6f2dc0d675825a085d0b2882f1.deb extract && \
	mv ./extract/usr/bin/kubectl /usr/local/bin
ENTRYPOINT ["bash"]

如果在容器裡使用kubectl出現認證問題加上 --insecure-skip-tls-verify 引數。

額外提下,如果在mac裡跑k8s service 不通的話記得使用 minikube tunnel 隧道 。

相關文章