首页 / 容器云原生 / 本地三节点Kubernetes实验室

本地三节点Kubernetes实验室:用kind快速搭集群并练会Pod排查

Roxi
Roxi 加速器 — 稳定·快速·安全
全球节点覆盖,支持所有主流平台,一键连接无需配置。新用户免费试用。
立即体验 →

Chapter 1:OK so,先把本地K8s实验室拉起来

Q1需求调研Q2产品开发Q3内测上线Q4全面推广

兄弟们开录!这里是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、暴露服务、现场测速

STEP 1环境搭建🚀STEP 2编码实现📋STEP 3测试验证🎯STEP 4部署上线

现在我们部署一个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。接下来给你一套固定排查脚本,真的好用。

  1. 看整体:kubectl get pods -A -o wide
  2. 看事件:kubectl describe pod POD_NAME
  3. 看日志:kubectl logs POD_NAME
  4. 看上一次崩溃日志:kubectl logs POD_NAME --previous
  5. 进容器: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滚动更新。