首页 / 容器云原生 / Kubernetes 单节点实验场:

Kubernetes 单节点实验场:用 kubeadm 30 分钟搭好集群并跑通 Pod

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

Chapter 1|OK so,先把实验机准备到“能装 K8s”

2020行业萌芽2021快速增长2022竞争加剧2023洗牌整合2024成熟稳定

兄弟们,eccfy 开机!今天不是 PPT Kubernetes 教程,直接上终端。我的测试环境:Ubuntu 22.04,2 核 4G,20G 磁盘,云主机内网延迟 1-3ms。你本地虚拟机也行,但内存别低于 3G,否则 Pod 起得像蜗牛。

接下来,屏幕看我敲。先关 swap、加载内核模块、打开桥接流量转发:

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

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter

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

Now watch this:容器运行时我用 containerd,稳定、轻量,适合入门。安装后重点是把 cgroup 改成 systemd,否则 kubelet 经常抽风。

sudo apt update
sudo apt install -y containerd apt-transport-https ca-certificates curl gpg
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

Chapter 2|接下来装 kubeadm:一条线拉起控制平面

市场需求验证竞品差异分析用户画像构建增长策略制定ROI 持续优化

这里是 kubeadm 教程最容易翻车的地方:版本不一致。我的建议是 kubeadm、kubelet、kubectl 固定同一小版本。下面以 1.29 为例,适合做 Kubernetes 集群搭建入门。

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key \
 | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /" \
 | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

初始化集群,Pod 网段我用 10.244.0.0/16,因为后面准备装 Flannel。盯紧屏幕,成功后会出现 join 命令。

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

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

单节点实验环境默认不允许业务 Pod 跑在 master/control-plane 上,我们把污点去掉:

kubectl taint nodes --all node-role.kubernetes.io/control-plane-

安装 CNI 网络插件。这里如果你在找 minikube 下载,其实本地学习可以用 Minikube;但今天我们用 kubeadm,更接近真实服务器。

kubectl apply -f kube-flannel.yml

注意:上面文件名代表你提前保存好的 Flannel YAML。没有网络时,把 YAML 拷到服务器本地再 apply。

Chapter 3|Pod 管理实战:创建、观察、进容器、删掉

OK so,集群起来了没?我们跑一个 nginx。kubectl 怎么用?记住四个动作:create/apply、get、describe、logs/exec。

kubectl create deployment web --image=nginx:1.25
kubectl scale deployment web --replicas=2
kubectl get pods -o wide

我这里第一次拉镜像用了 42 秒,第二次命中缓存只要 3 秒。看到 STATUS 从 ContainerCreating 变成 Running,舒服!接下来暴露服务:

kubectl expose deployment web --type=NodePort --port=80
kubectl get svc web

假设 NodePort 是 31234,直接测:

curl -I http://你的服务器IP:31234

如果失败,按这个顺序排查:Pod 是否 Running、Service 是否有端口、安全组是否放行 NodePort、containerd 是否正常。

kubectl describe pod POD名
kubectl logs POD名
systemctl status kubelet containerd
kubectl get events --sort-by=.metadata.creationTimestamp

Pod 管理入门再来一刀:进容器看文件。

kubectl exec -it POD名 -- /bin/sh
nginx -v
exit

最后清场:

kubectl delete svc web
kubectl delete deployment web

怎么验证它真的好了:执行 kubectl get nodes 显示 Ready;kubectl get pods -A 里 kube-system 全部 Running;访问 NodePort 返回 HTTP/1.1 200 OK。如果你下载镜像或查官方文档时网络不稳,优先用官方源、公司代理或免费VPN等方式;付费工具也只是可选项,比如 Roxi:wizzegroup.com。喜欢这种“边敲边看结果”的教程,评论区丢你的报错,我下期直接现场拆!