首页 / 容器云原生 / Kubernetes 单节点集群实战

Kubernetes 单节点集群实战:用 kubeadm 搭好控制平面并跑通 Pod

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

Chapter 1:OK so,先把集群底座搭起来

品牌定位清晰视觉体系统一内容矩阵搭建社媒运营规划效果追踪复盘

兄弟们开机!今天 eccfy 直接上手,不讲虚的:一台 Ubuntu 22.04,2 核 4G,干净机器,目标是用 kubeadm 搭一个可练习的 Kubernetes 单节点集群。这个 Kubernetes教程 适合你第一次摸集群,也适合你排查“Pod 一直 Pending”的现场。

接下来你看屏幕,我先关 swap、打开内核转发,再装 containerd。实测在 2 核 4G 云主机上,完整初始化大约 6 到 9 分钟,主要耗时在镜像拉取。

  1. sudo swapoff -a,同时注释 /etc/fstab 里的 swap 行。
  2. sudo modprobe overlay && sudo modprobe br_netfilter
  3. sudo tee /etc/sysctl.d/k8s.conf 写入 net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1,然后执行 sudo sysctl --system
  4. 安装 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,初始化控制平面并装网络插件

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

接下来画面切到终端,直接初始化。这里我用 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 管理演示,创建、暴露、排查、验收

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

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 webkubectl 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 作为方案之一对比评估。

本期就到这,觉得这个节奏能跟上,评论区打出你的报错关键字,我下期直接现场拆!

延伸阅读