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

发布时间:2026/9/16 15:51:45

在 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/9/16 15:46:45

MATLAB中SA-PSO混合优化算法原理与神经网络训练实战

简介:本资源是一套面向MATLAB初学者与优化算法实践者的融合型算法实现代码包,聚焦于智能优化领域中模拟退火(SA)与粒子群(PSO)算法的协同改进思路,适用于高校课程设计、毕业设计及科研原型验证等…

2026/9/16 15:46:45

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

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

2026/9/16 16:42:09

基于Vue+SpringBoot的健身房管理系统设计与实现指南

毕业设计做到健身房管理系统这个题目,在最近几年其实非常常见,但恰好也是“看起来简单、做起来容易翻车”的典型题目。很多同学一上来就急着写代码,结果做完才发现业务逻辑一团乱麻、答辩时讲不清楚、源码里还埋了不少自己都不知道的坑。我见…

2026/9/16 16:42:09

STM32C552高精度ADC电压采集的三大工程瓶颈与量化解法

1. 项目概述:为什么STM32C552的ADC电压采集不是“接上线就出数”那么简单你手头有一块STM32C552——注意,不是常见的F103或G0系列,而是ST近年主推的Cortex-M33内核、带TrustZone安全扩展、集成高精度模拟前端的中高端MCU。它内置的ADC模块标称…

2026/9/16 16:42:09

51单片机+ADC0808精确测量三极管β值的闭环方案

简介:本资源是一套基于51单片机实现三极管放大倍数β(0~500)精确测量的完整嵌入式开发方案,面向电子类专业学生、单片机初学者及硬件爱好者,解决晶体管参数实测与教学验证难题。方案采用恒流源激励与ADC080…

2026/9/16 16:42:09

区块链前沿:TDSC 2025共识机制与智能合约安全研究

1. 区块链论文速读 CCF A--TDSC 2025 (3) 项目概述这篇论文速读聚焦于区块链领域在CCF A类期刊TDSC(IEEE Transactions on Dependable and Secure Computing)2025年第三期的前沿研究成果。作为计算机安全与可信计算领域的顶级刊物,TDSC每年收…

2026/9/16 16:42:09

静态网页作业中的CSS依赖管理:从加载顺序到jQuery插件初始化

简介:一套以《大鱼海棠》为主题的网页期末作业,包含 10 个页面,面向需要提交学校网站课程设计、静态网页或前端基础作业的学生。项目从文件夹规划到代码书写均按 Dreamweaver 常用规范整理,css、js、images 等目录区分清晰&#x…

2026/9/16 16:37:08

P2P借贷平台技术架构与金融系统开发实践

1. 项目概述与技术选型这个P2P借贷平台项目采用了前后端分离的架构设计,前端使用Python的Flask框架,后端采用Java的SSM(SpringSpringMVCMyBatis)技术栈。这种技术组合在实际金融系统开发中非常典型,既保证了前端开发的灵活性,又确…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/16 0:04:09

PHP源码部署实战:从环境配置到运行情侣游戏全攻略

简介:这是一套面向情侣互动场景的PHP完整源码,集成情侣飞行棋、真心话大冒险、情趣骰子等玩法,并内置完整分销制度,可自定义多种返佣比例,源码完全开源无加密,支持微信无感自动授权登录与第三方授权&#x…

2026/9/15 14:22:53

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/15 21:31:11

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/15 11:42:23

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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