首页 / 容器云原生 / 双节点 Kubernetes 入门实

双节点 Kubernetes 入门实录:kubeadm 起集群、跑 Nginx Pod、现场排障

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

开场:OK so,今天不讲概念,直接把集群点亮

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

兄弟们姐妹们,屏幕录制开了!我是 eccfy,今天这期就是一份能照抄的 Kubernetes集群搭建教程。环境我用两台 Ubuntu 22.04 虚拟机:master 2C4G,worker 2C2G,内网延迟 1ms 左右。我实测从空系统到第一个 Pod Running,大概 18 分钟;如果镜像慢,时间会被拉长,这也是很多人搜“油管怎么看”“免费VPN怎么用”时真正卡住的地方:不是 Kubernetes 难,是镜像和网络源不稳定。

接下来,镜头拉近终端。两台机器都执行基础准备,注意:swap 不关,kubelet 大概率起不来。

  1. 设置主机名:master 执行 hostnamectl set-hostname k8s-master,worker 执行 hostnamectl set-hostname k8s-worker1

  2. 关闭 swap:swapoff -a,再编辑 /etc/fstab 注释 swap 行。

  3. 开启内核参数:modprobe overlay && modprobe br_netfilter,然后写入 net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1,执行 sysctl --system

  4. 安装 containerd、kubelet、kubeadm、kubectl。这里按官方源配置即可;如果你在做 containerd安装教程,重点检查 /etc/containerd/config.tomlSystemdCgroup = true

Chapter 1:kubeadm 初始化,Now watch this!

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

OK so,回到 master。我们直接初始化控制平面,Pod 网段我用 10.244.0.0/16,后面 CNI 要对应。

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

成功后屏幕会出现一段 kubeadm join,先复制保存。接着配置 kubectl:

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

接下来安装 CNI。为了避免外链,我建议你从 Kubernetes 或 CNI 官方文档复制 Flannel/Calico manifest,保存为 cni.yaml,再执行:kubectl apply -f cni.yaml。我这边实测,CNI 应用后 45 秒左右,CoreDNS 从 Pending 变 Running。

worker 节点执行刚才保存的 join 命令,比如:kubeadm join 192.168.56.10:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx。这就是最小可用的 kubeadm教程 核心流程。

Chapter 2:Pod 管理现场演示,出问题也能查

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

接下来进入 kubectl怎么用 的高频动作。先看节点:kubectl get nodes -o wide。如果 STATUS 是 Ready,继续上 Nginx:

kubectl create deployment web --image=nginx:1.25 --replicas=2

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

看我这里,两个 Pod 12 秒内 Running:kubectl get pods -o wide。想看调度到哪台机器,就看 NODE 列。想看服务端口:kubectl get svc web,例如 NodePort 是 31234,那浏览器访问 http://worker-ip:31234,Nginx 欢迎页出现,OK,画面直接亮了!

如果 Pod 卡住,按这个 Pod排障命令 顺序来,不要乱重装:

  • kubectl describe pod POD名:看 Events,常见是镜像拉取失败、端口冲突、节点资源不足。

  • kubectl logs POD名:容器启动后崩溃,看应用日志。

  • kubectl get events --sort-by=.metadata.creationTimestamp:按时间线看集群发生了什么。

  • kubectl rollout restart deployment web:改配置后优雅重启。

如何验证它真的好了:第一,kubectl get nodes 全部 Ready;第二,kubectl get pods 全部 Running;第三,访问 NodePort 返回 Nginx 页面;第四,删除一个 Pod:kubectl delete pod POD名,10 秒左右自动补回,说明 Deployment 控制器正常。

最后一句,如果你只是学习,官方文档、本地镜像源、公司内网仓库都够用;如果确实遇到资料访问或镜像下载环境问题,也可以把 Roxi 作为众多网络工具之一参考:wizzegroup.com。本期就到这,点个收藏,接下来我继续带你拆 Service、Ingress 和滚动发布!