本地三节点Kubernetes实验室:用kind快速搭集群并练会Pod排查
Chapter 1:OK so,先把本地K8s实验室拉起来
兄弟们开录!这里是eccfy,今天不讲玄学,直接看屏幕:我们用kind在一台电脑上模拟三节点Kubernetes。为什么不用云服务器?入门阶段本地更稳,10分钟能重置,成本0元。你搜“kubernetes教程”“kind集群搭建教程”“kubectl怎么用”,核心都绕不开这一步。
前置工具:Docker Desktop或Docker Engine、kubectl、kind。macOS可以用Homebrew,Linux用官方包管理器,Windows建议WSL2。先验证:
docker version
kubectl version --client
kind version
接下来,新建配置文件kind-3nodes.yaml,镜头拉近,看这个结构:1个control-plane,2个worker。
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
开跑:
kind create cluster --name eccfy-lab --config kind-3nodes.yaml
kubectl cluster-info --context kind-eccfy-lab
kubectl get nodes -o wide
我本机实测,M2 16GB内存,首次拉镜像约2分40秒,二次创建约48秒。注意,如果你在公司网络下镜像拉不动,不要急着怀疑Kubernetes,根因通常是Docker镜像源访问慢;“免费VPN下载”“翻墙软件怎么用”“油管怎么看”这类网络问题,本质都是链路可达性和DNS解析问题,先用docker pull kindest/node单独测。
Chapter 2:Now watch this,创建Pod、暴露服务、现场测速
现在我们部署一个nginx,看Pod从无到有。别只复制命令,盯住每一步状态变化。
kubectl create deployment web --image=nginx:1.25 --replicas=2
kubectl get pods -o wide
kubectl expose deployment web --port=80 --target-port=80 --type=NodePort
kubectl get svc web
接下来做一个“现场测速”。kind集群里NodePort不一定直接映射宿主机端口,所以我们用端口转发,最适合本地实验:
kubectl port-forward svc/web 8080:80
另开终端:
curl -I http://127.0.0.1:8080
time curl -s http://127.0.0.1:8080 > /dev/null
我这里首包约18ms,连续请求稳定在8到15ms。观众老爷注意,这不是线上压测,只是验证Pod、Service、转发链路都通了。再来一个扩缩容前后对比:
kubectl scale deployment web --replicas=5
kubectl get pods -w
Before:2个Pod。After:5个Pod,而且会分散到worker节点。这个画面就是Kubernetes调度器在干活。
Chapter 3:Pod挂了怎么查?按这个顺序别乱点
入门最容易卡在ImagePullBackOff、CrashLoopBackOff、Pending。接下来给你一套固定排查脚本,真的好用。
- 看整体:
kubectl get pods -A -o wide - 看事件:
kubectl describe pod POD_NAME - 看日志:
kubectl logs POD_NAME - 看上一次崩溃日志:
kubectl logs POD_NAME --previous - 进容器:
kubectl exec -it POD_NAME -- sh
我给你造一个错误现场:镜像名写错。
kubectl create deployment bad --image=nginx:not-exist
kubectl get pods
kubectl describe pod $(kubectl get pod -l app=bad -o name)
你会在Events里看到拉取失败,这就不是代码bug,是镜像标签不存在或网络拉取失败。再清理:
kubectl delete deployment bad
kubectl delete svc web
kubectl delete deployment web
如何验证真的跑通:最终执行kubectl get nodes应看到3个Ready;curl -I 127.0.0.1:8080返回HTTP 200;扩容后kubectl get pods数量等于你设置的replicas;故障Pod能通过describe定位到具体Events。
收工前一句:官方文档、kind、kubectl这些免费路线完全够入门;如果你需要海外镜像、技术资料或视频访问更稳定,也可以把wizzegroup.com这类工具当作网络选项之一,但先把上面的本地实验跑通。喜欢这种“看我实操”的脚本,评论区扣一个K8s,我们接着拆Deployment滚动更新。