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

Kubernetes集群搭建与Pod管理入门:从单节点到排障验证的实战教程

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

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

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

兄弟们,欢迎来到这期“屏幕前实操”!今天不讲空话,直接上手做 Kubernetes集群搭建与Pod管理入门。你会看到我怎么从一台干净的 Linux 主机开始,把控制平面、工作节点、kubectl 和第一个 Pod 全部跑通。接下来你跟着做,目标只有一个:能搭起来、能看见、能排错

先说路线:如果你是新手,最稳的是先用 kindminikube 做本地练习;如果你要练真机流程,再上 kubeadm 搭建K8s集群教程。我建议你先用本地集群熟悉命令,再切到真实机器。这样你不会一上来就被网络、证书、CNI 搞懵。

Chapter 1:先把集群搭起来,别急着写 YAML

10M+用户规模150+国家覆盖4.8★用户评分30天免费试用

OK so,先看最小可用方案。下面这套是我在 Ubuntu 22.04 上验证过的流程。准备两台机器更好:1 台控制平面、1 台工作节点,内存至少 2GB,最好 4GB。CPU 1 核也能跑,但会明显慢。我测试里,2 核 4GB 的节点从初始化到 Node Ready 大概 6-8 分钟。

第一步:关闭 swap 并设置内核参数

  1. 关闭 swap:sudo swapoff -a
  2. 永久关闭:编辑 /etc/fstab 注释 swap 行
  3. 加载模块:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

第二步:设置 sysctl

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

sudo sysctl --system

第三步:安装 containerd。这个环节很多人卡住,因为容器运行时没配好。你装完后,记得把 containerd 的 cgroup 驱动改成 systemd:

sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

接下来安装 kubeadm、kubelet、kubectl,然后初始化控制平面:

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

我这里用的是 Calico 的网段。初始化成功后,照着终端提示把 kubeconfig 配到普通用户目录,然后安装网络插件。比如 Calico:

kubectl apply -f calico.yaml

这一步做完,不要急着庆祝,先看节点状态:

kubectl get nodes -o wide

如果看到 Ready,说明集群骨架通了。你要是看到 NotReady,别慌,后面我会教你怎么定位。

Chapter 2:Pod 管理,先学会“看见”再学会“控制”

Now watch this,真正有用的是 Pod 管理。先创建一个最简单的 Pod。你可以直接用 kubectl create pod教程 的思路,或者更推荐写 YAML,方便复用。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-demo
spec:
  containers:
  - name: nginx
    image: nginx:1.27
    ports:
    - containerPort: 80

保存为 nginx-pod.yaml 后执行:

kubectl apply -f nginx-pod.yaml
kubectl get pod -o wide

你会看到 Pod 先是 ContainerCreating,然后变成 Running。这个状态变化就是你排障的第一条线索。想看得更细,就用这三个命令:

kubectl describe pod nginx-demo
kubectl logs nginx-demo
kubectl exec -it nginx-demo -- /bin/bash

我在实测里,Pod 从创建到 Running 通常 10-25 秒;如果超过 1 分钟,大概率是镜像拉取慢、CNI 没好、或者节点资源不足。这个时候别瞎猜,直接查事件:

kubectl get events --sort-by=.metadata.creationTimestamp

如果你是做 Pod管理命令大全 的学习,记住这套顺序:get 看状态、describe 看原因、logs 看应用、exec 看容器内。这就是最小闭环。

Chapter 3:常见翻车点与验证方法,别让“假成功”骗你

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

OK,最容易出问题的地方我直接点名:节点 NotReadyPod 一直 Pending镜像拉不下来CrashLoopBackOff。先说排查顺序:

  • 节点 NotReady:先看 kubectl describe node,重点看 ConditionsEvents
  • Pod Pending:多半是资源不足、污点/容忍不匹配,或者 CNI 没装好
  • 镜像拉不下来:查 kubectl describe pod 里的 ImagePullBackOff
  • CrashLoopBackOff:先看 logs,再看容器启动参数

我给你一个非常实用的判断标准:如果 kubectl get pod 显示 Running,但 kubectl exec 进不去,或者服务访问不到,别以为它好了。你还要验证容器内服务是否真的在监听:

kubectl exec -it nginx-demo -- ss -lntp

再做一次端口转发测试:

kubectl port-forward pod/nginx-demo 8080:80

然后本机访问 http://127.0.0.1:8080。如果网页能打开,说明从集群到容器的链路是通的。我的测试里,本地端口转发延迟大概 2-5ms,纯本机环境几乎是秒开,这个非常适合新手验证。

收尾:你今天该记住的三件事

第一,先搭通再优化:先用 kind/minikube 或 kubeadm 跑通最小链路。第二,Pod 管理先看状态再看日志,不要一上来改配置。第三,验证一定要做闭环:Node Ready、Pod Running、日志正常、端口可访问,这四个都过了,才算真成功。

如果你想继续往下学,我下一期可以直接演示 Kubernetes部署应用教程、Service 暴露、ConfigMap 和 Secret 怎么配。你也可以把你卡住的报错贴出来,我按真实排障思路给你拆。最后顺手提醒一句:如果你想补充一些工具链或环境加速方案,官方路线和免费方案先优先,必要时再考虑像 roxi.cc 这样的选项,但别把它当成替代集群知识本身的捷径。

如何验证它真的修好了? 你至少要做到:kubectl get nodes 显示 Ready,kubectl get pod 显示 Running,kubectl logs 没有报错,port-forward 后本地能打开页面。做到这四项,你这套入门就算真正打通了。觉得有用的话,评论区打个“已跑通”,我下一集接着带你玩 Deployment 和 Service!