Minikube Mount 使用指南

什麼是 Minikube Mount?

Minikube Mount 是 Minikube 提供的本機目錄掛載功能,可以將開發機上的資料夾掛載到 Minikube 節點內,讓 Kubernetes Pod 透過 hostPath 讀取或寫入這些檔案。對於本機開發、測試資料同步、日誌觀察或快速驗證 Volume 行為來說,這是一個很方便的工具。

需要注意的是,minikube mount 不是 Kubernetes 原生的持久化儲存方案,而是 Minikube 在本機開發環境提供的輔助功能。它適合用於單機測試與開發流程,不建議直接套用到正式環境。

Minikube Mount 的主要功能:

  • 本機資料同步:將開發機上的目錄提供給 Minikube 節點使用
  • 快速測試 Volume:搭配 hostPath 驗證 Pod 掛載目錄後的讀寫行為
  • 開發檔案共享:讓容器直接讀取本機設定檔、測試資料或靜態檔案
  • 日誌觀察:將容器產生的檔案寫回本機目錄,方便直接檢查

為什麼使用 Minikube Mount?

在 Minikube 環境中,Kubernetes 節點其實是在 VM、容器或其他 driver 內執行,因此 Pod 看到的節點檔案系統不等同於開發機的檔案系統。如果只在 Pod 裡設定 hostPath,它讀到的是 Minikube 節點內的路徑,而不是 Windows、macOS 或 Linux 主機上的資料夾。

minikube mount 的作用,就是在開發機與 Minikube 節點之間建立一個掛載通道。當本機資料夾被掛載到節點後,Pod 再透過 hostPath 掛載該節點路徑,就能讀寫開發機上的檔案。


Minikube Mount 基本用法

指令格式

1
minikube mount <本機目錄>:<Minikube節點目錄>

例如將本機目前目錄下的 data 資料夾掛載到 Minikube 節點的 /mnt/host-data

1
minikube mount ./data:/mnt/host-data

在 Windows PowerShell 中,建議使用絕對路徑並加上雙引號,避免路徑中有空白或特殊字元時被錯誤解析:

1
minikube mount "C:\DevWorkSpace\minikube-data:/mnt/host-data"

指令執行後,終端機需要維持開啟。只要這個程序停止,Minikube 節點中的掛載目錄也會失去與本機資料夾的同步。

建立測試目錄

先在本機建立一個要掛載的資料夾,並放入測試檔案:

1
2
New-Item -ItemType Directory -Force C:\DevWorkSpace\minikube-data
Set-Content -Path C:\DevWorkSpace\minikube-data\hello.txt -Value "hello from host"

接著啟動 Minikube Mount:

1
minikube mount "C:\DevWorkSpace\minikube-data:/mnt/host-data"

如果掛載成功,畫面會顯示類似以下訊息:

1
Mounting host path C:\DevWorkSpace\minikube-data into VM as /mnt/host-data ...

實際操作:掛載 k8s-logs 目錄

這次實作是在一台 Ubuntu VM 中操作 Minikube。先在家目錄下準備 k8s-logs 資料夾,接著將它掛載到 Minikube 節點的 /var/log/k8s-logs

1
minikube mount k8s-logs:/var/log/k8s-logs

成功後可以看到 Minikube 使用 9P 方式建立掛載,並提示這個程序必須保持執行,掛載目錄才會持續可用。

在另一個終端機中進入本機的 k8s-logs 目錄,可以看到應用程式寫出的 dockertest.log。這代表後續只要 Pod 透過 hostPath 寫入 Minikube 節點的 /var/log/k8s-logs,檔案就會同步回本機的 k8s-logs 資料夾,方便直接觀察日誌內容。

常用參數

minikube mount 可以透過參數調整檔案呈現的使用者、群組與 9P 掛載行為。以下列出幾個常見選項:

參數 說明
--uid 指定掛載檔案在 Minikube 節點內呈現的使用者 ID
--gid 指定掛載檔案在 Minikube 節點內呈現的群組 ID
--9p-version 指定 9P 掛載使用的協定版本
--msize 調整 9P 傳輸封包大小,可能影響大量檔案同步效能
--options 傳入額外掛載選項,例如快取相關設定
--port 指定 mount 使用的連接埠,0 代表自動選擇可用連接埠

例如希望讓掛載目錄在 Minikube 節點內以指定 UID 與 GID 呈現,可以執行:

1
minikube mount "C:\DevWorkSpace\minikube-data:/mnt/host-data" --uid=1000 --gid=1000

注意事項

終端機程序需要持續執行

minikube mount 是一個前景程序,執行後需要保持終端機開啟。如果關閉終端機或中斷指令,Minikube 節點與本機目錄之間的掛載就會停止。建議在獨立終端機中執行 mount,再另外開一個終端機操作 kubectl

Pod 掛載的是 Minikube 節點路徑

在 Pod YAML 裡設定的 hostPath.path 必須是 Minikube 節點內的路徑,例如 /mnt/host-data,而不是本機的 C:\DevWorkSpace\minikube-data。本機路徑只會出現在 minikube mount 指令中。

適合開發測試,不適合正式環境

minikube mount 的設計目標是本機開發。正式環境若需要持久化資料,應改用 PersistentVolume、StorageClass、NFS、雲端磁碟或其他正式儲存方案。

權限問題需要依容器使用者調整

如果容器不是以 root 執行,可能會遇到無法讀寫掛載目錄的情況。這時可以搭配 --uid--gid 或調整 Pod 的 securityContext,讓掛載目錄的權限符合應用程式需求。

常見問題排查

Pod 顯示 hostPath 目錄不存在

如果 Pod 無法啟動,並出現 hostPath 目錄不存在的錯誤,通常代表 minikube mount 尚未啟動,或 Pod YAML 中的 hostPath.path 與 mount 目標路徑不一致。

可以先確認 Minikube 節點中是否看得到目錄:

1
minikube ssh -- ls -l /mnt/host-data

如果目錄不存在,請重新執行:

1
minikube mount "C:\DevWorkSpace\minikube-data:/mnt/host-data"

Pod 看不到本機新增的檔案

先確認 minikube mount 的終端機仍在執行,再確認檔案是否真的建立在來源目錄內:

1
Get-ChildItem C:\DevWorkSpace\minikube-data

接著進入 Minikube 節點檢查:

1
minikube ssh -- ls -l /mnt/host-data

如果 Minikube 節點看得到檔案,但 Pod 看不到,通常是 Pod 的 volumeMounts.mountPathvolumes.hostPath.path 設定錯誤。

寫入檔案時發生 Permission denied

如果 Pod 寫入 /data 時出現 Permission denied,可以先檢查容器內目前使用者:

1
kubectl exec -it mount-test-pod -- id

接著依照容器執行的 UID 與 GID 調整 mount 參數,例如:

1
minikube mount "C:\DevWorkSpace\minikube-data:/mnt/host-data" --uid=1000 --gid=1000

如果應用程式需要更完整的權限控制,也可以在 Pod 規格中設定 securityContext

清理資源

測試完成後,可以刪除 Pod 或 Deployment:

1
2
kubectl delete pod mount-test-pod
kubectl delete deployment log-mount-test-deployment

停止 minikube mount 時,回到執行 mount 的終端機按下 Ctrl + C 即可。

如果不再需要本機測試資料,也可以刪除資料夾:

1
Remove-Item -Recurse -Force C:\DevWorkSpace\minikube-data

小結

Minikube Mount 可以快速把本機資料夾提供給 Minikube 節點,再透過 Kubernetes 的 hostPath 掛載到 Pod 中。它很適合用在本機開發、測試資料共享、設定檔驗證與日誌觀察等情境。

使用時要記住兩個重點:第一,minikube mount 指令中的來源路徑是本機路徑;第二,Pod YAML 中的 hostPath.path 是 Minikube 節點路徑。只要掌握這個對應關係,就能清楚理解本機資料、Minikube 節點與 Pod 之間的掛載流程。