1. WSL Ubuntu 上构建 Kubernetes v1.34.2 + Docker 环境的必要性
在Windows系统上通过WSL运行Ubuntu并搭建Kubernetes集群,已经成为开发者本地测试和学习的首选方案。相比传统虚拟机,WSL2提供了接近原生Linux的性能,而Docker作为容器运行时与Kubernetes的集成,则让应用部署变得前所未有的便捷。
我选择这个组合主要基于三个实际需求:首先,需要在本地快速验证Kubernetes配置而不影响生产环境;其次,WSL的文件系统性能足够支撑日常开发;最后,Docker作为最熟悉的容器工具,其丰富的镜像生态能极大提升工作效率。这个方案特别适合需要频繁测试Kubernetes特性的开发者,或者准备CKA认证需要练习环境的学员。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 WSL2与Ubuntu安装
首先确保Windows版本为19041或更高,在PowerShell以管理员身份运行:
bash复制wsl --install -d Ubuntu-22.04
安装完成后需要将WSL版本显式设置为WSL2:
bash复制wsl --set-version Ubuntu-22.04 2
注意:如果遇到WSL安装缓慢问题,可以手动下载Ubuntu镜像包(.appx)后通过
wsl --import命令导入
2.2 系统基础配置
更新软件源并安装必要工具:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates lsb-release
关键内核参数调整(Kubernetes强制要求):
bash复制cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 网络参数配置
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
3. Docker引擎与CRI适配层安装
3.1 Docker-CE安装
由于Kubernetes v1.24+移除了对Docker的直接支持,我们需要先安装Docker再通过CRI适配层对接:
bash复制# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker引擎
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
验证安装:
bash复制sudo docker run --rm hello-world
3.2 cri-dockerd部署
这是连接Kubernetes与Docker的关键组件:
bash复制# 下载v0.3.23版本
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.23/cri-dockerd_0.3.23.3-0.ubuntu-$(lsb_release -cs)_amd64.deb
# 安装并配置服务
sudo dpkg -i cri-dockerd_*.deb
sudo systemctl enable cri-docker.service
创建服务覆盖配置:
bash复制sudo mkdir -p /etc/systemd/system/cri-docker.service.d/
cat <<EOF | sudo tee /etc/systemd/system/cri-docker.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=registry.k8s.io/pause:3.10
EOF
sudo systemctl daemon-reload
sudo systemctl restart cri-docker.service
4. Kubernetes v1.34.2集群部署
4.1 组件安装
添加Kubernetes官方仓库:
bash复制curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.34/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
安装指定版本组件:
bash复制sudo apt update
sudo apt install -y kubelet=1.34.2-1.1 kubeadm=1.34.2-1.1 kubectl=1.34.2-1.1
sudo apt-mark hold kubelet kubeadm kubectl
4.2 集群初始化
预拉取镜像(避免初始化时超时):
bash复制sudo kubeadm config images pull --kubernetes-version=v1.34.2 --cri-socket=unix:///var/run/cri-dockerd.sock
初始化控制平面:
bash复制sudo kubeadm init \
--apiserver-advertise-address=$(hostname -I | awk '{print $1}') \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--kubernetes-version=v1.34.2
配置kubectl:
bash复制mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5. 网络插件与功能验证
5.1 Flannel网络部署
bash复制kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
允许master节点调度Pod:
bash复制kubectl taint nodes --all node-role.kubernetes.io/control-plane-
5.2 测试应用部署
运行Nginx测试:
bash复制kubectl create deployment nginx --image=nginx:1.25-alpine
kubectl expose deployment nginx --port=80 --type=NodePort
# 获取访问端口
kubectl get svc nginx -o jsonpath='{.spec.ports[0].nodePort}'
6. 常见问题与优化建议
6.1 典型故障排查
镜像拉取失败:
bash复制# 临时使用阿里云镜像源
sudo kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
cri-dockerd连接问题:
检查服务状态:
bash复制journalctl -u cri-docker -f
验证socket文件:
bash复制ls -l /var/run/cri-dockerd.sock
6.2 性能优化建议
- 限制Kubernetes资源使用:
bash复制# 编辑kubelet配置
sudo vi /etc/default/kubelet
添加:
KUBELET_EXTRA_ARGS="--system-reserved=cpu=500m,memory=500Mi --kube-reserved=cpu=500m,memory=500Mi"
- 配置Docker镜像加速:
bash复制sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
sudo systemctl restart docker
7. 开发环境进阶配置
7.1 Helm工具集成
bash复制curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
添加常用仓库:
bash复制helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
7.2 本地镜像构建支持
配置Docker与Kubernetes共享镜像:
bash复制sudo vi /etc/containerd/config.toml
# 添加:
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d"
创建镜像快捷构建脚本:
bash复制cat <<'EOF' > kubebuild
#!/bin/bash
docker build -t $1 .
docker save $1 > /tmp/k8s-temp.tar
microk8s ctr image import /tmp/k8s-temp.tar
rm /tmp/k8s-temp.tar
EOF
chmod +x kubebuild
