当前位置: 首页 > news >正文

在 Windows 上使用 Docker Desktop 快速搭建本地 Kubernetes 环境(附详细部署教程)

言简意赅的讲解Docker Desktop for Windows搭建Kubernetes解决的痛点

目标读者

  • 对 Docker Desktop 有一定了解,能在 Windows 上成功安装和使用 Docker Desktop。
  • 想要在本地快速搭建一套 Kubernetes 环境进行测试或学习的开发者。

一、准备工作

  1. 安装 Docker Desktop for Windows

    • 如果尚未安装,请从 Docker 官网 下载并安装 Docker Desktop for Windows。
    • 注意必须在 Windows 10(家庭版以上)或者 Windows 11,以及开启 Hyper-V 或者 WSL2 功能(具体可参考 Docker 官方文档进行配置)。
  2. 确保可以访问 Docker Hub

    • Docker Desktop 在启用 Kubernetes 时,会自动拉取所需的 Kubernetes 相关镜像。由于镜像较大,且有可能存在网络限制,建议根据自身网络环境配置科学上网工具,确保镜像能够顺利下载。
  3. 初始 Docker Desktop 设置

    • 在不启用 Kubernetes 的情况下,先启动并配置好 Docker Desktop,以确保 Docker 能正常工作。
    • 打开 Docker Desktop,在右上角齿轮图标中可以进行必要的配置(如 CPU、内存限制等),以免在启用 Kubernetes 后出现资源不足问题。

二、启用 Kubernetes

  1. 打开 Docker Desktop,进入“Settings”

    • 点击右上角齿轮图标,或在任务栏图标上右键选择 “Settings”。
  2. 选择“Kubernetes”选项卡

    • 在左侧菜单中找到 “Kubernetes”,勾选 “Enable Kubernetes”。
  3. 等待 Kubernetes 启用

    • 点击 “Apply & Restart” 之后,Docker Desktop 会重启自身并拉取 Kubernetes 所需的镜像。
    • 注意:这一步可能会耗费比较长的时间,请耐心等待。如果网络环境无法连接镜像仓库,需要配置合适的科学上网工具。
    • 启用完成后,Docker Desktop 左下角会出现 “Kubernetes running” 的状态提示。

温馨提示:如果由于网络问题导致一直无法下载镜像,可以尝试使用官方或第三方镜像加速器,这会大大提升拉取速度。

Docker desktop 启动 Kubernetes


三、初识 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 已经正确启用并可用。

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 已经生效。

Kubernetes创建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 Service 端口映射
Kubernetes部署成功验证


五、查看和管理 Kubernetes 资源

  1. 查看 Pod 详情
kubectl describe pod <pod-name>
  • 这条命令可以深入查看某个 Pod 的状态、事件日志、容器的启动参数等,便于排查问题。
  1. 日志查看
kubectl logs <pod-name>
  • 如果想查看日志,可以使用 kubectl logs 命令,后面加上 Pod 名称或者加 -f 进行实时查看。
  1. 伸缩(Scaling)示例
kubectl scale deployment nginx-deployment --replicas=3
  • 通过上面命令,可以让 Nginx 的副本数变为 3 个。再次查看 Pods,即可发现 3 个副本同时运行。
  1. 删除资源
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默认没有Ingress


七、总结

  1. Docker Desktop for Windows 提供了一个非常便捷的本地 Kubernetes 环境,适合开发者做快速验证、个人学习和小型测试。
  2. 在启用 Kubernetes 前,一定要确保网络环境良好,以免拉取镜像时间过长导致卡顿或失败。
  3. 在基本部署一个 Deployment + Service 后,可以体验 Kubernetes 的核心概念:Pod、ReplicaSet、Service、Resource Management、Scale、Logs 等。
  4. Ingress 等更高级功能需要额外安装对应的组件(Ingress Controller),而 Docker Desktop 默认并未集成。
  5. 整个过程中,无需手动安装 kubectl 工具,无需手动修改 hosts 文件,更加简化了本地 K8s 的初体验。

通过上述流程和示例,你可以初步感受到 Kubernetes 在本地环境下的运行和管理方式。如果想继续深入学习,可以关注如下方向:

  • Kubernetes 基础概念:Pod、Volume、ConfigMap、Secret、DaemonSet、StatefulSet 等。
  • Kubernetes 进阶:Helm、Operator、CICD 流程整合、监控与日志体系(Prometheus、Grafana、EFK 等)。
  • 云上 Kubernetes:在云环境中体验更完整的 Kubernetes 生态。

Docker Desktop for Windows成功部署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 (楠博万)

http://www.xdnf.cn/news/1053001.html

相关文章:

  • 第六章、6.2 ESP32低功耗模式详解:深度睡眠与轻度睡眠实战指南
  • Java泛型深度解析
  • MySQL-DCL数据控制语言详解
  • 深度学习打卡1
  • 【计算机网络】网络层IP协议与子网划分详解:从主机通信到网络设计的底层逻辑
  • Windows平台轻量级图片处理工具实测:功能与体验分享
  • 「Matplotlib 入门指南」 Python 数据可视化分析【数据分析全栈攻略:爬虫+处理+可视化+报告】
  • 前端面试九之Vue Router
  • 【Qt 中的元对象系统(Meta-Object System)】
  • 洛谷 P3865 【模板】ST 表 RMQ 问题
  • 基于OpenManus的跨平台部署方案及远程访问安全机制
  • 李宏毅2025《机器学习》第二讲-深度解构AI Agent:让大型语言模型学会记忆、使用工具与制定计划
  • LeetCode 2389.和有限的最长子序列
  • libuv 框架
  • RabbitMQ死信队列
  • 【测开面试题】八股文总结
  • 快速上手文本向量模型 Sentence-Transformers
  • Java正则分组:高效捕获与引用技巧
  • InnoDB的undo日志的数据结构
  • 从0开始学习R语言--Day24--稀疏建模
  • 基于MSE-Nacos实现服务的动态发现和配置动态管理
  • 车载软件架构 --- 汽车中央控制单元HPC软件架构方案实例
  • 生成对抗网络(GANs)入门介绍指南:让AI学会“创造“的魔法(一)
  • 已知路由表和分组的目的地址求对应的下一跳地址
  • 一阶偏微分方程特征线与解分析
  • C#最佳实践:为何应减少嵌套
  • JavaScript学习笔记
  • java基础面试题。
  • 信息学奥赛一本通 1541:【例 1】数列区间最大值
  • C# 枚举(位标志)