言简意赅的讲解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.pswp.cn/news/912351.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912351.shtml
英文地址,请注明出处:http://en.pswp.cn/news/912351.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dockercompose快速安装ELK

第一步&#xff1a;环境准备 请确保您的机器上已经安装了 Docker 和 Docker Compose。 第二步&#xff1a;创建项目目录和配置文件 为了让 Docker Compose 能够正确地构建和管理容器&#xff0c;我们需要创建一个特定的目录结构。 创建一个主目录&#xff0c;例如 elk-stack。…

闲聊ARM内核参数传递机制

之前一直没怎么在意这个问题&#xff0c;直到最近搞了个奇奇怪怪的项目&#xff0c;才发现这部分知识得补上来&#xff0c;记录一下。 ARM有一个标准&#xff0c;叫《Procedure Call Standard for the Arm Architecture》&#xff0c;人话就是ARM架构过程调用标准&#xff0c;…

万兴喵影Filmora AI Video v14.7.03国际高级版,AI视频剪辑全能工具,一键专业级创作​

[软件名称]: 万兴喵影Filmora AI Video v14.7.03 [软件大小]: 199.4 MB [下载通道]: 夸克盘 | 迅雷盘 软件介绍 &#x1f3ac;《万兴喵影》v14.7.03国际高级版&#xff5c;AI智能剪辑神器&#xff0c;解锁全功能无水印&#xff01; ✨ 核心优势&#xff1a; ✅ 1000背景音…

暴力风扇方案介绍

炎炎夏日&#xff0c;当普通风扇只能送来 “温柔拂面”&#xff0c;暴力风扇却能吹出 “台风级” 清凉&#xff01;想知道这些 “风力狂魔” 是如何炼成的&#xff1f;答案藏在电机、电路和芯片的黄金三角组合里。​ 一、电机&#xff1a;暴力风扇的 “心脏起搏器”​ 暴力风扇…

pyqt小问题汇总

文章目录 1、inherit global site-packages2、setGeometry(10,20,30,40)setGeometry(x, y, width, height)1. **x参数**2. **y参数**3. **width参数**4. **height参数** 示例说明与其他方法的对比注意事项示例代码 1、inherit global site-packages 在pycharm 创建项目时&…

提升JavaScript性能的六大关键策略

1、优化代码结构与算法 避免使用嵌套循环&#xff0c;改用更高效的算法如哈希表或二分查找。减少不必要的计算&#xff0c;缓存重复使用的计算结果。使用时间复杂度更低的算法替代高复杂度操作。优化递归调用&#xff0c;避免栈溢出和性能瓶颈。改用迭代或尾递归优化。简化条件…

打造跨平台应用的全能框架:Dioxus

在如今飞速发展的数字世界中,越来越多的开发者开始寻找能够满足跨平台需求的高效框架。而在这些选择中,Dioxus这个全栈应用框架脱颖而出。Dioxus是一款为Web、桌面和移动端开发而设计的全栈框架,采用Rust语言,具备跨平台、一体化的优势。本文将深入介绍Dioxus的独特功能,应…

大事件项目记录5-用户接口开发-更新用户头像

5&#xff09;更新用户头像。 UserController.java&#xff1a; PatchMapping("updateAvatar")public Result updateAvatar(RequestParam String avatarUrl){userService.updateAvatar(avatarUrl);return Result.success();} UserService.java&#xff1a; UserServ…

Spring Cloud 微服务架构模型

下面是一个完整的 springcloud-eureka-demo 示例项目&#xff0c;包含&#xff1a; Eureka Server 注册中心 Eureka Client 服务提供者&#xff08;service-provider&#xff09; Eureka Client 服务消费者&#xff08;service-consumer&#xff09; &#x1f4c1; 项目结构…

计算机网络 网络层:控制平面

在本章中&#xff0c;包含网络层的控制平面组件。控制平面作为一种网络范围的逻辑&#xff0c;不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报&#xff0c;而且控制网络层组件和服务如何配置和管理。5.2节&#xff0c;传统的计算图中最低开销路径的路由选…

力扣第85题-最大矩形

力扣链接:85. 最大矩形 - 力扣&#xff08;LeetCode&#xff09; 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 输入&#xff1a;matrix [["1","0","1","…

6-创建和查询

创建&查询 DDL - 表操作 - 查询 查询当前数据库所有表 查询库表之前需要先试用 use 数据库名 进入数据库才可以查询到该数据库的库表, 否则将会出现未选择数据库的报错; 如果数据库中并无数据表, 则会出现 Empty set 的相应结果 SHOW TABLES;切换到 sys 数据库, 并且查询库…

【Java面试】MySQL的聚集索引和非聚集索引的区别?

一、存储结构的本质差异 物理存储的哲学冲突 聚集索引的本质是将数据行的物理存储顺序与索引键值的逻辑顺序强制绑定&#xff0c;这种设计源于计算机科学的局部性原理&#xff08;Locality Principle&#xff09;。 为什么选择B树&#xff1f; B树的平衡多路特性&#xff08;通…

LRU缓存设计与实现详解

LRU缓存设计与实现详解 一、LRU缓存核心概念1.1 LRU策略定义1.2 应用场景1.3 核心操作要求 二、数据结构设计&#xff1a;双向链表哈希表2.1 为什么选择双向链表&#xff1f;2.2 为什么结合哈希表&#xff1f;2.3 节点结构设计&#xff08;双向链表&#xff09;2.4 LRU缓存的逻…

RabbitMQ中,basicAck、basicNack和basicReject是三种核心的消息确认机制

channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); channel.basicReject(message.getMessageProperties().getDeliveryTag(), false); channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); 在RabbitMQ中&#xff0…

UNIAPP入门基础

一、开发环境准备 1. 安装 HBuilderX(官方推荐IDE) 下载地址:HBuilderX 官网 版本选择: App开发版:开箱即用,内置 UniApp 插件 标准版:需手动安装 UniApp 插件(运行时会提示) 安装步骤: Windows:双击安装包,勾选“创建桌面快捷方式” macOS:拖拽到 Applications…

前端单点登录

“前端单点登录&#xff08;SSO, Single Sign-On&#xff09;”是指在多个系统之间共享用户登录状态&#xff0c;使用户只需登录一次&#xff0c;就可以在多个子系统中使用同一身份访问资源&#xff0c;无需重复登录。 以下是一个典型的前端单点登录方案的介绍和实现思路&…

DiNA:扩张邻域注意力 Transformer

摘要 Transformer 正迅速成为跨模态、跨领域和跨任务中应用最广泛的深度学习架构之一。在计算机视觉领域&#xff0c;除了持续发展的纯 transformer 架构&#xff0c;分层 transformer 也因其优越的性能和在现有框架中易于集成而受到广泛关注。这类模型通常采用局部化的注意力…

对于“随机种子”的作用的理解

深度学习系统的两大组成部分 确定性部分&#xff08;无法通过种子改变&#xff09;&#xff1a; ✅ 网络结构&#xff1a;层数、神经元数量、连接方式 ✅ 学习率&#xff1a;如您所说&#xff0c;这是开发者明确设置的固定值或调度策略 ✅ 损失函数&#xff1a;MSE、CrossEnt…

C# 委托(调用带引用参数的委托)

调用带引用参数的委托 如果委托有引用参数&#xff0c;参数值会根据调用列表中的一个或多个方法的返回值而改变。 在调用委托列表中的下一个方法时&#xff0c;参数的新值&#xff08;不是初始值&#xff09;会传给下一个方法。例如&#xff0c; 如下代码调用了具有引用参数的…