在 KubeSail 上部署 Tandoor(Recipes):模板化 Kubernetes 安装实战指南

发布时间:2026/11/12 5:23:02

在 KubeSail 上部署 Tandoor(Recipes):模板化 Kubernetes 安装实战指南 在 KubeSail 上部署 TandoorRecipes模板化 Kubernetes 安装实战指南【免费下载链接】recipesApplication for managing recipes, planning meals, building shopping lists and much much more!项目地址: https://gitcode.com/GitHub_Trending/re/recipes本指南讲解如何通过 KubeSail 平台一键部署 TandoorRecipes菜谱管理应用KubeSail 提供了可视化界面来安装和管理应用只需加载官方社区维护的 Tandoor 模板并点击 Launch Template即可在任意接入的 Kubernetes 服务器上完成部署。读完本文你将掌握 KubeSail 模板的完整使用流程、模板变量随机密钥的正确配置方式以及该模板背后对应仓库内 Kubernetes 清单docs/install/k8s的架构原理与关键组件便于在需要时排查和定制部署。KubeSail 与 Tandoor 模板简介KubeSail 是一个提供简单 Web 界面用于安装和管理应用的平台支持两种使用方式连接任意运行 Kubernetes 的服务器把你自有的服务器裸金属或云主机接入 KubeSail 集群即可通过其界面管理应用使用预配置的 PiBox购买/使用 PiBox 设备可跳过服务器接入步骤开箱即用。Tandoor 的 KubeSail 模板在仓库的 docs/install/kubesail.md 中有专门文档说明该模板紧密基于官方 Kubernetes 安装配置编写——即 docs/install/k8s 目录下的一组 YAML 清单ConfigMap、Secret、PVC、StatefulSet、Deployment、Service、Ingress。这意味着通过 KubeSail 部署的集群结构与手动kubectl apply部署基本一致只是把手动应用清单封装成了点按钮。⚠️ 需要明确该模板由社区贡献Community Contributed既不受官方支持也不保证会随版本更新或测试。生产使用前请自行评估风险。Tandoor 2 兼容性注意事项在动手部署前务必了解 Tandoor 2 带来的架构变化⚠️Tandoor 2 兼容性警告本模板尚未针对 Tandoor 2 进行验证/测试。Tandoor 2 已在默认 Docker 容器内集成了 nginx 服务并将对外暴露端口从 8080 改为80。这一变化在仓库的 docs/install/docker.md 中有更详细的说明Tandoor 1 vs Tandoor 2 一节Tandoor 1容器内运行 gunicornPython WSGI 服务器默认暴露 8080 端口官方一直建议在其前方再架设 nginx 处理媒体文件mediafilesTandoor 2容器内捆绑了 nginx对外暴露80 端口——媒体文件由 nginx 直接处理其余请求基本转发给 gunicorn。因此在 KubeSail 模板中可以看到 60-service.yaml 同时暴露了 80nginx与 8080gunicorn两个端口Ingress 也分别把/media、/static路由到 80 端口服务其余路径路由到 8080。如果你的 KubeSail 模板默认使用的镜像是 Tandoor 2需要重点确认模板的端口与路径转发是否仍匹配上述新行为。快速开始Quick StartKubeSail 的部署流程非常简短官方文档给出的步骤如下加载模板在 KubeSail 中打开 Tandoor Recipes 模板页面点击Launch Template启动模板确保服务器已接入如果尚未把服务器附加到 KubeSail请先按照 KubeSail 官方文档中Getting a Cluster获取集群章节完成裸金属服务器接入确认模板变量在 Template Variables模板变量区域检查两个输入字段它们默认显示RANDOM(16)详见下文启动确认无误后点击启动等待部署完成即可访问应用。部署完成后首次访问需要进行初始化/注册等常规设置流程仓库模板 templates/setup.html 对应部署引导页面。关键提示模板变量与随机密钥KubeSail 模板的 Template Variables 区域中会看到两个输入字段默认值显示为RANDOM(16)。含义如下这两个字段会在你启动模板时被随机生成并且与你的这次安装一一对应specific to your install如果你希望自己指定可以在启动模板前手动输入自定义值不建议把两个字段都留空或填成固定弱值因为它们对应的是部署所需的敏感凭据。从模板所基于的 Kubernetes 清单 15-secrets.yaml 可以印证这两个字段对应的正是两类密钥模板变量字段推测对应K8s Secret 键用途随机字段 1postgresql-passwordPostgreSQL 应用数据库用户密码POSTGRES_PASSWORD随机字段 2secret-keyDjango 的SECRET_KEY用于会话签名、加密等安全用途15-secrets.yaml 文件头部注释给出了这两类密钥的本地生成方法可作参考# 数据库密码base64 编码 echo -n db-password | base64 # Django SECRET_KEY先对随机串做 sha256 摘要再 base64 编码 echo -n secret-key | sha256sum | awk { printf $1 } | base64模板变量采用RANDOM(16)的语义即每个变量会生成 16 个字符的随机串并写入对应 Secret保证每个实例的凭据彼此隔离、默认不撞车。模板背后的 Kubernetes 架构KubeSail 模板基于 docs/install/k8s 下的 8 个清单文件理解它们就能掌握模板在集群里实际创建了什么。下面按组件逐一拆解。1. 应用前端 Deployment50-deployment.yaml这是 Tandoor 的核心工作负载包含两个容器 一个 init 容器init 容器init-chmod-data以 root 运行先执行数据库迁移与静态文件收集再修正媒体文件权限set -e source venv/bin/activate echo Updating database python manage.py migrate python manage.py collectstatic --noinput echo Setting media file attributes chown -R 65534:65534 /opt/recipes/mediafiles find /opt/recipes/mediafiles -type d | xargs -r chmod 755 find /opt/recipes/mediafiles -type f | xargs -r chmod 644它通过 Secret 引用注入SECRET_KEY与POSTGRES_PASSWORD并固定使用DB_ENGINEdjango.db.backends.postgresql、POSTGRES_HOSTrecipes-postgresql、POSTGRES_PORT5432、POSTGRES_USERpostgres、POSTGRES_DBrecipes。容器recipes-nginx使用nginx:latest镜像暴露 80http与 8080gunicorn两个端口挂载媒体/静态 PVC并将 10-configmap.yaml 中的 nginx 配置以只读方式挂载到/etc/nginx/nginx.conf。注意该模板仍保留了独立的 nginx 容器nginx 同时负责/static/与/media/的 alias 转发client_max_body_size 16M。容器recipes使用vabene1111/recipes镜像直接以 gunicorn 启动 Django 应用recipes.wsgi监听:8080日志级别 INFO并配置了 liveness/readiness 探针HTTP GET/8080 端口每 30 秒检查一次。运行用户为 65534nobody。存储挂载mediafiles与staticfiles均以subPathfiles方式挂载 PVC避免 ext4 文件系统 PVC 中lostfound目录带来的问题清单中有明确注释。策略strategy: Recreate重建式更新replicas: 1。2. 数据库 StatefulSet40-sts-postgresql.yaml数据库使用 Bitnami 的 PostgreSQL 镜像docker.io/bitnami/postgresql:11.5.0-debian-9-r60以 StatefulSet 方式运行通过 Secret 引用注入POSTGRES_PASSWORD键postgresql-password和POSTGRESQL_POSTGRES_PASSWORD键postgresql-postgres-password固定POSTGRES_USERrecipes、POSTGRES_DBrecipes数据目录/bitnami/postgresqlPGDATA指向/bitnami/postgresql/data配置了 liveness 与 readiness 探针pg_isready并检查/opt/bitnami/postgresql/tmp/.initialized初始化标记通过volumeClaimTemplates自动创建 2Gi 数据卷init 容器负责修正数据目录权限chown 1001运行用户为 1001fsGroup: 1001服务账户recipes对应 20-service-account.yaml。数据库对外的访问入口由 45-service-db.yaml 提供ClusterIP 类型 Service名称recipes-postgresql端口 5432selector 为app: recipes, tier: database——这正是前端 Deployment 中POSTGRES_HOSTrecipes-postgresql指向的地址。3. 配置与密钥ConfigMap / Secret10-configmap.yaml名为recipes-nginx-config的 ConfigMap内嵌一段最小 nginx 配置声明client_max_body_size 16M并将/static/、/media/分别 alias 到/static/、/media/15-secrets.yaml名为recipes的 Opaque Secret包含三个键见上文表格模板变量RANDOM(16)启动时即填充到这里。4. 持久化存储30-pvc.yaml两个 PVCrecipes-media与recipes-static均为ReadWriteOnce、各申请1Gi存储标签app: recipes。前端 Deployment 与 nginx 容器共享这两个卷媒体与静态文件也是 Velero 备份注解backup.velero.io/backup-volumes标记的备份对象。5. 服务与入口Service / Ingress60-service.yaml前端 Service选择app: recipes, tier: frontend, environment: production同时暴露80httpnginx与8080gunicorn两个端口70-ingress.yamlIngress 规则默认主机recipes.local路径路由如下路径pathType后端 Service 端口/Prefix8080gunicorn/mediaPrefix80nginx/staticPrefix80nginx文件注释中预留了 TLS 配置示例cert-manager.io/cluster-issuer: letsencrypt-prod与ingress-class: nginx注释以及被注释掉的tls段部署到 KubeSail 后如需启用 HTTPS可按此结构补全证书签发配置。在 KubeSail 上通常由平台侧的 Ingress Controller 与域名管理接管这一层recipes.local这类占位主机名需替换为你实际使用的域名。从 KubeSail 到原生 Kubernetes适用场景小结部署方式适合场景说明KubeSail 模板追求开箱即用、不想手写 YAML社区维护模板逻辑即本文拆解的 k8s 清单原生 k8s 清单docs/install/k8s需要精细控制、自定义 Ingress/TLS8 个文件依次 apply 即可Docker Composedocs/install/docker.md单机/家用场景官方推荐且持续测试的安装方式最后提醒KubeSail 模板是社区贡献且未针对 Tandoor 2 验证。若模板默认镜像已更新到 Tandoor 2容器内建 nginx、对外端口 80请重点核对模板的端口映射与 Ingress 路由是否符合 Tandoor 2 的架构对比 docs/install/k8s/70-ingress.yaml 与 docs/install/docker.md 中 Tandoor 1/2 差异说明。同时模板启动时务必留意两个RANDOM(16)变量是否已正确生成这直接关系到数据库密码与 DjangoSECRET_KEY的强度与唯一性。【免费下载链接】recipesApplication for managing recipes, planning meals, building shopping lists and much much more!项目地址: https://gitcode.com/GitHub_Trending/re/recipes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/2 23:40:39

ESP8266 NON-OS SDK 开发实战:从环境搭建到生产级固件

简介:本资源是一套面向嵌入式初学者与IoT开发者的ESP8266 NON-OS SDK实战例程合集,聚焦无操作系统环境下的底层硬件控制与轻量级网络通信能力训练。内容覆盖Wi-Fi STA/AP模式配置、TCP Socket编程、GPIO外设驱动、JSON数据解析(含C语言实现的…

2026/11/11 19:40:39

LS-DYNA多孔延时起爆模拟技术与工程实践

1. 多孔延时起爆模拟的技术要点解析在爆炸力学仿真领域,多孔延时起爆模拟堪称"皇冠上的明珠"。这种技术通过精确控制多个起爆点的时间序列,能够模拟真实爆破作业中冲击波的叠加效应和能量释放规律。作为从业十余年的仿真工程师,我必…

2026/11/12 5:19:21

无电工证进行接线危害:外省证能转过来吗?网上查询全攻略

无电工证进行接线危害:外省证能转过来吗?网上查询全攻略 之前考的证在外省能不能转过来?这个问题我天天被问,今天我就跟你唠清楚。 无电工证进行接线危害 可不是小事,很多人因为没证就干电工活,结果出事了,轻则被罚款,重则吃官司。 网上查询…

2026/11/12 5:19:21

宾阳县低压电工证考试怎么报名不被坑 全国通用证书怎么选

宾阳县低压电工证考试怎么报名不被坑 全国通用证书怎么选 你是不是也遇到过这种情况:手里有一份低压电工工作,却因为没有低压电工证而被单位辞退?或者你正打算进入电工行业,却不知道去哪里报名?别急,今天就带你搞清楚 宾阳县低压电工证考试…

2026/11/12 5:19:21

临西县低压电工证千万别踩坑,这些避坑指南你必须知道

临西县低压电工证千万别踩坑,这些避坑指南你必须知道 你是不是也这样?明明手里有电工证,但总感觉找工作难、升职慢, 不知道去哪报名怕被中介坑 ,结果一不小心就被坑了?尤其是 临西县低压电工证 ,现在办理门槛高、流程复杂,稍有不慎就白忙一场,…

2026/11/12 5:19:21

工地太忙根本没时间复习考试?低压电工证在线查询通过率揭秘

工地太忙根本没时间复习考试?低压电工证在线查询通过率揭秘 工地太忙根本没时间复习考试,低压电工证在线查询怎么搞?别急,今天给你讲讲真实情况,还带你搞懂低压电工证的通过率到底是高还是低。 低压电工证在线查询是什么?怎么查?…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/12 0:04:01

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘 工地太忙根本没时间复习考试?你不是一个人。作为一名在南阳卧龙区干了七八年市政公用工程的电工,我深知这个问题的现实性。电工证不仅是工作的“入场券”,更是职业发展的“通行证”,但备考过程…

2026/11/12 0:04:01

双流电工证考别怕挂科!郑州报考避坑指南全攻略

双流电工证考别怕挂科!郑州报考避坑指南全攻略 实操考试心里没底怕挂科?双流电工证考在郑州报名,很多人因为不了解流程、准备不充分,白白浪费时间和金钱。作为三门峡应届工程类毕业生,我也曾经历过这样的焦虑。今天就从零开始,手把手教你如何避开郑州报…

2026/11/12 0:04:01

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少 之前考的证在外省能不能转过来?这个问题确实让不少准备换城市工作的朋友犯了难,尤其像电工证这种实操性很强的证书,很多人担心跨省后证书能不能继续用。其实,只要符合相关流程,是可以顺利转…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑