资讯动态

在 Kubernetes 上部署 Factorio 专用服务器:stable/factorio Helm Chart 部署与配置指南

发布时间:2026/10/8 18:29:40 来源:尧图企业网站定制
【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载stable/factorio 是 Helm Charts 仓库中用于在 Kubernetes 集群内以单 Pod 形式运行 Factorio Headless 专用服务器的官方 Chart。它通过一个 Deployment 承载游戏服务进程并为 Factorio 游戏端口UDP与 RCON 管理端口TCP分别暴露 Service同时把存档与 Mod 的持久化以可插拔方式接入 PVC 或 emptyDir。阅读本文后你将掌握该 Chart 的安装、卸载、全部 values 参数含义、环境变量映射关系以及 AWS 等平台在 UDP 支持方面的注意事项能够独立完成一个可长期运行的 Factorio 服务器部署与调优。Chart 概览与状态说明该 Chart 的元数据定义在 stable/factorio/Chart.yamlname为factorioversion为1.0.2appVersion为0.15.39对应默认镜像标签apiVersion: v1表明它采用 Helm 2 时代的经典 Chart 结构。Chart 声明了game、server两个关键词sources指向 games-on-k8s 组织维护的 docker-factorio 镜像项目即 Chart 实际使用的容器镜像来源。需要注意的是该 Chart 带有两重状态声明仓库归档通知整个仓库自 2020 年 11 月 13 日起不再更新其用途是归档旧版 Chart 供查阅。Chart 自身废弃通知deprecated: true字段明确标注此 Chart 已废弃、不再获得支持。因此本文内容基于当前仓库快照的事实陈述适用于理解该 Chart 的历史实现与结构若在生产环境使用应优先评估其镜像版本与 Kubernetes API 的兼容性。从 templates/deployment.yaml 可以看到它已使用apps/v1Deployment API这是该 Chart 后期版本更新的结果与 README 中Kubernetes 1.4 with Beta APIs的最低要求并不完全一致——实际部署时请以你集群支持的 API 版本为准。前置条件README 明确列出两项集群级前置条件Kubernetes 1.4 且启用 Beta APIs这是 Chart 编写年代的最低要求实际所需 API 版本以模板为准。底层基础设施支持 PV provisioner因为默认配置会创建 PersistentVolumeClaim 用于保存存档详见 saves-pvc.yaml需要集群具备动态存储供应能力。平台差异AWS ELB 不支持 UDP这是该 Chart 最需要注意的部署细节。Factorio 游戏通信基于UDP默认端口 34197而Amazon Elastic Load Balancer 不支持 UDP 协议。因此在 AWS 上部署时必须将factorioServer.serviceType设置为NodePort然后通过安全组Security Group放行被选中的 NodePort 端口端口号可通过kubectl describe svc servicename查询。某些裸金属bare metal环境也可能需要类似处理。Google Cloud Platform 的负载均衡则原生支持 UDP无需特殊处理。该提醒在模板层也有呼应templates/NOTES.txt 在服务类型为LoadBalancer时会打印提示如果你在 AWS 集群上安装你的游戏将无法被访问AWS ELB 不支持 UDP你需要为 factorioServer.serviceType 使用 NodePort 值。安装 Chart使用以下命令以 release 名称my-release安装$ helm install --name my-release stable/factorio该命令会以默认配置部署一个 Factorio 专用服务器。安装后可执行helm list查看所有 release。卸载 Chart$ helm delete my-release该命令会删除与 Chart 关联的所有 Kubernetes 组件Deployment、Service、Secret 等并释放该 release。注意helm delete默认不会删除 PVC如需清理持久卷需单独操作。配置参数详解README 说明所有默认值均记录在 stable/factorio/values.yaml参数分为两类Kubernetes 部署相关指令以及映射到 docker-factorio 镜像环境变量的 Factorio 服务相关指令。下面按层级逐一说明。镜像与副本参数默认值说明imagequay.io/games_on_k8s/factorio镜像仓库地址imageTag0.15.39镜像版本与 Chart 的appVersion一致replicaCount1副本数Factorio 存档型游戏服务保持 1 即可镜像拉取策略固定为Always见 deployment.yaml。资源配额resources: requests: memory: 512Mi cpu: 500m模板通过toYaml将resources原样注入容器可继续补充limits例如resources: requests: memory: 512Mi cpu: 500m limits: memory: 1Gi cpu: 1factorioServer服务端核心配置factorioServer: name: Kubernetes Server description: Factorio running on Kubernetes port: 34197 # password: change.me maxPlayers: 255 isPublic: false verifyIdentity: false allowCommands: admins-only noAutoPause: false serviceType: LoadBalancer参数默认值说明factorioServer.nameKubernetes Server服务器名称映射为FACTORIO_SERVER_NAMEfactorioServer.descriptionFactorio running on Kubernetes服务器描述映射为FACTORIO_DESCRIPTIONfactorioServer.port34197游戏 UDP 端口映射为FACTORIO_PORTfactorioServer.password空注释掉服务器密码设置后以 Secret 注入FACTORIO_GAME_PASSWORDfactorioServer.maxPlayers255最大玩家数映射为FACTORIO_MAX_PLAYERSfactorioServer.isPublicfalse是否在服务器浏览器中公开设为true后必须配置factorio.user凭据否则无法通过验证factorioServer.verifyIdentityfalse是否要求玩家验证身份映射为FACTORIO_REQUIRE_USER_VERIFICATIONfactorioServer.allowCommandsadmins-only控制台命令权限仅允许true、false、admins-only三个取值映射为FACTORIO_ALLOW_COMMANDSfactorioServer.noAutoPausefalse无玩家连接时是否不自动暂停映射为FACTORIO_NO_AUTO_PAUSEfactorioServer.serviceTypeLoadBalancer游戏服务类型AWS 上必须改为NodePort自动存档factorioServer: autosave: interval: 2 slots: 3autosave.interval自动存档间隔分钟映射为FACTORIO_AUTOSAVE_INTERVAL。autosave.slots自动存档槽位数量映射为FACTORIO_AUTOSAVE_SLOTS。RCON 远程管理factorioServer: rcon: enabled: false port: 27015 password: serviceType: LoadBalancerrcon.enabled是否启用 RCONTCP管理端口仅在启用时才会渲染 RCON Service 与相关环境变量。rcon.portRCON 端口默认 27015。rcon.passwordRCON 密码留空则自动生成密码由镜像侧生成并映射为FACTORIO_RCON_PASSWORD。rcon.serviceTypeRCON Service 类型默认LoadBalancer。RCON Service 由 rcon-svc.yaml 渲染且整体被{{- if default .Values.factorioServer.rcon.enabled }}包裹即只有开启 RCON 时才创建端口协议为 TCP。factorio.user公开服务器凭据factorio: user: username: your.username password: your.password当factorioServer.isPublic为true时服务器需要 factorio.com 账号凭据来完成公开注册。这两个值会被写入 Secret 并以FACTORIO_USER_USERNAME、FACTORIO_USER_PASSWORD环境变量注入容器见 deployment.yaml。指定参数的方式方式一--set逐项指定$ helm install --name my-release \ --set factorioServer.factorioServerMy Server,ImageTag0.15.39 \ stable/factorio注意上述示例来自 README其中factorioServer.factorioServer与ImageTag是 README 原文写法。结合 values.yaml 实际结构正确的键应为factorioServer.name服务器名与imageTag镜像标签。按模板实际结构等效命令为$ helm install --name my-release \ --set factorioServer.nameMy Server,imageTag0.15.39 \ stable/factorio方式二使用 YAML 文件$ helm install --name my-release -f values.yaml stable/factorio也可以直接以默认 values.yaml 为基底复制后修改。环境变量映射与 Secret 机制deployment.yaml 是理解参数如何生效的关键。Chart 把几乎全部 Factorio 配置转换成环境变量注入容器完整映射关系如下values 键环境变量注入方式factorioServer.nameFACTORIO_SERVER_NAME直接引用factorioServer.descriptionFACTORIO_DESCRIPTION直接引用factorioServer.portFACTORIO_PORT直接引用factorioServer.maxPlayersFACTORIO_MAX_PLAYERS直接引用factorioServer.isPublicFACTORIO_IS_PUBLIC直接引用factorioServer.verifyIdentityFACTORIO_REQUIRE_USER_VERIFICATION直接引用factorioServer.allowCommandsFACTORIO_ALLOW_COMMANDS直接引用factorioServer.noAutoPauseFACTORIO_NO_AUTO_PAUSE直接引用factorioServer.autosave.intervalFACTORIO_AUTOSAVE_INTERVAL直接引用factorioServer.autosave.slotsFACTORIO_AUTOSAVE_SLOTS直接引用factorioServer.passwordFACTORIO_GAME_PASSWORDSecret 引用factorio.user.username/factorio.user.passwordFACTORIO_USER_USERNAME/FACTORIO_USER_PASSWORDSecret 引用isPublictrue时factorioServer.rcon.passwordFACTORIO_RCON_PASSWORDSecret 引用rcon.enabledtrue时涉及敏感信息的环境变量统一从 Secret 读取。Secret 由 secrets.yaml 生成包含四个键server-password、rcon-password、factorio-username、factorio-password模板中通过default ... | b64enc保证即使值为空也能生成合法 Secret 对象。容器端口方面游戏端口固定为 34197UDPRCON 端口使用factorioServer.rcon.portTCP。Service 结构与端口拓扑Chart 渲染两个或一个Servicefactorio-svc.yaml始终创建类型为factorioServer.serviceType暴露 UDP 端口factorioServer.port转发至容器的factorio命名端口34197。rcon-svc.yaml仅在rcon.enabled为真时创建类型为factorioServer.rcon.serviceType暴露 TCP 端口rcon.port27015转发至容器的rcon命名端口。Pod 由 deployment.yaml 管理命名遵循_helpers.tpl中的factorio.fullname规则release-chart名拼接并截断至 63 字符以满足 Kubernetes DNS 命名规范。连接地址获取Chart 安装完成后NOTES.txt 会根据 Service 类型输出对应的连接指引NodePort 类型export NODE_PORT$(kubectl get --namespace namespace \ -o jsonpath{.spec.ports[0].nodePort} services release-factorio) export NODE_IP$(kubectl get nodes --namespace namespace \ -o jsonpath{.items[0].status.addresses[0].address}) echo $NODE_IP:$NODE_PORTLoadBalancer 类型LoadBalancer IP 可能需要几分钟才分配完成可通过kubectl get svc --namespace namespace -w release-factorio观察 EXTERNAL-IP 字段填充。ClusterIP 类型通过kubectl port-forward将本地 34197 端口转发到 Podkubectl port-forward pod-name 34197:34197持久化与游戏数据管理docker-factorio 镜像将存档和 Mod 数据存放在容器内的/opt/factorio目录。Chart 将其拆分为两个挂载点存档挂载至/opt/factorio/savesMod 挂载至/opt/factorio/mods默认持久化策略persistence: # storageClass: - savedGames: enabled: true size: 1Gi mods: enabled: false size: 128MisavedGames.enabled默认 true创建名为release-factorio-savedgames的 PVC持久化存档保证 Pod 重启或重建后游戏进度不丢失。mods.enabled默认 false默认不持久化 ModMod 目录使用 emptyDir。PVC 与 emptyDir 的切换逻辑deployment.yaml 对每个数据卷做条件判断对应persistence.*.enabled为真时挂载 PVC否则回退到emptyDir: {}。两个 PVC 模板分别位于 saves-pvc.yaml 与 mods-pvc.yaml均使用ReadWriteOnce访问模式。persistence.storageClass有三种取值行为未定义或为 null默认PVC 不指定storageClassName由集群默认 provisioner 决定AWS 上通常是 gp2GKE/AWS/OpenStack 上通常是 standard。-显式设置storageClassName: 禁用动态供应。其他字符串使用指定的 StorageClass。emptyDir 的数据生命周期警告README 特别引用了一段 Kubernetes 官方说明An emptyDir volume is first created when a Pod is assigned to a Node, and exists as long as that Pod is running on that node. When a Pod is removed from a node for any reason, the data in the emptyDir is deleted forever.即 emptyDir 的生命周期与 Pod 绑定Pod 一旦被调度离开节点或被删除数据即永久丢失。因此若关闭persistence.savedGames.enabled必须接受存档会随 Pod 终止而丢失。相应地NOTES.txt 在持久化关闭时会打印醒目的警告横幅警告持久化已被禁用当 Factorio Pod 终止时你将丢失游戏状态Chart 文件结构与二次开发参考该 Chart 的文件组织如下适合作为自定义 Factorio Chart 的参考模板stable/factorio/Chart.yamlChart 元数据名称、版本、废弃标记。stable/factorio/values.yaml全部可配置参数与默认值。stable/factorio/templates/deployment.yamlDeployment 与容器环境变量注入。stable/factorio/templates/factorio-svc.yaml游戏 UDP Service。stable/factorio/templates/rcon-svc.yamlRCON TCP Service。stable/factorio/templates/saves-pvc.yaml / stable/factorio/templates/mods-pvc.yaml持久化声明。stable/factorio/templates/secrets.yaml密码与账号凭据的 Secret。stable/factorio/templates/_helpers.tpl名称生成模板函数。stable/factorio/templates/NOTES.txt安装后连接指引与警告输出。常见问题排查AWS 上玩家无法连接几乎可以确定是 Service 类型为LoadBalancer而 AWS ELB 不支持 UDP 导致。将factorioServer.serviceType改为NodePort并在安全组中放行对应 NodePort 的 UDP 流量。服务器无法公开注册isPublic设为true后必须配置factorio.user.username与factorio.user.password且需在 factorio.com 注册有效账号否则服务端无法完成身份验证。Pod 重建后存档丢失检查persistence.savedGames.enabled是否为true以及 PVC 是否成功 Boundkubectl get pvc。RCON 不可用确认factorioServer.rcon.enabled: true且 RCON Servicerelease-factorio-rcon已创建并确保客户端使用正确的 TCP 端口与自动生成或手动指定的密码。命令权限不生效allowCommands仅接受true、false、admins-only三个值传错字符串会导致服务端行为异常。结语stable/factorio Chart 以一个简洁的 Deployment 双 Service 双 PVC 结构完整覆盖了 Factorio 专用服务器在 Kubernetes 上的核心诉求UDP 游戏端口暴露、RCON 管理通道、存档持久化、公开服务器凭据管理以及平台差异AWS ELB 无 UDP的处理预案。其 values 到环境变量的全量映射、Secret 注入机制与 PVC/emptyDir 双模持久化设计即使 Chart 本身已随仓库归档依然是编写有状态游戏服务器 Chart 的可靠参考实现。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐在 Kubernetes 上用 Helm 部署 Centrifugo 实时消息服务器stable/centrifugo Chart 安装与配置实战指南在 Kubernetes 上用 Helm 部署 Centrifugo 实时消息服务器stable/centrifugo Chart 安装与配置实战指南 导读Bitnami Jenkins Helm Chart 实战指南在 Kubernetes 上部署与配置 CI/CD 服务器Bitnami Jenkins Helm Chart 实战指南在 Kubernetes 上部署与配置 CI/CD 服务器 本文以当前仓库中的 Bitnami云原生容器编排OpenMed Helm 部署指南在 Kubernetes 上以 Helm Chart 部署去标识化 REST 服务OpenMed Helm 部署指南在 Kubernetes 上以 Helm Chart 部署去标识化 REST 服务 本指南围绕仓库中的 Helm 部署文档人工智能NLP医疗健康数据脱敏本地部署大模型AI 应用MCP 服务联邦学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑