K8s系列一:入门 Ubuntu 22.04 从零搭建集群(Flannel + Containerd)

🗺️ 系列目录:
  1. K8s系列一:Ubuntu 22.04 从零搭建集群(Flannel + Containerd) 👈 当前篇章
  2. K8s系列二:安装 Dashboard – 原生 Web 控制台配置
  3. K8s系列三:安装 Rancher – 企业级多集群管理平台
  4. 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 内部部署
界面语言 英文 中文 英文/中文
部署复杂度 简单 最简单 较复杂
资源监控 支持(需集成) 支持
多集群管理 支持 强大
容器终端 支持 支持
日志查看 支持 支持
资源占用 中等 较高
适合场景 快速查看 日常运维 企业级管理