使用 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. 切换开启 Enable Kubernetes
  4. 选择你的集群配置方法
  5. 选择 Apply & Restart 保存设置。

这会设置运行 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 镜像存储配合使用

其他设置

查看系统容器

默认情况下,Kubernetes 系统容器是隐藏的。要检查这些容器,请启用 Show system containers (advanced)

你现在可以使用 docker ps 命令或在 Docker Desktop 控制面板中查看正在运行的 Kubernetes 容器。

使用 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 更新自动升级。要升级集群,你必须在设置中手动选择 Reset Kubernetes Cluster

故障排除

  • 如果 Kubernetes 无法启动,请确保 Docker Desktop 运行有足够的分配资源。检查 Settings > Resources
  • 如果 kubectl 命令返回错误,确认上下文设置为 docker-desktop
    $ kubectl config use-context docker-desktop
    
    如果你启用了该设置,可以尝试检查Kubernetes 系统容器的日志。
  • 如果更新后遇到集群问题,请重置你的 Kubernetes 集群。重置 Kubernetes 集群可以通过将集群恢复到干净状态来帮助解决问题,清除可能导致问题的错误配置、损坏数据或卡住的资源。如果问题仍然存在,你可能需要清理并清除数据,然后重新启动 Docker Desktop。

关闭并卸载 Kubernetes

在 Docker Desktop 中关闭 Kubernetes

  1. 在 Docker Desktop 控制面板中,选择 Settings 图标。
  2. 选择 Kubernetes 选项卡。
  3. 取消选择 Enable Kubernetes 复选框。
  4. 选择 Apply & Restart 保存设置。这会停止并移除 Kubernetes 容器,并移除 /usr/local/bin/kubectl 命令。
页面选项