1. 为什么选择Docker Desktop搭建K8s环境
刚开始接触Kubernetes时,我在云服务器上折腾过Minikube,也尝试过手动部署多节点集群,结果不是网络配置出问题就是资源消耗太大。直到发现Docker Desktop内置的Kubernetes功能,才真正体会到什么叫"开箱即用"。这个方案特别适合以下场景:
- 本地开发测试:不需要额外虚拟机,笔记本就能跑起完整集群
- 快速验证想法:部署一个应用只需几分钟,随时可以推倒重来
- 学习K8s基础:所有核心功能都支持,从Pod到Service再到Ingress
我团队现在所有新人的K8s入门第一课,都是在Docker Desktop上完成的。相比其他方案,它有三大优势:
- 零配置:勾选一个复选框就能启用K8s
- 资源友好:可以灵活调整CPU/内存分配
- 生态集成:和Docker镜像仓库无缝配合
2. 环境准备与安装
2.1 安装Docker Desktop
国内用户建议从阿里云镜像站下载安装包,速度会快很多。安装时注意:
- Windows系统需要开启WSL2后端(Win10 2004以上版本)
- macOS建议分配至少4GB内存给Docker
- 首次启动后记得在Settings→Docker Engine里配置国内镜像源
// 推荐镜像配置 { "registry-mirrors": [ "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn" ] }2.2 启用Kubernetes功能
在Docker Desktop的设置界面,找到Kubernetes选项卡:
- 勾选"Enable Kubernetes"
- 建议将API Server端口改为6443(避免与其他服务冲突)
- 点击Apply按钮等待安装完成
第一次启动可能会下载约500MB的镜像,建议挂上网络加速工具。我在公司网络下实测安装需要15-20分钟,完成后会看到右下角鲸鱼图标变成绿色。
注意:如果长时间卡在starting状态,可以尝试重置集群(Reset Kubernetes Cluster)
3. 验证集群状态
安装完成后,打开终端运行几个基本命令:
# 检查节点状态 kubectl get nodes # 查看所有系统Pod kubectl get pods -n kube-system # 获取集群信息 kubectl cluster-info正常情况应该看到类似这样的输出:
NAME STATUS ROLES AGE VERSION docker-desktop Ready control-plane 5d v1.25.24. 部署Dashboard可视化界面
虽然命令行够用,但有个可视化面板会更直观。推荐使用官方Dashboard:
# 安装Dashboard kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml # 创建管理员账号 kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard EOF # 绑定集群管理员权限 kubectl apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard EOF获取访问令牌:
kubectl -n kubernetes-dashboard create token admin-user启动代理后,浏览器访问:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/5. 实战:部署Nginx应用
让我们用三种不同方式部署Nginx,体验K8s的核心功能:
5.1 直接创建Deployment
kubectl create deployment nginx-demo --image=nginx:latest --replicas=25.2 通过YAML文件部署
创建nginx-deployment.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:alpine ports: - containerPort: 80应用配置:
kubectl apply -f nginx-deployment.yaml5.3 暴露Service访问
# 创建NodePort类型的Service kubectl expose deployment nginx --type=NodePort --name=nginx-service # 获取访问端口 kubectl get svc nginx-service访问测试:
- Docker Desktop会自动映射端口到localhost
- 浏览器打开http://localhost: 就能看到Nginx欢迎页
6. 常见问题排查
6.1 镜像拉取失败
典型报错:
ErrImagePull or ImagePullBackOff解决方法:
# 先检查镜像名称是否正确 kubectl describe pod <pod-name> # 国内环境可以为特定Pod配置镜像加速 kubectl edit deployment <deployment-name> # 在spec→containers→image字段替换为国内镜像源6.2 Pod一直处于Pending状态
运行:
kubectl describe pod <pod-name>常见原因:
- 资源不足(调整Docker Desktop内存分配)
- 节点有污点(开发环境可以移除污点)
- 存储卷挂载失败
6.3 Dashboard无法访问
检查步骤:
- 确认代理是否运行:
kubectl proxy - 检查防火墙是否放行8001端口
- 尝试清除浏览器缓存
7. 进阶配置技巧
7.1 自定义资源配额
在Docker Desktop的Advanced设置中,可以调整:
- CPUs数量(建议留1核给系统)
- 内存大小(开发环境4GB起步)
- Swap大小(不建议完全禁用)
7.2 使用本地镜像
开发时经常需要测试自建镜像:
# 先构建本地镜像 docker build -t my-app:latest . # 让K8s使用本地镜像 kubectl run my-app --image=my-app:latest --image-pull-policy=Never7.3 持久化存储配置
创建hostPath类型的存储卷示例:
apiVersion: v1 kind: Pod metadata: name: test-pd spec: containers: - image: nginx name: nginx volumeMounts: - mountPath: /usr/share/nginx/html name: test-volume volumes: - name: test-volume hostPath: path: /data type: Directory8. 日常开发工作流
我个人的最佳实践是:
- 在本地用Docker构建和测试单个容器
- 编写K8s部署描述文件(YAML)
- 使用
kubectl apply -f部署到本地集群 - 通过
kubectl port-forward调试服务 - 确认无误后提交到代码仓库
对于复杂项目,建议使用Skaffold这样的工具自动化这个流程。它能在代码变更时自动重建镜像并重新部署,大幅提升开发效率。