使用 Docker Desktop 在 Kubernetes 上部署

Docker Desktop 包含一個獨立的 Kubernetes 伺服器和客戶端,以及 Docker CLI 整合,讓您能夠直接在您的機器上進行本地 Kubernetes 開發與測試。

Kubernetes 伺服器作為單節點或多節點叢集,在 Docker 容器內執行。這種輕量級設定有助於您探索 Kubernetes 功能、測試工作負載,並與其他 Docker 功能並行使用容器編排。

Docker Desktop 上的 Kubernetes 與其他工作負載(包括 Swarm 服務和獨立容器)並行執行。

k8s settings

當我在 Docker Desktop 中啟用 Kubernetes 時會發生什麼?

以下動作會在 Docker Desktop 後端和虛擬機中觸發:

  • 產生憑證與叢集配置
  • 下載並安裝 Kubernetes 內部元件
  • 叢集啟動
  • 安裝用於網路與儲存的額外控制器

在 Docker Desktop 中開啟或關閉 Kubernetes 伺服器不會影響您的其他工作負載。

安裝並開啟 Kubernetes

  1. 開啟 Docker Desktop 儀表板並導覽至設定 (Settings)
  2. 選擇 Kubernetes 分頁。
  3. 切換開啟 啟用 Kubernetes (Enable Kubernetes)
  4. 選擇您的叢集佈建方式
  5. 選擇 套用 (Apply) 以儲存設定。

這會設定執行 Kubernetes 伺服器所需的容器映像,並在您的系統上安裝 kubectl 命令列工具,路徑位於 /usr/local/bin/kubectl (Mac) 或 C:\Program Files\Docker\Docker\resources\bin\kubectl.exe (Windows)。

注意

Linux 版 Docker Desktop 預設不包含 kubectl。您可以按照Kubernetes 安裝指南單獨安裝。請確保 kubectl 二進位檔安裝在 /usr/local/bin/kubectl

啟用 Kubernetes 後,其狀態會顯示在 Docker Desktop 儀表板頁尾和 Docker 選單中。

您可以透過以下指令檢查您所使用的 Kubernetes 版本

$ kubectl version

叢集佈建方式

Docker Desktop Kubernetes 可以使用 kubeadmkind 佈建工具進行佈建。

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 及更高版本的預設映像儲存庫)。

下表總結了此比較。

功能kubeadmkind
可用性Docker Desktop 4.0+Docker Desktop 4.38+ (需登入)
多節點叢集支援
Kubernetes 版本選擇器
佈建速度約 1 分鐘約 30 秒
支援 ECI
可與 containerd 映像儲存庫搭配使用
可與 Docker 映像儲存庫搭配使用

使用 kubectl 指令

Kubernetes 整合會自動將 Kubernetes CLI 指令安裝在 Mac 的 /usr/local/bin/kubectl 以及 Windows 的 C:\Program Files\Docker\Docker\Resources\bin\kubectl.exe。此路徑可能未包含在您 Shell 的 PATH 變數中,因此您可能需要輸入指令的完整路徑,或將其加入 PATH

如果您已安裝 kubectl 並且它指向其他環境(例如 minikube 或 Google Kubernetes Engine 叢集),請確保變更內容 (context),以便 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 叢集 (Reset Kubernetes Cluster)

其他設定

檢視系統容器

預設情況下,Kubernetes 系統容器是隱藏的。若要檢查這些容器,請啟用 顯示系統容器 (進階) (Show system containers (advanced))

您現在可以使用 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>

映像標籤 (tags) 是由 Docker Desktop 根據多個因素(包括所使用的 Kubernetes 版本)自動選擇的。每個映像的標籤各不相同。

為了適應不允許存取 Docker Hub 的場景,管理員可以配置 Docker Desktop,使其使用 KubernetesImagesRepository 設定從不同的登錄庫(例如鏡像站)拉取上述列表中的映像,如下所示。

映像名稱可以拆分為 [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 的預期相符。

建議的設定方法如下:

  1. 啟動 Docker Desktop。

  2. 在「設定 > Kubernetes」中,啟用 顯示系統容器 (Show system containers) 設定。

  3. 在「設定 > Kubernetes」中,使用所需的叢集佈建方式啟動 Kubernetes:kubeadmkind

  4. 等待 Kubernetes 啟動。

  5. 使用 docker ps 檢視 Docker Desktop 用於 Kubernetes 控制平面的容器映像。

  6. 將這些映像(連同相符標籤)複製或鏡像到您的自訂登錄庫。

  7. 停止 Kubernetes 叢集。

  8. KubernetesImagesRepository 設定配置為指向您的自訂登錄庫。

  9. 重新啟動 Docker Desktop。

  10. 使用 docker ps 指令驗證 Kubernetes 叢集是否正在使用自訂登錄庫的映像。

注意

KubernetesImagesRepository 設定僅適用於 Docker Desktop 用於設定 Kubernetes 叢集的控制平面映像。它對其他 Kubernetes Pod 沒有影響。

注意

在 Docker Desktop 4.43 或更早版本中,當使用 KubernetesImagesRepository 並啟用 增強型容器隔離 (ECI) 時,請將以下映像加入 ECI Docker socket 掛載映像清單

[imagesRepository]/desktop-cloud-provider-kind: [imagesRepository]/desktop-containerd-registry-mirror:

這些容器會掛載 Docker socket,因此您必須將這些映像加入 ECI 映像清單。否則,ECI 將封鎖掛載,導致 Kubernetes 無法啟動。

疑難排解

  • 如果 Kubernetes 無法啟動,請確保 Docker Desktop 配置了足夠的資源。請檢查 設定 > 資源 (Resources)
  • 如果 kubectl 指令回傳錯誤,請確認內容 (context) 已設定為 docker-desktop
    $ kubectl config use-context docker-desktop
    
    如果您已啟用該設定,則可以嘗試檢查 Kubernetes 系統容器的日誌。
  • 如果您在更新後遇到叢集問題,請重設 Kubernetes 叢集。重設 Kubernetes 叢集可以透過將叢集還原為乾淨狀態,並清除可能導致問題的錯誤配置、損壞的資料或卡住的資源來協助解決問題。如果問題仍然存在,您可能需要清除並刪除資料,然後重新啟動 Docker Desktop。

關閉並解除安裝 Kubernetes

若要關閉 Docker Desktop 中的 Kubernetes:

  1. 從 Docker Desktop 儀表板選擇 設定 (Settings) 圖示。
  2. 選擇 Kubernetes 分頁。
  3. 取消勾選 啟用 Kubernetes (Enable Kubernetes) 核取方塊。
  4. 選擇 套用 (Apply) 以儲存設定。這會停止並移除 Kubernetes 容器,同時移除 /usr/local/bin/kubectl 指令。
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.