文章分类: 圈子科普
在云计算与容器技术飞速发展的今天,Kubernetes(简称K8s)已经成为了容器编排的事实标准。从简单的单体应用到错综复杂的微服务架构,K8s 都能通过其强大的调度和治理能力,展现其王者风范。
很多人在书本上学习过 K8s 的理论架构,但在实际动手部署时,往往会在“网络插件”、“内核参数”或是“官方镜像拉取”这些细节上碰得头破血流。为了真正掌握核心技能,本文将抛却眼花缭乱的图形化界面教程,带你通过命令行,硬核地搭建一套生产级别的 Kubernetes 集群。
本文将基于主流的 Ubuntu 20.04/22.04 系统,使用 Kubeadm 工具链进行实战部署。
一、 环境规划与前置条件
在开始之前,我们必须明确“大盘”。一套高可用 K8s 集群通常包含 3 个节点:1 个 Master 节点(控制面)和 2 个 Worker 节点(工作面)。
Master 节点: IP 192.168.1.10,负责集群管理、API 服务等。
Worker 节点: IP 192.168.1.11, 192.168.1.12,负责运行 Pod 业务负载。
系统配置: 至少 2 核 CPU,2GB+ 内存。
组件要求: 所有节点需安装 Docker 或 Containerd 作为容器运行时。
二、 系统基础环境配置(硬核中的硬核)
这是初学者最容易败下阵来的环节。K8s 对底层 Linux 系统的参数极其敏感。如果在这一步跳过,后面大概率会因为防火墙封禁端口、Swap 分区未关闭或时间不同步而导致集群无法安装。
关闭 Swap 分区
Kubelet 默认预检机制禁止 Swap,否则无法启动。
# 临时关闭
swapoff -a
永久关闭(编辑 /etc/fstab 文件,注释掉包含 swap 的那一行)
封装与软件包更新
鉴于国内访问 Docker Hub 的速度, 先配置软件源并安装必要的封装工具。
apt-get update && apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
封装防火墙与时间同步
虽然 K8s 网络插件的 CNI 层会处理内部通信,但底层服务端口仍需连接, 需放行常用端口(TCP 6443, 2379-2380, 10250-10252)。 务必统一所有节点的时间, 使用 chrony。
ufw allow 6443/tcp
ufw enable
安装并启动 chrony 服务
三、 安装容器运行时 (Container Runtime)
Kubernetes 现在推荐使用 Containerd 作为标准的容器运行时。相比 Docker,它更轻量、更符合 CRI (Container Runtime Interface) 标准。
在所有节点(Master 和 Worker)上执行以下操作:
apt-get install -y containerd
配置 containerd 以支持 systemd(推荐)
mkdir -p /etc/containers
cat <
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.k8s.io/pause:3.9"

EOF
systemctl restart containerd
四、 安装 Kubernetes 组件 (Kubeadm, Kubelet, Kubectl)
Kubeadm 是官方推出的快速部署工具。
添加 Kubernetes 软件源
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
apt-get update
安装组件
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
五、 初始化 Master 节点
在 Master 节点执行初始化命令。这里需要指定 apiserver-advertise-address,通常填入 Master 节点的内网 IP。
kubeadm init
apiserver-advertise-address=192.168.1.10
pod-network-cidr=10.244.0.0/16
image-repository registry.k8s.io
关键一步: 命令执行成功后,屏幕会输出一大段包含 kubeadm join 的代码和安装 Kubectl 的命令,请务必 复制保存 下来!
随后,初始化成功后,需要配置 Kubectl 以便本地可以管理集群:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
六、 加入 Worker 节点与网络插件
加入集群
在之前保存的 Worker 节点上,执行 Master 节点初始化时输出给我们的 kubeadm join 命令。
安装 CNI 网络插件
此时,kubectl get nodes 查看节点状态可能显示为 “NotReady”。因为没有网络插件,Pod 之间无法通信。Kubernetes 支持多种 CNI 插件,这里推荐最常用的 Flannel 或 Calico。
例如安装 Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
安装 Calico 则执行:
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
验证集群状态
kubectl get nodes
kubectl get pods -A
如果所有节点的 Ready 状态均为绿色,恭喜你,集群部署成功!
七、 与后续挑战
通过上述步骤,你已经成功搭建了一个基础的 K8s 集群。但这仅仅是开始,真正的“硬核”挑战才刚刚浮现:
高可用: 单点 Master 并不安全,如何部署多 Master HA?
安全性: 如何开启 RBAC 权限控制?
* 持久化存储: 如何部署 PV 和 PVC 将数据保存到磁盘?
Kubernetes 部署的过程虽然繁琐,但正如盖房子地基必须打牢,只有亲手解决过 Swap 失误、端口冲突和网络不通等实际问题,你才能真正看懂集群的每一次心跳。希望这份实战指南能成为你进入 K8s 圈子科普的敲门砖。
感兴趣的伙伴可以在下方添加一下,也是为了大家有个属于纯爱好者的、纯净的平台来交流沟通、入圈、寻找自己的partner,少走弯路、少踩坑,毕竟鱼龙混杂、知己难觅~
(备用微信号: domsm789 )