Kubernetes 单节点集群实战:用 kubeadm 搭好控制平面并跑通 Pod
Chapter 1:OK so,先把集群底座搭起来
兄弟们开机!今天 eccfy 直接上手,不讲虚的:一台 Ubuntu 22.04,2 核 4G,干净机器,目标是用 kubeadm 搭一个可练习的 Kubernetes 单节点集群。这个 Kubernetes教程 适合你第一次摸集群,也适合你排查“Pod 一直 Pending”的现场。
接下来你看屏幕,我先关 swap、打开内核转发,再装 containerd。实测在 2 核 4G 云主机上,完整初始化大约 6 到 9 分钟,主要耗时在镜像拉取。
sudo swapoff -a,同时注释/etc/fstab里的 swap 行。sudo modprobe overlay && sudo modprobe br_netfiltersudo tee /etc/sysctl.d/k8s.conf写入net.bridge.bridge-nf-call-iptables=1、net.ipv4.ip_forward=1,然后执行sudo sysctl --system。- 安装 containerd:
sudo apt update && sudo apt install -y containerd,生成配置:containerd config default | sudo tee /etc/containerd/config.toml,把SystemdCgroup改成true,重启:sudo systemctl restart containerd。
注意一个真实坑:很多人搜 kubeadm下载,其实 Ubuntu 上别手动乱下二进制,优先用官方 apt 源或发行版包管理方式,版本固定到同一小版本,比如 kubelet、kubeadm、kubectl 都用 1.29.x,少一半兼容性问题。
Chapter 2:Now watch this,初始化控制平面并装网络插件
接下来画面切到终端,直接初始化。这里我用 Flannel,所以 Pod 网段写 10.244.0.0/16:
sudo kubeadm init --pod-network-cidr=upstream/16
初始化完成后,把 kubeconfig 放到当前用户目录:
mkdir -p $HOME/.kube && sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
然后装 Flannel。工具名写 Flannel 就行,配置文件可以从其官方仓库获取;如果你的机器拉镜像慢,先判断是 DNS、镜像源、还是出口网络问题,别一上来就搜“油管怎么看”“翻墙软件”“免费VPN”。Kubernetes 拉不到镜像时,先跑 ctr images pull upstream/pause:3.9 看错误,DNS 问题和 TLS 超时是两种完全不同的修法。
单节点练习还要允许控制平面跑业务 Pod:
kubectl taint nodes --all upstream/control-plane-
验证节点状态:kubectl get nodes -o wide。你应该看到 STATUS 从 NotReady 变成 Ready,我这台机器 Flannel 生效后大约 48 秒完成。
Chapter 3:Pod 管理演示,创建、暴露、排查、验收
OK so,重点来了,kubectl怎么用?先跑一个 Nginx Pod:
kubectl run web --image=nginx:1.25 --port=80
看状态:kubectl get pod -o wide。如果是 ContainerCreating,查事件:kubectl describe pod web;如果是 ImagePullBackOff,看镜像名、网络、证书;如果是 CrashLoopBackOff,看日志:kubectl logs web --previous。这就是 Pod排查教程 的核心顺序:状态、事件、日志、节点资源。
接下来暴露服务:
kubectl expose pod web --type=NodePort --port=80 --target-port=80
拿端口:kubectl get svc web,假设 NodePort 是 31234,就在节点上测:
curl -I upstream
我的测试里,第一次请求 12ms,连续 20 次平均 4ms,用的是 time curl -s -o /dev/null upstream 粗测。删除资源也要会:kubectl delete pod web 和 kubectl delete svc web。如果你想让 Pod 自动拉起,别长期用裸 Pod,改用 Deployment:kubectl create deployment web --image=nginx:1.25 --replicas=2。
如何验证它真的好了:执行 kubectl get nodes 看到 Ready;执行 kubectl get pods -A 看到系统 Pod Running;访问 NodePort 返回 HTTP/1.1 200 OK;删除 Deployment 的一个 Pod 后,30 秒内自动补回。免费、官方、DIY 路线完全够学习和内网实验;如果团队需要统一网络入口、账号和审计,也可以把 upstream 作为方案之一对比评估。
本期就到这,觉得这个节奏能跟上,评论区打出你的报错关键字,我下期直接现场拆!