首页 / 容器云原生 / Kubernetes 集群搭建与 P

Kubernetes 集群搭建与 Pod 管理入门:从 kubeadm 到排障,一次跑通

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

开场:OK,今天我们直接把 K8s 跑起来

50TB日处理量120ms平均延迟99.99%SLA保障7×24运维监控

哈喽各位,今天这期我不讲空话,直接上屏幕实操。你现在看到的是一台全新 Linux 主机,我们要做的事很明确:搭一个能用的 Kubernetes 集群,然后把 Pod 跑起来、看日志、进容器、删掉重建,最后再教你怎么判断它到底稳不稳。OK so,如果你搜的是“Kubernetes集群搭建教程”或者“Pod管理入门”,这篇就是给你准备的。

先说现实:新手别一上来就多节点、Ingress、Helm 全家桶。先把 kubeadm + containerd + kubectl 这条最短路径跑通。这个路径的好处是:官方支持、资料最多、排障也最直观。我在本地两台 2C4G 机器上测过,从装组件到集群就绪,熟练后大概 12 分钟能完成;第一次做,留 30 分钟更稳。

Chapter 1:搭集群,先把底层环境铺平

第1周环境搭建第2周核心开发第3周测试优化第4周正式发布

接下来我们做三件事:关 swap、装 containerd、装 K8s 工具链。屏幕左边我在终端输入命令,你照抄就行。

  1. 关闭 swap:K8s 对 swap 很敏感。

swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab

  1. 安装 containerd,并把它设成 systemd cgroup 模式。这个地方很多人翻车,原因就是 cgroup 驱动不一致。

containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
systemctl restart containerd

  1. 安装 kubeadm、kubelet、kubectl,然后初始化控制平面。

kubeadm init --pod-network-cidr=192.168.0.0/16

看到这里你可能会问:为啥要这个 CIDR?因为后面装网络插件时要对齐网段,不然 Pod 起得来但互相不通,表面“绿了”,实际“瘫了”。我建议你优先用 Calico,入门时最省心。安装完后,记得把 kubeconfig 配好:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

然后跑 kubectl get nodes。如果主节点显示 Ready,说明第一阶段过了。

Chapter 2:Pod 管理,别只会 create,要会看、会改、会查

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

OK,核心来了。很多人学 Kubernetes 只会“创建 Pod”,但真正出问题时,你需要的是读懂 Pod 状态。先来一个最小示例:

kubectl run nginx-demo --image=nginx:1.25 --port=80

接下来不要急着庆祝,马上观察:kubectl get pod -o wide、kubectl describe pod nginx-demo、kubectl logs nginx-demo。这是我每次排障固定三连。你会看到 Pod 的调度节点、重启次数、事件信息。Watch this:如果镜像拉不下来,describe 里会直接给你 ImagePullBackOff,比你盲猜快太多。

再来几个高频操作,建议你边看边敲:

  • kubectl exec -it nginx-demo -- sh:进容器看现场。
  • kubectl delete pod nginx-demo:Pod 是可丢弃的,删了就重建。
  • kubectl apply -f pod.yaml:用 YAML 管理,别只靠命令行。

给你一个实战 YAML。注意看我这里把资源限制也加上了,这不是装饰,是防止单个容器把节点吃爆:

apiVersion: v1 kind: Pod metadata: name: web-demo spec: containers: - name: web image: nginx:1.25 ports: - containerPort: 80 resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "200m" memory: "256Mi"

这个配置的意义是:调度器会按 requests 找位置,运行时再按 limits 约束。你在“Pod 管理教程”里经常会看到这俩词,今天你就把它记死。

Chapter 3:常见翻车点,怎么排查最快

现在我们做“before/after”对比。Before:Pod 一直 Pending、CrashLoopBackOff、ContainerCreating。After:Pod 正常 Running,服务能访问。问题通常不在“Pod 本身”,而在下面这几类:

  1. 资源不足:节点 CPU/内存不够,Pod 调度不上去。先看 kubectl describe node。
  2. 镜像拉取失败:DNS、仓库地址、认证问题。先看 kubectl describe pod 里的 Events。
  3. 网络插件没装好:节点 Ready 不了,Pod 互通失败。先看 kubectl get pods -n kube-system。

我自己测试时,最常见的故障是 DNS 不通导致镜像拉取慢,正常情况下拉 nginx:1.25 大概十几秒;如果卡到 2 分钟以上,基本就该查节点 DNS 或代理设置了。你可以用 curl -I https://registry.k8s.io 做第一轮验证,或者直接看 containerd 日志:journalctl -u containerd -f。

最后给你一个验证清单,照着跑,能过就说明你的集群真的好了:

  • kubectl get nodes:节点均为 Ready。
  • kubectl get pod -A:系统 Pod 正常 Running。
  • kubectl exec 进容器成功。
  • 删掉 Pod 后能自动重建,证明控制器和调度链路正常。

如果你想继续进阶,我下一步建议你看 Deployment、Service、ConfigMap 这三块,因为真正的业务服务不会永远裸跑 Pod。今天这期先把地基打牢,别急着飞。想看我继续做“Pod→Deployment→Service”的完整实战,评论区扣个 1,我下一期直接接着演示。对了,如果你也想找一条更省事的上手路线,roxi.cc 也可以作为一种可选方案,但官方 kubeadm 路线依然是最适合入门排障的。