【 Docker Desktop】基于Windows + WSL2 的环境配置, 快速部署一套Kubernetes Cluster

配置准备

执行下面命令可以看到, 我们的docker destop启动正常~

bash 复制代码
C:\Users\Administrator>wsl -l -v
  NAME              STATE           VERSION
* Ubuntu            Stopped         2
  docker-desktop    Running         2
  • Enable integration with my default WSL distro
    • 建议:必须开启。否则你在 Ubuntu 里敲 docker 会提示找不到命令,Kind 也无法工作。
  • Enable integration with additional distros

内网地址配置

bash 复制代码
docker login 192.168.1.100:5000 -u admin -p Harbor12345

接下来准备配置k8s

对比如下,

特性 Kind Kubeadm
定位 开发、测试、CI/CD 学习、生产部署
部署方式 在 Docker 容器中模拟节点 在真实主机上安装组件
部署速度 极快(分钟级) 较慢(需手动配置)
复杂度 简单,一键式操作 复杂,多步骤手动操作
资源隔离 较低(共享宿主机) 较高(独立主机)

这里我们本地简单测试,选择Kind, 1个Node, 点击 Create。

bash 复制代码
C:\Users\Administrator>kubectl get pods -A
NAMESPACE            NAME                                            READY   STATUS    RESTARTS   AGE
kube-system          coredns-7d764666f9-l9lpm                        1/1     Running   0          11m
kube-system          coredns-7d764666f9-xnv9s                        1/1     Running   0          11m
kube-system          etcd-desktop-control-plane                      1/1     Running   0          11m
kube-system          kindnet-zgn2h                                   1/1     Running   0          11m
kube-system          kube-apiserver-desktop-control-plane            1/1     Running   0          11m
kube-system          kube-controller-manager-desktop-control-plane   1/1     Running   0          11m
kube-system          kube-proxy-vj7zp                                1/1     Running   0          11m
kube-system          kube-scheduler-desktop-control-plane            1/1     Running   0          11m
local-path-storage   local-path-provisioner-84669cbbb8-5xrzx         1/1     Running   0          11m

快速部署

指令式命令 (Imperative Commands)

bash 复制代码
# 创建 deployment
kubectl create deployment my-nginx --image=nginx

# 暴露端口 (Service)
kubectl expose deployment my-nginx --type=NodePort --port=80

# 获取访问地址
kubectl get svc my-nginx

声明式配置 (Declarative Configuration)

创建一个 .yaml 文件,里面完整描述你的应用,包括镜像、副本数、端口、标签等所有信息。

一个完整的 Deployment 文件示例 (nginx-deployment.yaml)

yaml 复制代码
apiVersion: apps/v1        # API 版本
kind: Deployment           # 资源类型
metadata:
  name: my-nginx           # 部署的名称
spec:
  replicas: 3              # 期望的副本数量
  selector:
    matchLabels:           # 选择器,用于管理带有对应标签的 Pod
      app: nginx
  template:                # Pod 模板
    metadata:
      labels:
        app: nginx         # Pod 的标签,必须与上面的 selector 匹配
    spec:
      containers:
      - name: nginx
        image: nginx:1.25  # 容器镜像及版本
        ports:
        - containerPort: 80 # 容器暴露的端口

创建好文件后,只需一条命令即可完成部署:

bash 复制代码
kubectl apply -f nginx-deployment.yaml

从命令生成配置

bash 复制代码
# 这条命令不会真正创建资源,而是将对应的 YAML 配置打印出来
kubectl create deployment my-nginx --image=nginx --dry-run=client -o yaml

生产级配置示例:

yaml 复制代码
apiVersion: apps/v1          # 1. 基础信息:API版本
kind: Deployment             # 1. 基础信息:资源类型
metadata:
  name: my-web-app           # 1. 基础信息:名字叫 my-web-app
  labels:
    app: web                 # 1. 基础信息:给自己贴个标签
spec:
  replicas: 3                # 2. 规格:我要 3 个副本
  selector:                  # 2. 规格:选择器
    matchLabels:             # 必须匹配下面的标签
      app: web               # 意思是:去管那些标签为 app=web 的 Pod
  template:                  # 3. 模板:下面是 Pod 的定义
    metadata:
      labels:
        app: web             # 3. 模板:Pod 的标签,必须被上面的 selector 选中
    spec:                    # 3. 模板:Pod 的具体配置
      containers:            # 4. 容器细节:容器列表
      - name: nginx          # 4. 容器名
        image: nginx:1.25    # 4. 镜像
        ports:
        - containerPort: 80  # 4. 暴露 80 端口
        
        # --- 进阶配置 ---
        resources:           # 资源限制
          requests:          # 至少需要
            memory: "64Mi"
            cpu: "250m"
          limits:            # 最多只能用
            memory: "128Mi"
            cpu: "500m"
            
        readinessProbe:      # 就绪探针
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5 # 启动后等 5 秒开始检查

FAQ

1. 启动失败

bash 复制代码
running wsl distro proxy in Ubuntu distro: running proxy: running wslexec: An error occurred while running the command. DockerDesktop/Wsl/ExecError: c:\windows\system32\wsl.exe -d ubuntu -u root -e /mnt/wsl/docker-desktop/docker-desktop-user-distro proxy --distro-name ubuntu --docker-desktop-root /mnt/wsl/docker-desktop c:\program files\docker\docker\resources --show-kube-system-containers=true: exit status 1 (stderr: , stdout: , wslErrorCode: DockerDesktop/Wsl/ExecError) (output: <3>WSL (556 - Relay) ERROR: CreateProcessCommon:800: execvpe(/mnt/wsl/docker-desktop/docker-desktop-user-distro) failed: Permission denied) (wslConf: [boot]
systemd=true

2. 为什么建议选择3个Node:1 Control Plane + 2 Workers

这种配置通常被称为"一主两从",是学习 Kubernetes 调度机制的"黄金标准"。

为什么选这个数量?

  1. 体验真实的调度 (Scheduling):
    • 如果你只有 1 个节点,所有组件(ArgoCD, Gateway, 你的应用)都挤在一起,无法测试"节点亲和性"或"跨节点容灾"。
    • 有了 2 个 Worker 节点,你可以模拟真实的生产环境:比如让 ArgoCD 跑在 Worker 1,让业务应用跑在 Worker 2;或者测试当 Worker 1 挂掉时,Pod 是否会自动漂移到 Worker 2。
  2. Gateway/Ingress 的最佳实践:
    • 在使用 NodePort 暴露 Gateway (如 Nginx Ingress) 时,多节点能让你看到负载均衡的效果。流量可以从不同节点的 IP 进入,分发到不同的 Pod 上。
  3. 资源隔离:
    • 控制平面节点专门负责管理集群状态(etcd, api-server)。将工作负载(你的应用)放在 Worker 节点上,可以防止你的测试应用把集群管理界面卡死。

3.Kind 的端口转发机制

由于基于 Windows + WSL2 的环境,Kind 的端口转发机制有一点特殊:

  • 控制平面端口:你在创建集群时(或者默认配置中),Kind 会自动把控制平面的 6443 端口映射出来,所以 kubectl 能正常工作。
  • NodePort 端口:
    • 情况 A(幸运情况):Docker Desktop 现在的版本对 WSL2 的网络支持很好,你可能直接就能通过 localhost:端口 访问上面的 Nginx。
    • 情况 B(常见情况):如果浏览器打不开,这是因为 NodePort 只是映射到了 WSL2 的虚拟网卡上,没自动映射到 Windows 的 localhost。
    • 解决方案(万能大法):
      使用 kubectl port-forward 强制转发端口,这在开发调试中非常常用:
bash 复制代码
# 将本地的 8080 端口转发到 my-nginx 服务的 80 端口
kubectl port-forward svc/my-nginx 8080:80
相关推荐
专业白嫖怪1 小时前
什么是docker
运维·docker·容器
Dfreedom.1 小时前
Windows、虚拟机、开发板组网通信原理及调试通联步骤
人工智能·windows·部署·边缘计算·开发板·模型加速
qq_452396236 小时前
第十篇:《Dockerfile 最佳实践与镜像瘦身》
docker
Plastic garden6 小时前
Docker(1)
运维·docker·容器
三无推导7 小时前
ComfyUI 安装部署教程:Windows 下快速搭建可视化 AI 绘图工作流,零基础也能跑通
人工智能·pytorch·windows·stable diffusion·aigc·ai绘画·持续部署
gs801407 小时前
网络隐形杀手:从 Could not connect to SMTP host 报错深度剖析 Docker MTU 黑洞理论与实战
网络·docker·容器
程序猿阿伟8 小时前
《一套完整方法论:搞定图形应用的Docker镜像优化》
数据库·docker·容器
java_logo9 小时前
2026 Docker 国内镜像加速配置教程
运维·docker·容器·docker镜像·docker镜像源·docker镜像加速·docker镜像国内库
IT策士9 小时前
Docker从0到1再到 Kubernetes 实战:第15篇Compose 中的服务依赖、健康检查与启动顺序
docker·容器·kubernetes
nnsix9 小时前
PS【PhotoShop】实现拷贝到Windows粘贴板上
windows