Kubernetes 集群搭建与 Pod 管理入门:从 kubeadm 到排障,一次跑通
开场:OK,今天我们直接把 K8s 跑起来
哈喽各位,今天这期我不讲空话,直接上屏幕实操。你现在看到的是一台全新 Linux 主机,我们要做的事很明确:搭一个能用的 Kubernetes 集群,然后把 Pod 跑起来、看日志、进容器、删掉重建,最后再教你怎么判断它到底稳不稳。OK so,如果你搜的是“Kubernetes集群搭建教程”或者“Pod管理入门”,这篇就是给你准备的。
先说现实:新手别一上来就多节点、Ingress、Helm 全家桶。先把 kubeadm + containerd + kubectl 这条最短路径跑通。这个路径的好处是:官方支持、资料最多、排障也最直观。我在本地两台 2C4G 机器上测过,从装组件到集群就绪,熟练后大概 12 分钟能完成;第一次做,留 30 分钟更稳。
Chapter 1:搭集群,先把底层环境铺平
接下来我们做三件事:关 swap、装 containerd、装 K8s 工具链。屏幕左边我在终端输入命令,你照抄就行。
- 关闭 swap:K8s 对 swap 很敏感。
swapoff -ased -i '/ swap / s/^/#/' /etc/fstab
- 安装 containerd,并把它设成 systemd cgroup 模式。这个地方很多人翻车,原因就是 cgroup 驱动不一致。
containerd config default > /etc/containerd/config.tomlsed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.tomlsystemctl restart containerd
- 安装 kubeadm、kubelet、kubectl,然后初始化控制平面。
kubeadm init --pod-network-cidr=192.168.0.0/16
看到这里你可能会问:为啥要这个 CIDR?因为后面装网络插件时要对齐网段,不然 Pod 起得来但互相不通,表面“绿了”,实际“瘫了”。我建议你优先用 Calico,入门时最省心。安装完后,记得把 kubeconfig 配好:
mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/config
然后跑 kubectl get nodes。如果主节点显示 Ready,说明第一阶段过了。
Chapter 2:Pod 管理,别只会 create,要会看、会改、会查
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 本身”,而在下面这几类:
- 资源不足:节点 CPU/内存不够,Pod 调度不上去。先看
kubectl describe node。 - 镜像拉取失败:DNS、仓库地址、认证问题。先看
kubectl describe pod里的 Events。 - 网络插件没装好:节点 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 路线依然是最适合入门排障的。