在 Windows 上使用 Docker Desktop 快速搭建本地 Kubernetes 环境(附详细部署教程)
言简意赅的讲解Docker Desktop for Windows搭建Kubernetes解决的痛点
目标读者:
- 对 Docker Desktop 有一定了解,能在 Windows 上成功安装和使用 Docker Desktop。
- 想要在本地快速搭建一套 Kubernetes 环境进行测试或学习的开发者。
一、准备工作
-
安装 Docker Desktop for Windows
- 如果尚未安装,请从 Docker 官网 下载并安装 Docker Desktop for Windows。
- 注意必须在 Windows 10(家庭版以上)或者 Windows 11,以及开启 Hyper-V 或者 WSL2 功能(具体可参考 Docker 官方文档进行配置)。
-
确保可以访问 Docker Hub
- Docker Desktop 在启用 Kubernetes 时,会自动拉取所需的 Kubernetes 相关镜像。由于镜像较大,且有可能存在网络限制,建议根据自身网络环境配置科学上网工具,确保镜像能够顺利下载。
-
初始 Docker Desktop 设置
- 在不启用 Kubernetes 的情况下,先启动并配置好 Docker Desktop,以确保 Docker 能正常工作。
- 打开 Docker Desktop,在右上角齿轮图标中可以进行必要的配置(如 CPU、内存限制等),以免在启用 Kubernetes 后出现资源不足问题。
二、启用 Kubernetes
-
打开 Docker Desktop,进入“Settings”
- 点击右上角齿轮图标,或在任务栏图标上右键选择 “Settings”。
-
选择“Kubernetes”选项卡
- 在左侧菜单中找到 “Kubernetes”,勾选 “Enable Kubernetes”。
-
等待 Kubernetes 启用
- 点击 “Apply & Restart” 之后,Docker Desktop 会重启自身并拉取 Kubernetes 所需的镜像。
- 注意:这一步可能会耗费比较长的时间,请耐心等待。如果网络环境无法连接镜像仓库,需要配置合适的科学上网工具。
- 启用完成后,Docker Desktop 左下角会出现 “Kubernetes running” 的状态提示。
温馨提示:如果由于网络问题导致一直无法下载镜像,可以尝试使用官方或第三方镜像加速器,这会大大提升拉取速度。
三、初识 Kubernetes:不修改 hosts、无需安装额外 kubectl
Docker Desktop 自带了 kubectl
命令行工具,无需用户额外安装,因此后续所有 Kubernetes 命令均可直接在命令行(如 PowerShell、CMD 或 Windows Terminal)中使用。
此外,Docker Desktop 的 Kubernetes 环境默认没有安装 Ingress Controller,所以我们暂时不涉及到域名配置,也不需要去修改本机的 hosts 文件。
四、基础部署演示
下面我们来做一个最常见的 Kubernetes 上的示例:部署一个 Nginx 应用。演示如何使用 Deployment 和 Service。
1. 验证 Kubernetes 环境是否可用
在 PowerShell 或 CMD 中输入:
kubectl get nodes
若正确返回一个名为 docker-desktop
的节点(Status 为 Ready),就表示 Kubernetes 已经正确启用并可用。
2. 创建 Deployment
我们可以直接用命令行创建一个 Nginx Deployment。示例如下:
kubectl create deployment nginx-deployment --image=nginx:latest
- 这条命令会告诉 Kubernetes 创建一个名为
nginx-deployment
的 Deployment,并且使用nginx:latest
镜像来拉起 Pod。 - 创建完成后,可以通过下面命令查看部署情况:
kubectl get deployments
kubectl get pods
如果看到 nginx-deployment
在运行,同时有对应的 Pod 状态为 Running
,就说明 Deployment 已经生效。
3. 创建 Service
虽然 Deployment 已经在 Kubernetes 内部运行,但我们需要暴露这个服务才能从本地访问。最简单的方式是创建一个 NodePort 类型的 Service,示例如下:
kubectl expose deployment nginx-deployment \--type=NodePort \--port=80
--type=NodePort
会在 Kubernetes 节点上随机选择一个30000-32767之间的端口,用于映射到容器内部的 80 端口。- 创建后,我们同样可以查看 Service:
kubectl get service
可以看到一个名为 nginx-deployment
的 Service,并在 PORT(S)
栏显示类似 80:30294/TCP
(具体端口可能不同)。这就意味着,我们可以通过 Docker Desktop 提供的本地 Kubernetes 节点的 IP(一般是 127.0.0.1
结合 nodePort),或者通过 Docker Desktop 路由来访问这个 Nginx。
如果要在宿主机上访问,最简单的方式是:
http://localhost:<NodePort>
例如,如果 NodePort 为 30294,则访问 http://localhost:30294
,即可看到 Nginx 的默认欢迎页。
五、查看和管理 Kubernetes 资源
- 查看 Pod 详情
kubectl describe pod <pod-name>
- 这条命令可以深入查看某个 Pod 的状态、事件日志、容器的启动参数等,便于排查问题。
- 日志查看
kubectl logs <pod-name>
- 如果想查看日志,可以使用
kubectl logs
命令,后面加上 Pod 名称或者加-f
进行实时查看。
- 伸缩(Scaling)示例
kubectl scale deployment nginx-deployment --replicas=3
- 通过上面命令,可以让 Nginx 的副本数变为 3 个。再次查看 Pods,即可发现 3 个副本同时运行。
- 删除资源
kubectl delete service nginx-deployment
kubectl delete deployment nginx-deployment
- 如果你想删除刚才创建的 Service 和 Deployment,可以使用
kubectl delete
命令,后面跟资源类型和名称即可。
六、Docker Desktop Kubernetes 与 Ingress Controller
在原生 Kubernetes 中,常见的对外暴露服务方式除了 Service Type=NodePort/LoadBalancer,还可以通过 Ingress 来灵活管理域名和路径。但需要注意,Docker Desktop 自带的 Kubernetes 环境默认没有安装 Ingress Controller,因此如果你想体验 Ingress 功能,就必须自行安装 Nginx Ingress Controller 或者其他第三方 Ingress Controller。
这里我们就不深入介绍 Ingress 的详细配置和安装,仅提示一下在本地实验环境下的可能性:
- 如果确实需要测试 Ingress,可以自己通过 helm 或 yaml 手动安装 Nginx Ingress Controller:
不过,执行成功与否取决于你的网络环境和资源配置,需要保证能够访问相关镜像仓库。kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.1/deploy/static/provider/cloud/deploy.yaml
- 由于 Ingress 涉及到域名解析与路由规则,因此在本地测试时可能要额外配置
hosts
文件、使用自定义域名等。若纯粹是想快速上手 Kubernetes,可以暂时不必折腾这部分内容。
七、总结
- Docker Desktop for Windows 提供了一个非常便捷的本地 Kubernetes 环境,适合开发者做快速验证、个人学习和小型测试。
- 在启用 Kubernetes 前,一定要确保网络环境良好,以免拉取镜像时间过长导致卡顿或失败。
- 在基本部署一个 Deployment + Service 后,可以体验 Kubernetes 的核心概念:Pod、ReplicaSet、Service、Resource Management、Scale、Logs 等。
- Ingress 等更高级功能需要额外安装对应的组件(Ingress Controller),而 Docker Desktop 默认并未集成。
- 整个过程中,无需手动安装
kubectl
工具,无需手动修改hosts
文件,更加简化了本地 K8s 的初体验。
通过上述流程和示例,你可以初步感受到 Kubernetes 在本地环境下的运行和管理方式。如果想继续深入学习,可以关注如下方向:
- Kubernetes 基础概念:Pod、Volume、ConfigMap、Secret、DaemonSet、StatefulSet 等。
- Kubernetes 进阶:Helm、Operator、CICD 流程整合、监控与日志体系(Prometheus、Grafana、EFK 等)。
- 云上 Kubernetes:在云环境中体验更完整的 Kubernetes 生态。
附:常用命令速查表
命令 | 说明 |
---|---|
kubectl get nodes | 查看所有节点 |
kubectl get deployments | 查看所有 Deployments |
kubectl get pods | 查看所有 Pods |
kubectl get service | 查看所有 Services |
kubectl describe deployment <deployment-name> | 查看某个 Deployment 详细信息 |
kubectl describe pod <pod-name> | 查看某个 Pod 详细信息 |
kubectl logs <pod-name> | 查看 Pod(容器)的日志 |
kubectl scale deployment <deployment-name> --replicas=n | 扩容/缩容 Deployment 副本数量 |
kubectl delete service <service-name> | 删除某个 Service |
kubectl delete deployment <deployment-name> | 删除某个 Deployment |
结语
在本地通过 Docker Desktop for Windows 运行 Kubernetes,是初学者和开发者快速上手 K8s 的最佳途径之一。它大幅简化了安装和配置流程,而且不需要额外的硬件或云服务。
通过上述内容,你就已经基本理解了这个方法,基础用法我也都有展示。如果你能融会贯通,我相信你会很强
Best
Wenhao (楠博万)