🗺️ 系列目录:
- K8s系列一:Ubuntu 22.04 从零搭建集群(Flannel + Containerd) 👈 当前篇章
- K8s系列二:安装 Dashboard – 原生 Web 控制台配置
- K8s系列三:安装 Rancher – 企业级多集群管理平台
- K8s系列四:安装 Kuboard – 国产可视化运维工具
📘 文档目的与功能
本文档旨在提供一份 清晰、可靠、可复现 的实操指南,在 Ubuntu 22.04 LTS 系统上从零开始搭建一个标准的 Kubernetes 集群。
本文将实现:
- ⚙️ 标准化环境配置:涵盖主机规划、系统基础优化、
containerd容器运行时安装,以及systemd驱动配置。 - ☸️ 核心组件部署:演示如何使用
kubeadm部署 Kubernetes v1.28 集群,包括控制节点(Master)的初始化和工作节点(Worker)的加入。 - 🌐 网络插件安装:网络插件(Flannel)的安装步骤,确保节点状态变为
Ready。 - 🖥️ Web 管理控制台:安装 Kubernetes Dashboard,并通过 NodePort 方式安全访问。
本指南适用于 初次接触 Kubernetes 的开发者、运维人员,或需要在本地/测试环境快速搭建集群的场景。
一、集群架构规划
1.1 节点规划表
| 主机名 | IP规划示例 | 配置建议 | 作用 |
|---|---|---|---|
k8s-master |
192.168.20.165 | 4核8GB/50GB | 控制平面组件 |
k8s-node1 |
192.168.20.167 | 4核8GB/50GB | 工作负载节点 |
k8s-node2 |
192.168.20.168 | 4核8GB/50GB | 工作负载节点 |
⚠️ 说明:
- IP地址请根据内网的实际网段调整
- 避免网络受限,虚拟机通过openwrt 使用了代理(要能访问github和k8s.io)
- 如果资源有限,可以先搭2个节点(1 Master + 1 Worker)
1.2 网络规划要点
- Pod网段:
10.244.0.0/16(Flannel默认) - Service网段:
10.96.0.0/12 - 确保节点之间互通,且能访问外网(拉取镜像用)
二、操作系统基础配置(所有节点执行)
选择 Ubuntu 22.04 LTS
2.1 基础系统配置(每台分别设置)
# 更新系统
sudo apt update && sudo apt upgrade -y
# 设置主机名
sudo hostnamectl set-hostname k8s-master # master节点执行
sudo hostnamectl set-hostname k8s-node1 # node1执行
sudo hostnamectl set-hostname k8s-node2 # node2执行
# 配置hosts解析
cat << EOF | sudo tee -a /etc/hosts
192.168.20.165 k8s-master
192.168.20.167 k8s-node1
192.168.20.168 k8s-node2
EOF
# 关闭swap(K8s必须)
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /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.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
2.2 安装容器运行时(Containerd)
# 安装containerd
sudo apt install -y containerd
# 生成默认配置
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# 使用 sed 取消注释并修改
sudo sed -i 's/^#\(.*SystemdCgroup = .*\)$/\1/' /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 重启containerd
sudo systemctl restart containerd
sudo systemctl enable containerd
三、安装 Kubernetes 组件(所有节点执行)
# 添加K8s apt仓库
sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/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.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 安装kubeadm、kubelet、kubectl
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
四、初始化集群(仅在 Master 节点执行)
4.1 准备配置文件
cat << EOF > kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: "192.168.20.165" # 改成你的master IP
bindPort: 6443
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: "v1.28.0"
networking:
podSubnet: "10.244.0.0/16" # Flannel网络
serviceSubnet: "10.96.0.0/12"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: "systemd"
EOF
4.2 执行初始化
sudo kubeadm init --config=kubeadm-config.yaml
# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 验证
kubectl get nodes # 应该看到master节点,状态为NotReady(还没装网络插件)
记下初始化输出的
kubeadm join 命令,后面添加节点要用,如图 10分钟左右,看到successfully 说明安装成功了。
五、安装 CNI 网络插件(Master 节点执行)
选择 Flannel,简单稳定,适合实验环境:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
等待几分钟后:
kubectl get pods -n kube-flannel # 确认运行正常
kubectl get nodes # master状态变为Ready


六、添加 Worker 节点(Node1/Node2 执行)
在 node1 和 node2 上执行刚才记下的 join 命令:
sudo kubeadm join 192.168.20.165:6443 --token ub4grn.7f0g8zj7ejulxhf8 \
--discovery-token-ca-cert-hash sha256:06578ababed12f42384629d425244ce52be37672da96a2d080f1fed94eba83ce
在 master 验证:
kubectl get nodes
# 应该看到 1 master + 2 worker,全部 Ready

七、快速验证集群功能
# 1. 查看所有节点详情
kubectl get nodes -o wide
# 2. 查看所有系统组件
kubectl get pods -A
# 3. 跑一个测试应用(会在 worker 节点上运行)
kubectl create deployment nginx-test --image=nginx
kubectl expose deployment nginx-test --port=80 --type=NodePort
# 4. 查看运行在哪个节点
kubectl get pods -o wide
# 5. 测试访问(用任意节点的 IP + NodePort 端口)
kubectl get svc nginx-test # 记下 NodePort,比如 3xxxx
# 访问 http://192.168.20.167:3xxxx 或 http://192.168.20.168:3xxxx


八、Kuboard vs 其他管理工具对比
后面系列将介绍以下三款管理工具的安装
| 功能特性 | Kubernetes Dashboard | Kuboard v4 | Rancher |
|---|---|---|---|
| 部署方式 | K8s 内部部署 | 独立容器 | K8s 内部部署 |
| 界面语言 | 英文 | 中文 | 英文/中文 |
| 部署复杂度 | 简单 | 最简单 | 较复杂 |
| 资源监控 | 无 | 支持(需集成) | 支持 |
| 多集群管理 | 无 | 支持 | 强大 |
| 容器终端 | 无 | 支持 | 支持 |
| 日志查看 | 无 | 支持 | 支持 |
| 资源占用 | 低 | 中等 | 较高 |
| 适合场景 | 快速查看 | 日常运维 | 企业级管理 |