Minikube 提供了便捷的本地 Kubernetes 環境,方便開發者學習和測試。透過虛擬機器或容器技術,Minikube 將所有 Kubernetes 元件封裝在單一節點中,簡化了佈署流程。使用者可以根據自身環境選擇 VirtualBox、Docker 或 Podman 作為驅動程式,並可依需求調整 CPU 和記憶體資源。除了單節點叢集,Minikube 也支援多節點佈署,滿足更複雜的測試場景。透過 kubectl 工具,開發者可以輕鬆管理和操作 Minikube 叢集,例如檢視節點狀態、控制平面元件狀態,以及執行停止和刪除等操作。

使用minikube啟動單節點Kubernetes叢集

使用VM設定minikube

首先,您需要在工作站上安裝一個虛擬化軟體(hypervisor),例如VirtualBox。然後,minikube會將所有的Kubernetes元件封裝到一個VM中並啟動它。

以下是一個使用Fedora 39作為工作站,並以VirtualBox作為虛擬化軟體的範例。

下載和安裝VirtualBox

請參考VirtualBox官方網站下載並安裝適用於您的工作站的VirtualBox。

安裝您的第一個 Kubernetes 叢集

在您的工作站上安裝 minikube 和 VirtualBox 後,請執行以下命令:

$ minikube start --driver=virtualbox --memory=8000m --cpus=2

如果您使用的是特定版本的 minikube,但想要安裝不同版本的 Kubernetes,您可以指定具體的版本,如下所示:

$ minikube start --driver=virtualbox --memory=8000m --cpus=2 --kubernetes-version=1.29.0

您將看到 minikube 正在啟動 Kubernetes 佈署程式,包括下載 VM 映像檔,如下所示:

😄 minikube v1.32.0 on Fedora 39
❗ Specified Kubernetes version 1.29.0 is newer than the newest supported version: v1.28.3. Use `minikube config defaults kubernetes-version` for details.
❗ Specified Kubernetes version 1.29.0 not found in Kubernetes version list
🤔 Searching the internet for Kubernetes version...
✅ Kubernetes version 1.29.0 found in GitHub version list
✨ Using the virtualbox driver based on user configuration
👍 Starting control plane node minikube in cluster minikube
🔥 Creating virtualbox VM (CPUs=2, Memory=8000MB, Disk=20000MB) ...
🐳 Preparing Kubernetes v1.29.0 on Docker 24.0.7 ...
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔗 Configuring bridge CNI (Container Networking Interface) ...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5

內容解密:

此段輸出表示 minikube 正在啟動 Kubernetes 叢集。輸出的資訊包括:

  • minikube 的版本和作業系統資訊
  • Kubernetes 版本檢查和下載
  • 使用 VirtualBox 驅動程式建立虛擬機器
  • Kubernetes 元件的準備和設定

您可能會看到根據工作站作業系統和虛擬化軟體的建議訊息,例如:

│ You have selected "virtualbox" driver, but there are better options!
│ For better performance and support consider using a different driver:
│ - kvm2
│ - qemu2

這是因為 VirtualBox 不是最佳化的選擇,但仍然可以使用。

最後,您將看到 minikube 的成功訊息:

🔎 Verifying Kubernetes components...
🌟 Enabled addons: storage-provisioner, default-storageclass
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

現在,使用以下命令驗證 Kubernetes 叢集狀態:

$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

使用容器設定 minikube

容器方法是較簡單的選擇。minikube 使用本地 Docker Engine 例項或 Podman 在容器中啟動 Kubernetes 元件。要使用根據容器的 minikube,請確保已根據工作站作業系統安裝 Docker 或 Podman。

如果提供的驅動程式遺失或 minikube 無法在系統上找到驅動程式,您可能會遇到錯誤,如下所示:

$ minikube start --driver=podman
😄 minikube v1.32.0 on Fedora 39 (hyperv/amd64)
✨ Using the podman driver based on user configuration
🤷 Exiting due to PROVIDER_PODMAN_NOT_FOUND: The 'podman' provider was not found: exec: "podman": executable file not found in $PATH

內容解密:

此錯誤訊息表示 minikube 無法找到 Podman 驅動程式。需要安裝 Podman 或使用其他可用的驅動程式。

在下面的範例中,我們使用 Fedora 39 作為工作站,並使用 Docker 作為容器引擎:

$ minikube start --driver=docker --kubernetes-version=1.29.0
😄 minikube v1.32.0 on Fedora 39
❗ Specified Kubernetes version 1.29.0 is newer than the newest supported version: v1.28.3. Use `minikube config defaults kubernetes-version` for details.
❗ Specified Kubernetes version 1.29.0 not found in Kubernetes version list
🤔 Searching the internet for Kubernetes version...
✅ Kubernetes version 1.29.0 found in GitHub version list
✨ Using the docker driver based on user configuration
📌 Using Docker driver with root privileges
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
🔥 Creating docker container (CPUs=2, Memory=8000MB) ...
🐳 Preparing Kubernetes v1.29.0 on Docker 24.0.7 ...

內容解密:

此輸出表示 minikube 使用 Docker 驅動程式啟動 Kubernetes 叢集。輸出的資訊包括:

  • 使用 Docker 驅動程式建立容器
  • Kubernetes 元件的準備和設定

如果您使用的是 Windows 工作站和根據 Hyper-V 的虛擬機器,請記得在安裝 minikube 和容器引擎的虛擬機器中停用動態記憶體。

使用 Podman 驅動程式時,minikube 會在啟動時檢查可用記憶體,並報告「使用中」記憶體(動態設定)。因此,您需要確保有足夠的記憶體可用或為 Kubernetes 節點設定記憶體需求。

在本地使用 Minikube 建立 Kubernetes 叢集

在前面的章節中,我們討論了 Kubernetes 的基本概念和架構。現在,讓我們來實際操作,在本地使用 Minikube 建立一個 Kubernetes 叢集。

使用 Minikube 啟動 Kubernetes 叢集

Minikube 是一個單節點的 Kubernetes 叢集,可以在本地的虛擬機器或容器中執行。以下是啟動 Minikube 的步驟:

  1. 首先,執行以下命令以啟動 Minikube:

$ minikube start

   這個命令會下載必要的映像並啟動 Kubernetes 叢集。

2. 當 Minikube 啟動完成後,你會看到類別似以下的輸出:

▪ Generating certificates and keys … ▪ Booting up control plane … ▪ Configuring RBAC rules … 🔗 Configuring bridge CNI (Container Networking Interface) … ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5 🔎 Verifying Kubernetes components… 🌟 Enabled addons: storage-provisioner, default-storageclass 🏄 Done! kubectl is now configured to use “minikube” cluster and “default” namespace by default

   這表明 Minikube 已成功啟動,並且你的本地 `kubectl` 已組態為使用 Minikube 叢集。

#### 內容解密:
- `minikube start` 命令啟動了一個單節點的 Kubernetes 叢集。
- Minikube 自動生成了必要的憑證和金鑰,並啟動了控制平面元件。
- 它組態了 RBAC 規則和 CNI 網路介面。
- `storage-provisioner` 和 `default-storageclass` 外掛被啟用,以提供儲存功能。

### 存取由 Minikube 建立的 Kubernetes 叢集

當 Minikube 啟動後,它會自動為你的本地 `kubectl` 生成一個 `kubeconfig` 檔案,以便與 Kubernetes 叢集進行通訊。

1. 你可以透過以下命令檢視目前的 `kubeconfig` 組態:
   ```bash
$ kubectl config view

這將顯示目前的叢集組態,包括 Minikube 叢集的資訊。

  1. 使用以下命令列出目前的上下文:

$ kubectl config current-context minikube

   這表明目前的上下文是 `minikube`,即 Minikube 叢集。

3. 現在,讓我們嘗試使用 `kubectl` 命令列出 Minikube 叢集中的節點:
   ```bash
$ kubectl get nodes
NAME      STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   3m52s   v1.29.0

如果一切正常,你應該會看到一個名為 minikube 的節點,其狀態為 Ready

內容解密:

  • kubectl config view 命令顯示了目前的 kubeconfig 組態。
  • kubectl config current-context 命令顯示了目前的上下文,即 Minikube 叢集。
  • kubectl get nodes 命令列出了叢集中的節點,Minikube 預設只會有一個節點。

檢視控制平面元件的狀態

你可以使用以下命令檢視控制平面元件的狀態:

$ kubectl get componentstatuses
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   ok                  

這個命令會輸出控制平面元件的狀態,包括 etcdkube-schedulerkube-controller-manager

內容解密:

  • kubectl get componentstatuses 命令顯示了控制平面元件的狀態。
  • 由於 Minikube 是單節點叢集,因此所有控制平面元件都在同一個節點上執行。

停止和刪除本地 Minikube 叢集

當你不再需要 Minikube 叢集時,可以使用以下命令停止或刪除它:

  1. 停止 Minikube 叢集:

$ minikube stop ✋ Stopping node “minikube” … 🛑 1 node stopped.

   這將停止 Minikube 叢集,但保留其狀態。

2. 刪除 Minikube 叢集:
   ```bash
$ minikube delete
🔥 Deleting "minikube" in docker ...
🔥 Deleting container "minikube" ...
🔥 Removing /home/gmadappa/.minikube/machines/minikube ...
💀 Removed all traces of the "minikube" cluster.

這將完全刪除 Minikube 叢集及其所有相關資源。

內容解密:

  • minikube stop 命令停止了 Minikube 叢集,但保留了其狀態,以便稍後重新啟動。
  • minikube delete 命令完全刪除了 Minikube 叢集及其所有相關資源。

使用 Minikube 建立多節點 Kubernetes 叢集

Minikube 也支援建立多節點 Kubernetes 叢集。以下是建立一個三節點叢集的範例:

$ minikube start --driver=podman --nodes=3

然後,你可以使用以下命令檢視節點資訊:

$ kubectl get nodes
NAME           STATUS   ROLES           AGE   VERSION
minikube       Ready    control-plane   93s   v1.29.0
minikube-m02   Ready    <none>          74s   v1.29.0
minikube-m03   Ready    <none>          54s   v1.29.0

這表明 Minikube 成功建立了一個三節點的 Kubernetes 叢集。

內容解密:

  • --nodes=3 引數指定了要建立的節點數量。
  • 第一個節點是控制平面節點,而其他節點是計算節點。