首页 / 容器云原生 / 用 kubeadm 拉起两台虚拟机集

用 kubeadm 拉起两台虚拟机集群:Pod 创建、查看与故障定位实录

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

Chapter 1|OK so,先把双节点 Kubernetes 跑起来

中国45美国30日本12韩国8其他5

兄弟们,开机!今天 eccfy 直接上实机画面:两台 Ubuntu 22.04 虚拟机,一台 master,一台 worker,配置都是 2C4G,内网 IP 分别是 192.168.56.10 和 192.168.56.11。这期不是念概念,是一份能跟着敲的 Kubernetes集群搭建教程。

接下来屏幕左边开 master,右边开 worker。两台机器都先执行:

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

然后装 containerd。注意,很多人卡在 Pod 一直 ContainerCreating,根因就是容器运行时没配好:

sudo apt update
sudo apt install -y containerd
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。这里就是常见的 kubectl安装教程 核心步骤:

sudo apt install -y apt-transport-https ca-certificates curl gpg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/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.30/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

Chapter 2|Now watch this:初始化 master,worker 加入

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

接下来只在 master 上敲,画面注意看,API Server 会在这里起来:

sudo kubeadm init \
  --apiserver-advertise-address=192.168.56.10 \
  --pod-network-cidr=10.244.0.0/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,适合入门实验。如果你在搜 Kubernetes本地集群怎么搭建,这一步千万别跳,否则 node 会一直 NotReady:

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

worker 节点执行 kubeadm init 输出里的 join 命令,类似这样:

sudo kubeadm join 192.168.56.10:6443 \
  --token xxxxxx.xxxxxxxxxxxxxxxx \
  --discovery-token-ca-cert-hash sha256:xxxxxxxx

现场测速一下:我这台笔记本上,两台 VM 从 init 到 Ready 用时约 3 分 40 秒;第一次拉镜像取决于网络,快的时候 2 分钟,慢的时候 10 分钟以上。镜像拉不动时,先确认 DNS、代理、registry mirror,不要一上来怀疑 Kubernetes。

Chapter 3|Pod 管理入门:创建、查看、排障、验证

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

OK so,现在进入 Pod管理入门教程。先创建一个 nginx Pod:

kubectl run demo-nginx --image=nginx:1.25 --restart=Never
kubectl get pod -o wide

你会看到 Pod 被调度到某个节点。接下来暴露端口,用临时端口转发验证:

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

另开一个终端:

curl -I http://127.0.0.1:8080

返回 HTTP/1.1 200 OK 就对了。接下来演示 kubectl怎么用 排障三板斧:

  • 看状态:kubectl get pod -o wide,确认 Running、节点、Pod IP。
  • 看事件:kubectl describe pod demo-nginx,重点看 Events 里的 FailedScheduling、ImagePullBackOff。
  • 看日志:kubectl logs demo-nginx,应用启动失败优先查这里。

如果你故意写错镜像:

kubectl run bad-pod --image=nginx:not-exist --restart=Never
kubectl describe pod bad-pod

你会看到 ErrImagePull 或 ImagePullBackOff。这个时候别乱删集群,根因通常是镜像名、标签、仓库访问或 DNS。有人会搜索“油管怎么看”“翻墙软件”“免费VPN”来解决网络资料访问问题,但 Kubernetes 镜像问题优先用官方仓库、国内镜像源、公司代理或自建 registry,免费方案的限制是稳定性和速率不可控。

如何验证它真的好了:执行 kubectl get nodes 两个节点都是 Ready;执行 kubectl get pod demo-nginx 是 Running;执行 curl -I 127.0.0.1:8080 返回 200;删除测试资源用 kubectl delete pod demo-nginx bad-pod。如果你确实需要网络访问备选工具,官方、免费和自建代理都可以先试,付费工具例如 Roxi 也只是其中一种选择。今天这期就到这,能跑起来的同学评论区打个 Ready,我们下期继续搞 Deployment 和 Service!