ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

在 Kubernetes 上部署 Minecraft 服务器:Helm Chart 完整配置与运维指南

在 Kubernetes 上部署 Minecraft 服务器:Helm Chart 完整配置与运维指南 【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载导读本指南以 stable/minecraft Chart 为核心完整讲解如何在 Kubernetes 集群中通过 Helm 一键部署 Minecraft 专用服务器从 EULA 确认、参数配置到 RCON 远程管理、数据持久化与备份恢复的完整闭环。读完本文你将掌握helm install部署、--set/values 文件两种配置方式、全部minecraftServer参数与底层环境变量的映射关系以及基于kubectl cp与rcon-cli的存档备份实操方法。注意该 Chart 已标记为deprecated已废弃原仓库声明其已迁移至新的托管位置itzg/minecraft-server-charts当前仓库中的版本为1.2.5appVersion1.14.4见 Chart.yaml。本文所有命令与配置均以当前仓库实际内容为准适用于仍在使用本 Chart 的存量环境也适合作为理解 itzg/minecraft-server 镜像与 Helm 结合方式的参考范本。一、Chart 架构总览该 Chart 的设计非常简洁创建一个单一 Minecraft Pod外加两个 ServiceMinecraft 游戏端口与 RCON 管理端口。从 templates 目录的源码结构可以确认其组件构成资源对应模板说明Deploymentdeployment.yaml运行 itzg/minecraft-server 容器映射全部配置参数为环境变量Minecraft Serviceminecraft-svc.yaml暴露 25565 游戏端口支持 LoadBalancer / ClusterIP / NodePortRCON Servicercon-svc.yaml仅在rcon.enabledtrue时创建暴露 25575 管理端口Secretsecrets.yaml存放 base64 编码的 RCON 密码PersistentVolumeClaimdatadir-pvc.yaml为/data目录申请持久化存储默认启用其中 Deployment 模板有一个关键的门控逻辑只有当minecraftServer.eula不等于FALSE时Deployment 才会被渲染见 deployment.yaml。这意味着未确认 EULA 就安装Pod 根本不会创建——这是该 Chart 强制落实《Minecraft 最终用户许可协议》的机制。命名方面所有资源名由 _helpers.tpl 中的minecraft.fullname模板生成格式为{{ releaseName }}-minecraft并截断至 63 字符以符合 DNS 命名规范。二、安装前置条件按 README 的说明部署前需确认至少 512 MB 内存对应 values.yaml 中resources.requests.memory: 512Mi的默认值Kubernetes 1.4并启用 Beta API当前模板已使用apps/v1的 Deployment 与标准 PVC 资源底层基础设施支持 PV provisioner用于数据持久化若无法提供动态存储可通过persistence.storageClass: -关闭动态供给详见后文。三、安装 Chart 与 EULA 确认Minecraft 服务器受 EULA 约束安装前必须阅读并同意 EULA。确认后执行helm install --name my-release \ --set minecraftServer.eulatrue stable/minecraft该命令会以合理的默认值部署一个 Minecraft 专用服务器。--set minecraftServer.eulatrue是安装的必要参数Chart 默认值中eula: FALSE见 values.yaml若你不传此参数直接安装会得到以下提示来自 NOTES.txtERROR: You did not agree to the EULA in your helm install call. This deployment will be incomplete until you read the Minecraft EULA ... helm upgrade my-release --set minecraftServer.eulatrue stable/minecraft也就是说部署是不完整的——此时可以通过helm upgrade补上 EULA 参数后继续。CI 测试文件 test-values.yaml 中同样以minecraftServer.eula: TRUE作为必须覆盖的测试值印证了这一行为。安装完成后可用helm list查看已部署的 release。四、配置 Chart两种方式与完整参数表Chart 的配置全部集中在 values.yaml 中分为 Kubernetes 层镜像、资源、探针、安全上下文、调度、持久化与 Minecraft 层minecraftServer下的游戏参数绝大多数映射为 itzg/minecraft-server 镜像的环境变量。4.1 方式一命令行--sethelm install --name my-release \ --set minecraftServer.eulatrue,minecraftServer.Difficultyhard \ stable/minecraft注意参数名是大小写敏感的minecraftServer.Difficultyhard中的Difficulty需与 values.yaml 中difficulty键严格对应实际部署时应写为minecraftServer.difficultyhard原文示例中的写法取自旧版本镜像的变量命名习惯以当前 values.yaml 为准。4.2 方式二YAML 值文件helm install --name my-release -f values.yaml stable/minecraft可以基于默认的 values.yaml 修改后传入适合需要大量自定义的场景。4.3 Kubernetes 层参数参数默认值说明image/imageTagitzg/minecraft-server/latest容器镜像与标签resources.requestsmemory: 512Mi、cpu: 500m资源请求内存务必与minecraftServer.memory匹配strategyTypeRecreate升级策略Minecraft 单实例场景用 Recreate 避免双写世界文件securityContextrunAsUser: 1000、fsGroup: 2000容器安全上下文nodeSelector/tolerations/affinity空调度约束作用于 Pod见 deployment.yamlpodAnnotations/deploymentAnnotations空注入注解livenessProbe/readinessProbemc-monitor status localhost:25565探针通过 mc-monitor 检查 25565 端口initialDelaySeconds: 30、periodSeconds: 5、failureThreshold: 10extraEnv空追加任意自定义环境变量键值对形式探针配置在 deployment.yaml 中被展开为exec探针容器内实际执行mc-monitor status localhost:25565来判定服务器是否存活/就绪。4.4 Minecraft 层参数minecraftServer下表完整覆盖 values.yaml 中的游戏配置项并标注其映射到的容器环境变量映射逻辑见 deployment.yaml参数默认值映射环境变量说明eulaFALSEEULA必须设为true否则 Deployment 不创建version1.14.4VERSION可填LATEST、SNAPSHOT或具体版本号typeVANILLATYPE服务器类型VANILLA/FORGE/SPIGOT/BUKKIT/PAPER/FTB/SPONGEVANILLAforgeVersion空FORGEVERSION仅typeFORGE时生效若设置forgeInstallerUrl则被忽略spongeVersion空—仅typeSPONGEVANILLA时生效forgeInstallerUrl空FORGE_INSTALLER_URL覆盖 Forge 安装器下载地址bukkitDownloadUrl空BUKKIT_DOWNLOAD_URL仅typeBUKKITspigotDownloadUrl空SPIGOT_DOWNLOAD_URL仅typeSPIGOTpaperDownloadUrl空PAPER_DOWNLOAD_URL仅typePAPERftbServerMod空FTB_SERVER_MOD仅typeFTB指定要运行的模组包ftbLegacyJavaFixerfalseFTB_LEGACYJAVAFIXERFTB 出现 unable to launch forgemodloader 错误时设为truedifficultyeasyDIFFICULTY取值peaceful/easy/normal/hardwhitelist空WHITELIST逗号分隔的白名单玩家名ops空OPS逗号分隔的管理员玩家名icon空ICON服务器列表图标 URL启动时自动缩放转码maxPlayers20MAX_PLAYERS最大在线玩家数maxWorldSize10000MAX_WORLD_SIZE世界边界半径方块allowNethertrueALLOW_NETHER允许前往下界announcePlayerAchievementstrueANNOUNCE_PLAYER_ACHIEVEMENTS播报玩家成就enableCommandBlocktrueENABLE_COMMAND_BLOCK启用命令方块forcegameModefalseFORCE_gameMode为 true 时玩家始终以默认游戏模式加入generateStructurestrueGENERATE_STRUCTURES是否生成村庄等结构hardcorefalseHARDCORE玩家死亡后进入旁观模式maxBuildHeight256MAX_BUILD_HEIGHT最大建筑高度maxTickTime60000MAX_TICK_TIME单 tick 最大耗时毫秒超时由 watchdog 停服-1禁用spawnAnimals/spawnMonsters/spawnNPCstrueSPAWN_ANIMALS/SPAWN_MONSTERS/SPAWN_NPCS动物 / 怪物 / 村民生成开关viewDistance10VIEW_DISTANCE视距区块数levelSeed空SEED地图生成种子gameModesurvivalMODEcreative/survival/adventure/spectatormotdWelcome to Minecraft on Kubernetes!MOTD服务器列表欢迎语pvpfalsePVP是否允许玩家间伤害levelTypeDEFAULTLEVEL_TYPEDEFAULT/FLAT/LARGEBIOMES/AMPLIFIED/CUSTOMIZEDgeneratorSettings空GENERATOR_SETTINGS配合 FLAT / CUSTOMIZED 深度定制生成worldSaveNameworldLEVEL世界存档目录名downloadWorldUrl空WORLD启动时下载该 URL 作为初始世界见 deployment.yamlforceReDownloadfalseFORCE_REDOWNLOAD强制重新下载服务器文件downloadModpackUrl空MODPACK启动时下载该 URL 的整合包removeOldModsfalseREMOVE_OLD_MODS下载新整合包前删除旧 modsonlineModetrueONLINE_MODE是否校验正版账号memory512MMEMORYJVM 堆内存调整时需同步resources.requestsjvmOpts空JVM_OPTS常规 JVM 参数jvmXXOpts空JVM_XX_OPTS-X类需前置的 JVM 参数从模板源码可以看出TYPE的选择会触发条件渲染FORGE类型下二选一注入FORGE_INSTALLER_URL或FORGEVERSIONSPIGOT/BUKKIT/PAPER分别注入对应的下载 URLFTB则注入FTB_SERVER_MOD与FTB_LEGACYJAVAFIXER见 deployment.yaml。4.5 服务与 RCON / Query 参数minecraftServer: serviceType: LoadBalancer # 游戏服务类型LoadBalancer / ClusterIP / NodePort loadBalancerIP: # 指定 LB 的固定 IP # loadBalancerSourceRanges: [] # LB 来源 IP 白名单 # externalTrafficPolicy: Cluster # 可选 Cluster / Local rcon: enabled: false # 启用后务必修改 password port: 25575 password: CHANGEME! serviceType: LoadBalancer loadBalancerIP: query: enabled: false # 启用后服务器会被发布到 Gamespy port: 25565RCON 的开关逻辑在模板中非常清晰仅当rcon.enabled为真时才会注入ENABLE_RCONtrue与RCON_PASSWORD密码从 Secret 中读取见 deployment.yaml并额外渲染 RCON Service 与 25575 端口rcon-svc.yaml。RCON 密码以base64编码存放在 Secret 中secrets.yaml默认密码CHANGEME!强烈建议修改。Minecraft Service 模板minecraft-svc.yaml会依据serviceType渲染为 ClusterIP / LoadBalancer / NodePort 三种类型之一并支持loadBalancerIP、loadBalancerSourceRanges与externalTrafficPolicy。五、连接服务器根据 Service 类型获取地址安装完成后NOTES.txt 会根据serviceType打印对应的连接指引NodePort通过kubectl查询 NodePort 与节点 IP拼接为NODE_IP:NODE_PORT供客户端连接并需在云平台安全组/防火墙放行该端口LoadBalancer默认等待EXTERNAL-IP填充可用kubectl get svc -w release-minecraft观察通常需要数分钟ClusterIP使用kubectl port-forward pod 25565:25565将本地端口转发到 Pod客户端连接127.0.0.1:25565。六、数据持久化itzg/minecraft-server 镜像将存档与 mods 都存放在/data目录。Chart 默认行为为/data创建一个 PersistentVolumeClaim 并挂载mountPath: /data见 deployment.yaml存档会持久化mods 默认不单独持久化若想关闭持久化将persistence.dataDir.enabled设为false——此时数据卷退化为emptyDir。关于emptyDirREADME 明确引用了 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.也就是说关闭持久化后 Pod 一旦被删除或迁移存档将永久丢失。因此除非是临时测试环境否则强烈建议保持enabled: true。PVC 模板datadir-pvc.yaml的关键细节仅当persistence.dataDir.enabledtrue且未指定existingClaim时创建默认访问模式为ReadWriteOnce容量由persistence.dataDir.Size控制默认1GistorageClass语义未定义时使用默认 provisionerAWS 上为gp2GKE/AWS/OpenStack 上为standard设为-时storageClassName: 禁用动态供给需自行准备 PV设为具体名称如standard时使用该 StorageClass若需要复用已有 PVC可设置persistence.dataDir.existingClaim此时模板将跳过 PVC 创建直接引用既有声明。七、存档备份kubectl cp rcon-cli由于存档写入可能正在进行备份前需先通过 RCON 让服务器暂停写入。README 给出的完整流程如下需要先启用rcon.enabledNAMESPACEdefault POD_IDlionhope-387ff8d-sdis9 kubectl exec --namespace ${NAMESPACE} ${POD_ID} rcon-cli save-off kubectl exec --namespace ${NAMESPACE} ${POD_ID} rcon-cli save-all kubectl cp ${NAMESPACE}/${POD_ID}:/data . kubectl exec --namespace ${NAMESPACE} ${POD_ID} rcon-cli save-on步骤拆解rcon-cli save-off关闭自动存档确保后续操作期间世界文件不被改写rcon-cli save-all强制落盘一次保证内存中的世界状态写入/datakubectl cp将 Pod 中/data目录含存档、配置、mods 等完整复制到本地rcon-cli save-on恢复自动存档。恢复时反向操作即可将备份目录用kubectl cp传回 Pod 的/data或挂载到新 PVC 后重新部署。八、健康检查、安全上下文与调度健康检查liveness/readiness 探针均通过容器内mc-monitor检查localhost:25565initialDelaySeconds: 30留出了 Minecraft 启动时间世界加载通常较慢failureThreshold: 10容忍短暂无响应安全上下文默认runAsUser: 1000、fsGroup: 2000确保容器以非 root 身份运行且对挂载卷有组写权限deployment.yaml调度支持nodeSelector、tolerations、affinity将服务器固定到特定节点或节点池——对需要稳定 IP 或大内存节点的生产环境尤为实用。九、卸载 Charthelm delete my-release该命令会删除 Chart 关联的所有 Kubernetes 组件并删除该 release。注意默认情况下helm delete不会删除 PVC因此游戏存档会保留——这既是误删可恢复的保障也意味着如需彻底清理需手动删除对应的PersistentVolumeClaim。十、从源码看 Chart 的设计要点EULA 强门控Deployment 模板首行即判断eula ! FALSENOTES.txt 也做了对称的提示二者共同构成不同意 EULA 就不部署的完整闭环配置即环境变量Chart 的minecraftServer全部参数在 deployment.yaml 中被逐一映射为EULA、TYPE、VERSION、DIFFICULTY、MODE、SEED、WORLD、MODPACK等镜像约定变量理解这一点后即使文档未列出的镜像新变量也可通过extraEnv直接注入按需渲染的附属资源RCON Service、RCON 端口、Query 配置均以enabled开关控制是否渲染避免不必要的暴露面CI 验证test-values.yaml 表明该 Chart 的 CI 会以eulaTRUE覆盖默认值进行模板渲染测试这也是所有 Helm Chart 的通用验证方式。结语stable/minecraft 用最精简的资源编排1 Deployment 1~2 Service 1 Secret 1 PVC把 Minecraft 专用服务器搬上了 Kubernetes其EULA 门控 参数即环境变量 按需渲染的设计模式至今仍是 Helm 实战中的典型范例。虽然该 Chart 已废弃迁移但本文中的部署、配置、持久化与备份方法论可直接迁移到其继任者或其他基于 itzg/minecraft-server 镜像的自建 Chart 中。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐基于 Helm 在 Kubernetes 上部署与运维 Joomla! CMSstable/joomla Chart 完整配置指南基于 Helm 在 Kubernetes 上部署与运维 Joomla! CMSstable/joomla Chart 完整配置指南 导读 本文以 stable在 Kubernetes 上部署 Factorio 专用服务器stable/factorio Helm Chart 部署与配置指南在 Kubernetes 上部署 Factorio 专用服务器stable/factorio Helm Chart 部署与配置指南 stable/factor在 Kubernetes 上部署 DokuWikistable/dokuwiki Helm Chart 完整配置指南在 Kubernetes 上部署 DokuWikistable/dokuwiki Helm Chart 完整配置指南 导读 本文基于当前仓库中的 stable上一篇xiaozhi-robot通信协议深度剖析UART串口靠什么驱动AI语音模块下一篇9层回退解析链VideoDownloadHelper的ParseVideo引擎是如何嗅探视频URL的创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表