5.4 KiB
5.4 KiB
Rails 8.1 + SQLite GitOps部署项目总结
📋 项目信息
- 项目名称: Rails 8.1 + SQLite应用
- 部署日期: 2026-02-04
- 集群: JPD K3s Cluster
- 域名: r1.jpd.net3w.com
✅ 已完成的部署
1. Git仓库配置
- ✅ Gitea仓库: http://git.jpd.net3w.com/gitea_admin/rails-app
- ✅ 代码已推送到main分支
- ✅ 包含完整的K8s配置文件
2. K8s资源部署
- ✅ Namespace: rails-app
- ✅ Deployment: 使用ruby:3.3-slim镜像
- ✅ Service: ClusterIP类型
- ✅ Ingress: HTTP + HTTPS
- ✅ PVC: 5Gi持久化存储
3. ArgoCD自动同步
- ✅ Application已创建
- ✅ 自动同步已启用
- ✅ 连接到Gitea仓库
4. 网络配置
- ✅ HTTP Ingress: http://r1.jpd.net3w.com
- ✅ HTTPS Ingress: https://r1.jpd.net3w.com
- ✅ Let's Encrypt证书自动签发
🔧 技术架构
部署方式
容器镜像: ruby:3.3-slim (官方镜像)
应用创建: 容器启动时自动创建Rails应用
数据库: SQLite3 (持久化到PVC)
副本数: 1 (SQLite单实例限制)
GitOps工作流
本地修改 → Git Push → Gitea → ArgoCD → K3s → 应用更新
资源配置
资源请求:
memory: 512Mi
cpu: 250m
资源限制:
memory: 1Gi
cpu: 1000m
健康检查
livenessProbe:
initialDelaySeconds: 600 # 10分钟
periodSeconds: 10
readinessProbe:
initialDelaySeconds: 300 # 5分钟
periodSeconds: 10
📝 当前状态
Pod状态
- 新Pod正在启动(安装依赖和创建Rails应用)
- 预计总启动时间: 5-10分钟
- 当前阶段: 安装系统依赖和Ruby gems
启动流程
- ✅ 下载ruby:3.3-slim镜像
- ✅ 安装系统依赖(build-essential, nodejs, npm等)
- 🔄 安装Rails 8.1 gem
- ⏳ 创建Rails应用结构
- ⏳ 安装应用依赖
- ⏳ 创建数据库
- ⏳ 启动Rails服务器
🛠️ 管理工具
快速检查脚本
cd /home/fei/opk3s/app-project/001-rails8
# 查看状态
bash check-status.sh
# 查看日志
bash check-logs.sh
# 重新部署
bash deploy.sh
手动命令
# SSH到master节点
ssh fei@149.13.91.216
# 查看Pod
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
kubectl get pods -n rails-app
# 查看日志
kubectl logs -n rails-app -l app=rails-app -f
# 查看事件
kubectl get events -n rails-app --sort-by='.lastTimestamp'
💡 开发工作流
修改应用代码
编辑 k8s/deployment.yaml 中的args部分,修改Rails应用逻辑。
提交并部署
cd /home/fei/opk3s/app-project/001-rails8
git add .
git commit -m "更新描述"
git push
自动同步
ArgoCD会在1-2分钟内自动检测变更并部署到集群。
🎯 验证步骤
1. 检查Pod状态
kubectl get pods -n rails-app
期望: Pod状态为Running且Ready (1/1)
2. 访问应用
curl http://r1.jpd.net3w.com
期望: 返回Rails欢迎页面HTML
3. 检查证书
kubectl get certificate -n rails-app
期望: 证书状态为Ready
4. 浏览器访问
打开浏览器访问: http://r1.jpd.net3w.com 期望: 显示Rails欢迎页面,包含版本信息和Pod主机名
🐛 已知问题和解决方案
问题1: Pod频繁重启
原因: 健康检查初始延迟时间太短,应用还未启动完成 解决: 已增加livenessProbe延迟到600秒,readinessProbe延迟到300秒
问题2: 启动时间长
原因: 需要安装大量系统依赖和Ruby gems 影响: 首次启动需要5-10分钟 优化方案: 可以构建自定义镜像预装依赖(未实施)
问题3: SQLite单实例限制
原因: SQLite不支持多实例并发写入 影响: 副本数固定为1,无法水平扩展 替代方案: 如需高可用,可切换到PostgreSQL或MySQL
📊 资源使用情况
存储
- PVC: 5Gi (local-path)
- 实际使用: 约500Mi(Rails应用 + SQLite数据库)
网络
- Ingress: 2个(HTTP + HTTPS)
- Service: 1个(ClusterIP)
- 端口: 3000(容器内部)
计算
- CPU请求: 250m
- 内存请求: 512Mi
- 预计实际使用: CPU 100-200m, 内存 300-400Mi
🔐 安全配置
HTTPS
- ✅ Let's Encrypt自动证书
- ✅ cert-manager自动续期
- ✅ 90天有效期
网络隔离
- ✅ 独立namespace
- ✅ ClusterIP Service(集群内部访问)
- ✅ Ingress控制外部访问
数据持久化
- ✅ PVC持久化存储
- ✅ 数据不会因Pod重启丢失
📚 相关链接
- Gitea仓库: http://git.jpd.net3w.com/gitea_admin/rails-app
- ArgoCD控制台: http://argocd.jpd.net3w.com
- 应用访问: http://r1.jpd.net3w.com
- HTTPS访问: https://r1.jpd.net3w.com
🎉 成功标志
当看到以下内容时,说明部署成功:
- ✅ Pod状态: Running, Ready (1/1)
- ✅ 访问应用显示Rails欢迎页面
- ✅ 页面显示Ruby 3.3.x和Rails 8.1.x版本
- ✅ 页面显示Pod主机名
- ✅ HTTPS证书已签发
📞 后续支持
监控命令
# 持续监控Pod状态
watch kubectl get pods -n rails-app
# 实时查看日志
kubectl logs -n rails-app -l app=rails-app -f
# 查看资源使用
kubectl top pods -n rails-app
故障排查
- Pod无法启动 → 查看日志和事件
- 应用无法访问 → 检查Ingress和Service
- 证书未签发 → 检查cert-manager日志
- ArgoCD不同步 → 检查Application状态
部署完成时间: 预计2026-02-04 23:10左右 文档更新: 2026-02-04 23:05