使用 Docker Desktop 在 Kubernetes 上部署
Docker Desktop 包含一個獨立的 Kubernetes 伺服器和客戶端,以及 Docker CLI 整合,可以直接在您的機器上進行本地 Kubernetes 開發和測試。
Kubernetes 伺服器作為單個或多節點叢集執行在 Docker 容器中。這種輕量級設定可幫助您探索 Kubernetes 功能,測試工作負載,並與其他 Docker 功能並行處理容器編排。
Docker Desktop 上的 Kubernetes 與其他工作負載(包括 Swarm 服務和獨立容器)並行執行。


在 Docker Desktop 中啟用 Kubernetes 會發生什麼?
以下操作在 Docker Desktop 後端和虛擬機器中觸發:
- 生成證書和叢集配置
- 下載並安裝 Kubernetes 內部元件
- 叢集啟動
- 安裝額外的網路和儲存控制器
在 Docker Desktop 中開啟或關閉 Kubernetes 伺服器不會影響您的其他工作負載。
安裝並啟用 Kubernetes
- 開啟 Docker Desktop 儀表板並導航到 **設定**。
- 選擇 **Kubernetes** 選項卡。
- 切換 **啟用 Kubernetes**。
- 選擇您的叢集配置方法。
- 選擇 **應用** 儲存設定。
這將設定執行 Kubernetes 伺服器所需的映象作為容器,並在您的系統上安裝 `kubectl` 命令列工具,位於 `/usr/local/bin/kubectl` (Mac) 或 `C:\Program Files\Docker\Docker\resources\bin\kubectl.exe` (Windows)。
注意Docker Desktop for Linux 預設不包含 `kubectl`。您可以按照 Kubernetes 安裝指南 單獨安裝它。確保 `kubectl` 二進位制檔案安裝在 `/usr/local/bin/kubectl`。
當 Kubernetes 啟用時,其狀態將顯示在 Docker Desktop 儀表板頁尾和 Docker 選單中。
您可以透過以下命令檢查您正在使用的 Kubernetes 版本:
$ kubectl version
叢集配置方法
Docker Desktop Kubernetes 可以使用 `kubeadm` 或 `kind` 供應器進行供應。
`kubeadm` 是較舊的供應器。它支援單節點叢集,您無法選擇 Kubernetes 版本,其供應速度比 `kind` 慢,並且不受 增強容器隔離 (ECI) 的支援,這意味著如果 ECI 啟用,叢集會執行,但不受 ECI 保護。
`kind` 是較新的供應器,如果您已登入並使用 Docker Desktop 4.38 或更高版本,則可以使用它。它支援多節點叢集(用於更真實的 Kubernetes 設定),您可以選擇 Kubernetes 版本,其供應速度比 `kubeadm` 快,並且受 ECI 支援(即,當 ECI 啟用時,Kubernetes 叢集在非特權 Docker 容器中執行,從而使其更安全)。但請注意,`kind` 要求 Docker Desktop 配置為使用 containerd 映象儲存(Docker Desktop 4.34 及更高版本中的預設映象儲存)。
下表總結了此比較。
特性 | kubeadm | kind |
---|---|---|
可用性 | Docker Desktop 4.0+ | Docker Desktop 4.38+ (需要登入) |
多節點叢集支援 | 否 | 是 |
Kubernetes 版本選擇器 | 否 | 是 |
配置速度 | 約 1 分鐘 | 約 30 秒 |
ECI 支援 | 否 | 是 |
與 containerd 映象儲存相容 | 是 | 是 |
與 Docker 映象儲存相容 | 是 | 否 |
使用 kubectl 命令
Kubernetes 整合會自動在 Mac 上的 `/usr/local/bin/kubectl` 和 Windows 上的 `C:\Program Files\Docker\Docker\Resources\bin\kubectl.exe` 安裝 Kubernetes CLI 命令。此位置可能不在您的 shell 的 `PATH` 變數中,因此您可能需要輸入命令的完整路徑或將其新增到 `PATH` 中。
如果您已經安裝了 `kubectl` 並且它指向其他環境,例如 `minikube` 或 Google Kubernetes Engine 叢集,請確保您更改了上下文,以便 `kubectl` 指向 `docker-desktop`
$ kubectl config get-contexts
$ kubectl config use-context docker-desktop
提示如果 `kubectl config get-contexts` 命令返回空結果,請嘗試:
- 在命令提示符或 PowerShell 中執行命令。
- 設定 `KUBECONFIG` 環境變數指向您的 `.kube/config` 檔案。
驗證安裝
要確認 Kubernetes 正在執行,請列出可用節點:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker-desktop Ready control-plane 3h v1.29.1
如果您使用 Homebrew 或其他方法安裝了 `kubectl` 並遇到衝突,請移除 `/usr/local/bin/kubectl`。
有關 `kubectl` 的更多資訊,請參閱 `kubectl` 文件。
升級叢集
Kubernetes 叢集不會隨 Docker Desktop 更新自動升級。要升級叢集,您必須在設定中手動選擇 **重置 Kubernetes 叢集**。
附加設定
檢視系統容器
預設情況下,Kubernetes 系統容器是隱藏的。要檢查這些容器,請啟用 **顯示系統容器(高階)**。
現在您可以使用 `docker ps` 或在 Docker Desktop 儀表板中檢視正在執行的 Kubernetes 容器。
為 Kubernetes 控制平面鏡像配置自定義映象倉庫
Docker Desktop 使用容器來執行 Kubernetes 控制平面。預設情況下,Docker Desktop 從 Docker Hub 拉取相關的容器映象。拉取的映象取決於叢集供應模式。
例如,在 `kind` 模式下,它需要以下映象:
docker.io/kindest/node:<tag>
docker.io/envoyproxy/envoy:<tag>
docker.io/docker/desktop-cloud-provider-kind:<tag>
docker.io/docker/desktop-containerd-registry-mirror:<tag>
在 `kubeadm` 模式下,它需要以下映象:
docker.io/registry.k8s.io/kube-controller-manager:<tag>
docker.io/registry.k8s.io/kube-apiserver:<tag>
docker.io/registry.k8s.io/kube-scheduler:<tag>
docker.io/registry.k8s.io/kube-proxy
docker.io/registry.k8s.io/etcd:<tag>
docker.io/registry.k8s.io/pause:<tag>
docker.io/registry.k8s.io/coredns/coredns:<tag>
docker.io/docker/desktop-storage-provisioner:<tag>
docker.io/docker/desktop-vpnkit-controller:<tag>
docker.io/docker/desktop-kubernetes:<tag>
映象標籤由 Docker Desktop 根據多種因素自動選擇,包括所使用的 Kubernetes 版本。每個映象的標籤各不相同。
為了適應不允許訪問 Docker Hub 的場景,管理員可以使用 KubernetesImagesRepository 設定,將 Docker Desktop 配置為從不同的登錄檔(例如,映象)拉取上述列出的映象,如下所示。
映象名稱可以分解為 `[registry[:port]/][namespace/]repository[:tag]` 元件。`KubernetesImagesRepository` 設定允許使用者覆蓋映象名稱的 `[registry[:port]/][namespace]` 部分。
例如,如果 Docker Desktop Kubernetes 配置為 `kind` 模式,並且 `KubernetesImagesRepository` 設定為 `my-registry:5000/kind-images`,那麼 Docker Desktop 將從以下位置拉取映象:
my-registry:5000/kind-images/node:<tag>
my-registry:5000/kind-images/envoy:<tag>
my-registry:5000/kind-images/desktop-cloud-provider-kind:<tag>
my-registry:5000/kind-images/desktop-containerd-registry-mirror:<tag>
這些映象應從 Docker Hub 中的相應映象克隆/映象。標籤也必須與 Docker Desktop 預期的一致。
設定此功能的推薦方法如下:
啟動 Docker Desktop。
在“設定”>“Kubernetes”中,啟用“顯示系統容器”設定。
在“設定”>“Kubernetes”中,使用所需的叢集配置方法啟動 Kubernetes:`kubeadm` 或 `kind`。
等待 Kubernetes 啟動。
使用 `docker ps` 檢視 Docker Desktop 用於 Kubernetes 控制平面的容器映象。
將這些映象(帶匹配標籤)克隆或映象到您的自定義登錄檔。
停止 Kubernetes 叢集。
配置 `KubernetesImagesRepository` 設定以指向您的自定義登錄檔。
重新啟動 Docker Desktop。
使用 `docker ps` 命令驗證 Kubernetes 叢集是否正在使用自定義登錄檔映象。
注意`KubernetesImagesRepository` 設定僅適用於 Docker Desktop 用於設定 Kubernetes 叢集的控制平面鏡像。它對其他 Kubernetes pod 沒有影響。
注意在 Docker Desktop 4.43 或更早版本中,當使用 `KubernetesImagesRepository` 並且啟用了 增強容器隔離 (ECI) 時,將以下映象新增到 ECI Docker 套接字掛載映象列表:
[imagesRepository]/desktop-cloud-provider-kind:
[imagesRepository]/desktop-containerd-registry-mirror:
這些容器掛載 Docker 套接字,因此您必須將這些映象新增到 ECI 映象列表中。否則,ECI 將阻止掛載,Kubernetes 將無法啟動。
故障排除
- 如果 Kubernetes 無法啟動,請確保 Docker Desktop 正在執行並分配了足夠的資源。檢查 **設定** > **資源**。
- 如果 `kubectl` 命令返回錯誤,請確認上下文已設定為 `docker-desktop`如果您已啟用該設定,則可以嘗試檢查Kubernetes 系統容器的日誌。
$ kubectl config use-context docker-desktop
- 如果您在更新後遇到叢集問題,請重置您的 Kubernetes 叢集。重置 Kubernetes 叢集可以透過將叢集恢復到乾淨狀態,清除可能導致問題的錯誤配置、損壞資料或卡住的資源來幫助解決問題。如果問題仍然存在,您可能需要清理和清除資料,然後重新啟動 Docker Desktop。
關閉並解除安裝 Kubernetes
要在 Docker Desktop 中關閉 Kubernetes:
- 在 Docker Desktop 儀表板中,選擇 **設定** 圖示。
- 選擇 **Kubernetes** 選項卡。
- 取消選中 **啟用 Kubernetes** 複選框。
- 選擇 **應用** 儲存設定。這將停止並移除 Kubernetes 容器,並移除 `/usr/local/bin/kubectl` 命令。