实验整体思路

从 Docker Compose 单机部署迁移到 Kubernetes 集群部署,核心是理解两套编排体系的差异。

实验步骤回顾

第一阶段:环境准备

步骤做了什么为什么
1准备三台 CentOS 7.9 虚拟机搭建集群需要至少一个 master 和一个 node
2关闭防火墙、SELinux、SwapK8S 的硬性要求,否则初始化会报错
3安装 Docker 20.10.24容器运行时
4安装 kubeadm、kubelet、kubectl 1.20.15K8S 管理工具(最终降级到这个版本)

关键决策:K8S 1.22 已移除 dockershim,无法直接使用 Docker,所以降级到 1.20.15。


第二阶段:镜像准备

步骤做了什么为什么
5编写 Dockerfile(后端、数据库、前端)将应用打包成容器镜像
6在 Windows 拉取基础镜像虚拟机无法访问外网
7上传到 master 并导入 Docker离线环境的标准做法

关键发现:openjdk:11-jre-slim 已废弃,改用 eclipse-temurin:11-jre。


第三阶段:集群搭建

步骤做了什么为什么
8kubeadm init 初始化 master创建控制平面
9安装 Flannel 网络插件跨节点 Pod 通信需要 CNI
10kubeadm join 将 node2 加入集群扩展集群工作节点

卡点:node1 始终无法正常加入,最后改用 master + node2 继续实验。


第四阶段:应用部署

步骤做了什么为什么
11将镜像分发到 node2每个节点都需要有镜像才能运行 Pod
12创建 PV 解决存储问题数据库需要持久化存储
13手动建表MySQL 初始化脚本没自动执行
14修改前端配置 + 换端口解决缓存浏览器缓存无法清除时的绕过方法

第五阶段:验证

步骤做了什么
15浏览器访问 http://192.168.116.168:30081
16设备增删改查功能全部正常

架构变化对比

对比项Docker ComposeKubernetes
部署单位docker-compose.ymlDeployment + Service + PVC
服务发现固定 IP 或容器名Service + DNS
存储宿主机 VolumePV + PVC
暴露服务宿主机端口映射NodePort / Ingress
扩容手动改配置重启kubectl scale
更新停服重启滚动更新

核心问题汇总

问题原因解决方案
kubeadm init 失败K8S 1.22 移除了 dockershim降级到 1.20.15
镜像拉取超时虚拟机无法访问外网Windows 拉取 + 离线导入
openjdk 找不到镜像已废弃改用 eclipse-temurin
镜像拉不到 node2镜像只在 master手动分发到 node2
数据库 Pod Pending没有 PV创建 hostPath PV
device 表不存在SQL 脚本没自动执行手动建表
前端调不到后端浏览器缓存 config.js换 NodePort 端口

更多推荐