minikube 踩坑和填坑。
環境說明
宿主機的環境
- 操作系統:Windows 10
- 虛擬化:VirtualBox 6.0
說明:在 Win 10 系統裏嘗試過 Hyper-V,感覺不好用,所以還是迴歸到了 VirtualBox。如果你用的是 Hyper-V,或者是 MacOS/Linux 操作系統,中間部分流程應該也可以參考。
如果有疑問可以查看 官方文檔。
版本
- Minikube:1.7.3
- Kubernetes:1.17.3
說明:目前(2020-03-15)minikube 最新的版本是 1.8.2。我前幾天嘗試的版本是 1.8.1,踩到了其中的大 bug。
從 1.8.0 版本開始,它在部署的時候需要下載一個 Preload tarball images
的鏡像文件,大小有 500 MB。
這個文件安裝過程中是先下載到 .minikube\cache\preloaded-tarball
目錄中,並且支持斷點續傳。但是,當我把從其它地方下載完全的文件放到該目錄中時,並沒有效果。也就是說緩存實際上沒用。
最新的 1.8.2 似乎修復了這個 bug。
Minikube 最新的 1.8.2 和 1.7.3 對應的 Kubernetes 版本都是 1.17.3。使用舊版本啓動集羣需要額外下載的軟件大小是這個 preload image 的一半,而且鑑於這個功能現在還貌似不夠穩定,所以 推薦 使用 1.7.3 版本的 minikube。
下載
使用 minikube 安裝部署所需要下載(拉取)的東西分爲以下幾類:
- minikube 命令:從 GitHub 上下載
- minikube 啓動虛機所需 iso:安裝過程中自動下載,通過配置
--iso-url
加速,會緩存到本地 - kubernetes 集羣部署所需鏡像,安裝過程中自動拉取,通過配置
--image-repository
加速 - kubernetes 集羣部署所需程序,安裝過程中自動下載,沒有配置項,但是會緩存到本地
- kubernetes 宿主機(即 Windows)所需客戶端程序,安裝過程自動下載,沒有配置項,但是會緩存
- 應用所需鏡像:安裝過程不涉及,但是可以通過
--registry-mirror
指定加速鏡像
可緩存的文件
整理了可緩存下載的文件如下,它們在 minikube
部署集羣的時候會自動下載,如果下載時間過長,可以考慮通過其它下載工具提前下載,保存到指定目錄(具體下文會說到)。
- kubectl.exe ,下載地址
這是 Windows 系統下的 kubectl 客戶端程序,啓動 dashboard 時需要。
不管是通過 minikube 哪個版本安裝,這個文件都是必需的。
這是 Linux 系統下的程序,虛擬機內安裝 Kubernetes 需要。1.7.3 的 minikube 需要分別下載。
- preloaded-images-k8s-v1-v1.17.3-docker-overlay2.tar.lz4, 下載地址
這是 1.8.0 之後的 minikube 需要下載的文件
以上文件下載無需科學上網,但是要看情況,出現無法連接可以多試幾次。
安裝 minikube
minikube 就是單個 .exe
文件,既可以直接下載 minikube-windows-amd64.exe
然後改名,也可以下載 minikube-installer.exe
安裝。推薦後者,因爲安裝包的體積更小,而且使用更方便。
執行 minikube-installer.exe
,這個安裝過程非常簡單。
默認安裝路徑是 C:\Program Files\Kubernetes\Minikube
,安裝程序會自動把該路徑加入到 PATH
中。
運行 cmd
命令行,檢查 minikube
的版本:
> minikube version
minikube version: v1.7.3
commit: 436667c819c324e35d7e839f8116b968a2d0a3ff
啓動集羣
注意:如果以前安裝過,需要使用 minikube delete
命令把舊版本刪除。
如果版本不一致或者出現莫名其妙的錯誤,可以把 C:\Users\你的用戶名\.minikube
也刪除。
minikube v1.7.3
執行:
minikube start --vm-driver=virtualbox --image-mirror-country=cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.7.3.iso --registry-mirror=https://reg-mirror.qiniu.com
選項說明:
-
--vm-driver
如果不寫會自動檢測,可選值 virtualbox, vmwarefusion, hyperv, vmware -
--image-mirror-country
需要使用的鏡像鏡像的國家/地區代碼。留空以使用全球代碼。對於中國大陸用戶,請將其設置爲 cn。 -
--image-repository
用來拉取 Kubernetes 集羣所需鏡像的倉庫 -
--iso-url
下載 minikube 虛機安裝所需的 iso 文件 -
--registry-mirror
docker registry 的鏡像源,集羣安裝後拉取鏡像加速用,可以使用其它加速器地址
更多選項可以執行
minikube start --help
首先是下載 iso 鏡像:
* minikube 1.8.2 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.8.2
* To disable this notice, run: 'minikube config set WantUpdateNotification false'
! Microsoft Windows 10 Pro 10.0.18362 Build 18362 上的 minikube v1.7.3
* Using the virtualbox driver based on user configuration
* 正在使用鏡像存儲庫 registry.cn-hangzhou.aliyuncs.com/google_containers
* 正在下載 VM boot image...
> minikube-v1.7.3.iso: 30.81 MiB / 167.39 MiB 18.41% 830.43 KiB p/s ETA 2m
這時候會自動創建 C:\Users\你的用戶名\.minikube
文件夾,該目錄下有一個 cache
文件夾,下載的文件都會緩存在這裏。
接下來是創建虛機:
* 正在創建 virtualbox 虛擬機(CPUs=2,Memory=2000MB, Disk=20000MB)...
* 正在 Docker 19.03.6 中準備 Kubernetes v1.17.3…
這裏的虛機配置對應的選項: --cpu=2
, --memory='2000mb'
,--disk-size='20000mb'
,可以自己指定。
這個階段虛機內部開始拉取鏡像,所以會花一點時間,可以另起一個命令行,執行:
> minikube ssh
_ _
_ _ ( ) ( )
___ ___ (_) ___ (_)| |/') _ _ | |_ __
/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy v1.17.3 ae853e93800d 4 weeks ago 116MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver v1.17.3 90d27391b780 4 weeks ago 171MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager v1.17.3 b0f1517c1f4b 4 weeks ago 161MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler v1.17.3 d109c0821a2b 4 weeks ago 94.4MB
registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard v2.0.0-beta8 eb51a3597525 3 months ago 90.8MB
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns 1.6.5 70f311871ae1 4 months ago 41.6MB
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd 3.4.3-0 303ce5db0e90 4 months ago 288MB
registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper v1.0.2 3b08661dc379 4 months ago 40.1MB
registry.cn-hangzhou.aliyuncs.com/google_containers/pause 3.1 da86e6ba6ca1 2 years ago 742kB
registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner v1.8.1 4689081edb10 2 years ago 80.8MB
$
回到安裝所在的命令行,可以看到需要下載的程序:
如果感覺半天沒動靜了,可以按一下回車
* 正在 Docker 19.03.6 中準備 Kubernetes v1.17.3…
* 正在下載 kubelet v1.17.3
* 正在下載 kubectl v1.17.3
* 正在下載 kubeadm v1.17.3
下載後的文件仍然是保存在 C:\Users\你的用戶名\.minikube\cache\linux\v1.17.3
文件夾中,如果這裏下載的較慢,可以:
- 提前下載好對應的文件
- 此處按下 Ctrl-C 中斷 minikube
- 把文件拷貝到對應的文件夾下
- 重新執行上面的
minikube start
minikube 會從中斷處繼續往下執行。
* 正在啓動 Kubernetes ...
* Enabling addons: default-storageclass, storage-provisioner
* 等待集羣上線...
* 完成!kubectl 已經配置至 "minikube"
* 爲獲得最佳結果,請安裝 kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl/
安裝完成,來看看集羣的狀態:
> minikube kubectl get nodes
* 正在下載 kubectl.exe v1.17.3
這裏又要下載 Windows 系統下的 kubectl 客戶端程序,下載後的文件保存在 C:\Users\你的用戶名\.minikube\cache\windows\v1.17.3
文件夾中,如果這裏下載的較慢,仍然可以提前下載好拷貝過去。
> minikube kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 11m v1.17.3
就緒狀態,開始啓動 dashboard
:
> minikube dashboard
X kubectl not found in PATH, but is required for the dashboard. Installation guide: https://kubernetes.io/docs/tasks/tools/install-kubectl/
這裏提示我們沒有在環境變量 PATH
中找到 kubectl
,只需要將上面下載下來的 kubectl.exe
拷貝到任何一個已經在 PATH
中的目錄即可。爲了方便管理,我們可以把它和 minikube.exe
放一起。
> minikube dashboard
* 正在開啓 dashboard ...
* Verifying dashboard health ...
* Launching proxy ...
* Verifying proxy health ...
* Opening http://127.0.0.1:54032/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
此時命令行會一直阻塞在這裏,自動打開瀏覽器,進入 Dashboard:
對於手動部署過 dashboard 的人來說,這個確實太方便了
並且後續可以直接使用 kubectl
命令來操作集羣:
> kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-7f9c544f75-kw6g9 1/1 Running 0 29m
kube-system coredns-7f9c544f75-p84v8 1/1 Running 0 29m
kube-system etcd-minikube 1/1 Running 0 29m
kube-system kube-apiserver-minikube 1/1 Running 0 29m
kube-system kube-controller-manager-minikube 1/1 Running 0 29m
kube-system kube-proxy-4jf76 1/1 Running 0 29m
kube-system kube-scheduler-minikube 1/1 Running 0 29m
kube-system storage-provisioner 1/1 Running 1 29m
kubernetes-dashboard dashboard-metrics-scraper-7b64584c5c-x7bwz 1/1 Running 0 14m
kubernetes-dashboard kubernetes-dashboard-79d9cd965-lq7xj 1/1 Running 0 14m
直接 SSH 連接集羣
在命令行執行 minikube ssh
可以進入到虛機內部,但是因爲終端類型的原因,會出現亂碼,比如執行 top
命令:
所以最好還是通過模擬終端工具(Xshell/SecureCRT等)登入,
- 先執行
minikube ip
查詢到虛機的 IP 地址 - SSH 用戶名選擇爲
docker
- 認證方式選擇爲
Public Key
, - 選擇對應的私鑰文件,
C:\Users\你的用戶名\.minikube\machines\minikube\id_rsa
附:最新 minikube v1.8.2 安裝說明
執行:
minikube start --driver=virtualbox --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --registry-mirror=https://reg-mirror.qiniu.com --iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.8.0.iso
-
--driver
: 原--vm-driver
改爲--driver
-
--image-mirror-country
: 帶上該選項會報錯,不帶也沒影響 -
--image-repository
:一樣 -
--iso-url
注意版本號 -
--registry-mirror
: 同上
安裝過程中不再需要下載那 3 個文件,改爲下載 preloaded-images-k8s-v1-v1.17.3-docker-overlay2.tar.lz4
的鏡像文件,大小 500MB,保存在 C:\Users\你的用戶名\.minikube\cache\preloaded-tarball
。
支持斷點續傳,並且可以提前把下載好的文件拷貝過去。
其它步驟和 v1.7.3 一樣,不再贅述。
文章內容雖基礎,整理髮布不輕鬆
如果看過有幫助,不妨 點贊 + 關注,謝謝!