# 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 → 应用更新 ``` ### 资源配置 ```yaml 资源请求: memory: 512Mi cpu: 250m 资源限制: memory: 1Gi cpu: 1000m ``` ### 健康检查 ```yaml livenessProbe: initialDelaySeconds: 600 # 10分钟 periodSeconds: 10 readinessProbe: initialDelaySeconds: 300 # 5分钟 periodSeconds: 10 ``` ## 📝 当前状态 ### Pod状态 - 新Pod正在启动(安装依赖和创建Rails应用) - 预计总启动时间: 5-10分钟 - 当前阶段: 安装系统依赖和Ruby gems ### 启动流程 1. ✅ 下载ruby:3.3-slim镜像 2. ✅ 安装系统依赖(build-essential, nodejs, npm等) 3. 🔄 安装Rails 8.1 gem 4. ⏳ 创建Rails应用结构 5. ⏳ 安装应用依赖 6. ⏳ 创建数据库 7. ⏳ 启动Rails服务器 ## 🛠️ 管理工具 ### 快速检查脚本 ```bash cd /home/fei/opk3s/app-project/001-rails8 # 查看状态 bash check-status.sh # 查看日志 bash check-logs.sh # 重新部署 bash deploy.sh ``` ### 手动命令 ```bash # 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应用逻辑。 ### 提交并部署 ```bash cd /home/fei/opk3s/app-project/001-rails8 git add . git commit -m "更新描述" git push ``` ### 自动同步 ArgoCD会在1-2分钟内自动检测变更并部署到集群。 ## 🎯 验证步骤 ### 1. 检查Pod状态 ```bash kubectl get pods -n rails-app ``` 期望: Pod状态为Running且Ready (1/1) ### 2. 访问应用 ```bash curl http://r1.jpd.net3w.com ``` 期望: 返回Rails欢迎页面HTML ### 3. 检查证书 ```bash 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 ## 🎉 成功标志 当看到以下内容时,说明部署成功: 1. ✅ Pod状态: Running, Ready (1/1) 2. ✅ 访问应用显示Rails欢迎页面 3. ✅ 页面显示Ruby 3.3.x和Rails 8.1.x版本 4. ✅ 页面显示Pod主机名 5. ✅ HTTPS证书已签发 ## 📞 后续支持 ### 监控命令 ```bash # 持续监控Pod状态 watch kubectl get pods -n rails-app # 实时查看日志 kubectl logs -n rails-app -l app=rails-app -f # 查看资源使用 kubectl top pods -n rails-app ``` ### 故障排查 1. Pod无法启动 → 查看日志和事件 2. 应用无法访问 → 检查Ingress和Service 3. 证书未签发 → 检查cert-manager日志 4. ArgoCD不同步 → 检查Application状态 --- **部署完成时间**: 预计2026-02-04 23:10左右 **文档更新**: 2026-02-04 23:05