Windows WSL2用户必看:GitHub明星项目Kubernetes详解

云信安装大师
90
AI 质量分
10 5 月, 2025
3 分钟阅读
0 阅读

Windows WSL2用户必看:GitHub明星项目Kubernetes详解

引言

对于使用Windows WSL2的开发者和运维人员来说,Kubernetes(简称K8s)是一个不可忽视的容器编排工具。作为GitHub上的明星项目,Kubernetes已经成为云原生时代的标配。本文将详细介绍如何在WSL2环境中搭建和运行Kubernetes集群,让你在Windows系统上也能体验强大的容器编排能力。

准备工作

在开始之前,请确保你的环境满足以下要求:

  1. Windows 10 版本 2004 或更高版本(建议使用Windows 11)
  2. 已启用WSL2功能
  3. 已安装Ubuntu 20.04 LTS或更高版本的WSL发行版
  4. 至少4GB内存(建议8GB以上)

检查WSL版本

代码片段
wsl --list --verbose

如果显示为WSL1,请升级到WSL2:

代码片段
wsl --set-version Ubuntu-20.04 2

安装Docker for WSL2

Kubernetes需要Docker作为容器运行时环境。

  1. 安装Docker Desktop for Windows:

  2. 安装完成后,打开Docker Desktop设置:

    • General → Use WSL2 based engine (勾选)
    • Resources → WSL Integration → Enable integration with my default WSL distro (勾选)
  3. 在WSL终端验证Docker安装:

代码片段
docker --version
# Docker version 20.10.12, build e91ed57

docker run hello-world

Kubernetes安装与配置

我们将使用轻量级的Kubernetes发行版minikube来搭建本地集群。

1. 安装minikube

代码片段
# 下载minikube二进制文件
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

# 安装到/usr/local/bin目录
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 验证安装
minikube version

2. 启动minikube集群

代码片段
# --driver=docker表示使用docker作为驱动
minikube start --driver=docker

# (可选)如果内存不足,可以限制资源使用
minikube config set memory 4096
minikube config set cpus 2

# (可选)查看集群状态
minikube status

3. 安装kubectl命令行工具

代码片段
# 下载最新稳定版kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

# 添加执行权限并移动到PATH目录
chmod +x kubectl && sudo mv kubectl /usr/local/bin/

# 验证安装和连接集群状态
kubectl version --client && kubectl cluster-info

Kubernetes基本操作实践

让我们通过一个简单的Nginx部署来体验Kubernetes的基本功能。

1. 创建第一个Deployment

代码片段
kubectl create deployment nginx-deployment --image=nginx:latest

# (可选)查看部署状态和Pod信息
kubectl get deployments,pods -o wide

2. Expose Deployment为Service

代码片段
kubectl expose deployment nginx-deployment --type=NodePort --port=80

# (可选)查看服务信息并获取访问URL:
kubectl get services nginx-deployment -o wide 
minikube service nginx-deployment --url 

YAML文件方式部署(推荐)

创建nginx-deployment.yaml文件:

代码片段
apiVersion: apps/v1
kind: Deployment      # Deployment资源类型,用于管理Pod的生命周期  
metadata:
 name: nginx-deployment-yaml # Deployment名称  
spec:
 replicas: 3         # Pod副本数  
 selector:
   matchLabels:
     app: nginx      # Pod选择器标签  
 template:
   metadata:
     labels:
       app: nginx    # Pod标签  
   spec:
     containers:
     - name: nginx   # Pod中的容器名称  
       image: nginx:latest # Docker镜像  
       ports:
       - containerPort: 80 #容器暴露的端口  

---

apiVersion: v1       # Service API版本  
kind: Service        # Service资源类型,用于暴露Pod服务  
metadata:
 name: nginx-service-yaml # Service名称  
spec:
 type: NodePort      # Service类型(NodePort可在集群外访问)  
 selector:
   app: nginx        # Pod选择器标签(与Deployment中一致)  
 ports:
   - protocol: TCP   
     port: 80        # Service端口  
     targetPort:80   # Pod端口 

应用YAML配置:

代码片段
kubectl apply -f nginx-deployment.yaml 

# (可选)查看所有资源状态 
kubectl get all 

Kubernetes Dashboard可视化界面

Minikube内置了Dashboard插件:

代码片段
minikube dashboard 

# (可选)如果浏览器没有自动打开,可以获取URL手动访问 
minikube dashboard --url 

WSL2特有注意事项

  1. 网络问题:WSL2使用虚拟网络,确保主机防火墙允许相关端口通信。如果遇到网络连接问题:

    代码片段
    sudo apt install resolvconf && sudo service resolvconf restart 
    
  2. 性能优化:将项目文件放在WSL文件系统中(如/home/username/projects),而不是Windows挂载路径(如/mnt/c/...),以获得更好的IO性能。

  3. 资源限制:如果遇到内存不足问题,可以在Windows PowerShell中调整WSL内存限制:

    代码片段
    notepad $env:USERPROFILE\.wslconfig 
    
    添加内容:
    [wsl2]
    memory=6GB    #限制最大内存为6GB 
    processors=4    #限制CPU核心数 
    
  4. 数据持久化:Minikube默认创建的卷在虚拟机内部,如果需要持久化数据到主机:

    代码片段
    minikube mount /host/path:/vm/path 
    

Kubernetes核心概念解释

为了帮助理解上述操作背后的原理,这里简要介绍几个关键概念:

  1. Pod:Kubernetes中最小的可部署单元,包含一个或多个紧密相关的容器。

  2. Deployment:声明式的Pod管理方式,可以指定Pod副本数和更新策略。

  3. Service:定义一组Pod的访问策略和负载均衡方式。

  4. NodePort:一种Service类型,将服务暴露到每个节点的静态端口上。

  5. ReplicaSet:确保指定数量的Pod副本始终运行(Deployment会自动创建ReplicaSet)。

Kubernetes常用命令速查表

命令 说明
kubectl get pods|查看所有Pod
kubectl describe pod <pod-name>|查看Pod详细信息
kubectl logs <pod-name>|查看Pod日志
kubectl exec -it <pod-name> bash|进入Pod的shell
kubectl delete pod <pod-name>|删除指定Pod
kubectl apply -f config.yaml|应用YAML配置文件
kubectl scale deployment <deploy-name> --replicas=5|扩展Deployment副本数

Minikube高级用法

Helm包管理器安装

Helm是Kubernetes的包管理器:

代码片段
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash 

helm repo add stable https://charts.helm.sh/stable 

helm repo update 

helm create mychart    #创建一个示例chart  

helm install myrelease ./mychart    #部署chart  

helm list    #查看已安装的release  

Ingress控制器启用

Ingress用于管理外部访问集群服务的路由规则:

代码片段
minikube addons enable ingress 

#验证Ingress控制器是否运行  
kubectl get pods -n kube-system | grep ingress  

cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1    
kind: Ingress    
metadata:
 name: example-ingress    
 annotations:
   nginx.ingress.kubernetes.io/rewrite-target: /$1    
spec:
 rules:
 - host: hello-world.info    
 http:
 paths:
 pathType: Prefix    
 path: /    
 backend:
 serviceName: web    
 servicePort:8080    
EOF  

echo "$(minikube ip) hello-world.info" | sudo tee -a /etc/hosts  

curl hello-world.info  

Kubernetes学习资源推荐

  1. 官方文档 — Kubernetes权威文档

  2. Katacoda —交互式学习平台

3.《Kubernetes in Action》—深入浅出的实战书籍

4.Awesome-Kubernetes—GitHub上的优秀资源集合

5.Play with Kubernetes—免费的在线实验环境

总结

通过本文的学习,你已经掌握了:

✓ WSL2环境下搭建Kubernetes开发环境的方法

✓ Minikube的基本使用方法

✓ kubectl常用命令

✓ YAML配置文件编写基础

✓ WSL2特有的优化技巧

虽然这只是Kubernetes世界的入门,但已经足够你开始探索更复杂的云原生应用了。建议从实际项目入手,逐步掌握更多高级特性如StatefulSets、ConfigMaps、Secrets等。

原创 高质量