Ark chart rework (#35075)

**Description**
This updates the Ark Survival evolved chart to comply to our current
quality guidelines and use a container thats more suited towards
ark-specifically.

The new container includes ark-server-manager, which allows for
automatic management of mods as well.

**⚙️ Type of change**

- [x] ⚙️ Feature/App addition
- [ ] 🪛 Bugfix
- [x] ⚠️ Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [x] 🔃 Refactor of current code
- [ ] 📜 Documentation Changes

**🧪 How Has This Been Tested?**
<!--
Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce. Please also list any relevant details
for your test configuration
-->

**📃 Notes:**
Also adds ark server as a hosted service...

**✔️ Checklist:**

- [ ] ⚖️ My code follows the style guidelines of this project
- [ ] 👀 I have performed a self-review of my own code
- [ ] #️⃣ I have commented my code, particularly in hard-to-understand
areas
- [ ] 📄 I have made changes to the documentation
- [ ] 🧪 I have added tests to this description that prove my fix is
effective or that my feature works
- [ ] ⬆️ I increased versions for any altered app according to semantic
versioning
- [ ] I made sure the title starts with `feat(chart-name):`,
`fix(chart-name):`, `chore(chart-name):`, `docs(chart-name):` or
`fix(docs):`

** App addition**

If this PR is an app addition please make sure you have done the
following.

- [ ] 🖼️ I have added an icon in the Chart's root directory called
`icon.png`

---

_Please don't blindly check all the boxes. Read them and only check
those that apply.
Those checkboxes are there for the reviewer to see what is this all
about and
the status of this PR with a quick glance._
This commit is contained in:
Kjeld Schouten
2025-05-05 19:46:08 +02:00
committed by GitHub
parent ac50f9391c
commit d229701c1e
10 changed files with 323 additions and 92 deletions
+2 -5
View File
@@ -19,7 +19,7 @@ dependencies:
tags: [] tags: []
import-values: [] import-values: []
deprecated: false deprecated: false
description: A custom SteamCMD chart that runs ArkSE. description: Runs Ark Survival Evolvedand Ark-Server-Manager
home: https://truecharts.org/charts/stable/arksurvivalevolved home: https://truecharts.org/charts/stable/arksurvivalevolved
icon: https://truecharts.org/img/hotlink-ok/chart-icons/arksurvivalevolved.webp icon: https://truecharts.org/img/hotlink-ok/chart-icons/arksurvivalevolved.webp
keywords: keywords:
@@ -33,9 +33,6 @@ maintainers:
url: https://truecharts.org url: https://truecharts.org
name: arksurvivalevolved name: arksurvivalevolved
sources: sources:
- https://ghcr.io/ich777/steamcmd
- https://github.com/ich777/docker-steamcmd-server/tree/arkse
- https://github.com/truecharts/charts/tree/master/charts/stable/arksurvivalevolved - https://github.com/truecharts/charts/tree/master/charts/stable/arksurvivalevolved
type: application type: application
version: 9.5.1 version: 10.0.0
@@ -2,6 +2,8 @@
title: Community Guide title: Community Guide
--- ---
TBD: Needs redoing
## Credentials ## Credentials
`Username` and `Password` is optional but recommended. You **_will_** need to disable Steam Guard. `Username` and `Password` is optional but recommended. You **_will_** need to disable Steam Guard.
@@ -1,43 +0,0 @@
{{/* Define the secrets */}}
{{- define "ark.secrets" -}}
{{- $secretName := (printf "%s-ark-secrets" (include "tc.v1.common.lib.chart.names.fullname" $)) -}}
{{- $params := list }}
{{- $params = append $params (printf "?Port=%v" .Values.service.main.ports.main.port) -}}
{{- $params = append $params (printf "?QueryPort=%v" .Values.service.query.ports.query.port) -}}
{{- $params = append $params (printf "?RCONPort=%v" .Values.service.rcon.ports.rcon.port) -}}
{{- $gameExtraParams := list -}}
{{- range $key, $value := .Values.ark.easy_game_extra_params -}}
{{- if $value -}}
{{ $gameExtraParams = mustAppend $gameExtraParams (printf "-%s" $key) }}
{{- end -}}
{{- end -}}
{{- if .Values.ark.rcon_enabled -}}
{{- $params = append $params (print "?RCONEnabled=True") -}}
{{- end }}
enabled: true
data:
GAME_ID: {{ .Values.ark.game_id | quote }}
GAME_PARAMS: {{ printf "%s%s" (join "" $params) (join "" .Values.ark.game_params) | quote }}
GAME_PARAMS_EXTRA: {{ (join " " (concat $gameExtraParams .Values.ark.game_params_extra)) | quote }}
{{- with .Values.ark.custom_map }}
MAP: {{ . | quote }}
{{- else }}
MAP: {{ .Values.ark.map | quote }}
{{- end }}
{{- with .Values.ark.server_name }}
SERVER_NAME: {{ . | quote }}
{{- end }}
VALIDATE: {{ default false .Values.ark.validate | quote }}
SRV_ADMIN_PWD: {{ .Values.ark.srv_admin_pass | quote }}
SRV_PWD: {{ .Values.ark.srv_password | quote }}
{{- with .Values.ark.username }}
USERNAME: {{ . | quote }}
{{- end }}
{{- with .Values.ark.password }}
PASSWRD: {{ . | quote }}
{{- end }}
{{- end -}}
@@ -5,15 +5,5 @@
{{- fail (printf "In the service game, the port for game must be greater by 1 than the main service's port. You have to set it to <%s>." (add1 .Values.service.main.ports.main.port)) }} {{- fail (printf "In the service game, the port for game must be greater by 1 than the main service's port. You have to set it to <%s>." (add1 .Values.service.main.ports.main.port)) }}
{{- end -}} {{- end -}}
{{- if and (ge (int .Values.service.query.ports.query.port) 27020) (le (int .Values.service.query.ports.query.port) 27050) -}}
{{- fail "Query Steam Service port cannot be between 27020 and 27050." -}}
{{- end }}
{{/* Render secrets for ark */}}
{{- $secrets := include "ark.secrets" . | fromYaml -}}
{{- if $secrets -}}
{{- $_ := set .Values.secret "ark-secrets" $secrets -}}
{{- end -}}
{{/* Render the templates */}} {{/* Render the templates */}}
{{ include "tc.v1.common.loader.apply" . }} {{ include "tc.v1.common.loader.apply" . }}
+169 -34
View File
@@ -1,13 +1,12 @@
image: image:
pullPolicy: IfNotPresent repository: docker.io/drpsychick/arkserver
repository: ghcr.io/ich777/steamcmd tag: latest-v1.6.62
tag: arkse@sha256:ed49b692950ce7eb7cf8c1f3cf032aed22da7085b982d175e3ccd18b761d6ad1 # securityContext:
securityContext: # container:
container: # runAsNonRoot: true
runAsNonRoot: false # readOnlyRootFilesystem: false
readOnlyRootFilesystem: false # runAsUser: 0
runAsUser: 0 # runAsGroup: 0
runAsGroup: 0
service: service:
main: main:
enabled: true enabled: true
@@ -36,29 +35,37 @@ service:
protocol: tcp protocol: tcp
port: 27020 port: 27020
ark: ark:
# setting pass for rcon mods: []
srv_admin_pass: "123456789"
srv_password: ""
username: ""
password: ""
game_id: "376030"
rcon_enabled: true
game_params: []
game_params_extra: []
easy_game_extra_params:
server: true
log: true
crossplay: true
map: TheIsland
# Used only for SCALE GUI
custom_map: ""
server_name: ""
validate: false
workload: workload:
main: main:
podSpec: podSpec:
containers: containers:
main: main:
env:
## DOnt touch
# arkmanager subtracts 1 from port by default
am_arkNoPortDecrement: "true"
am_arkGameIniFile: /arkconfig/Game.ini
am_arkGameUserSettingsIniFile: /arkconfig/GameUserSettings.ini
ARKSERVER_SHARED: "{{ $.Values.persistence.game.mountPath | quote }}"
am_ark_QueryPort: "{{ .Values.service.query.ports.query.port }}"
am_ark_Port: "{{ .Values.service.main.ports.main.port }}"
am_ark_RCONPort: "{{ .Values.service.rcon.ports.rcon.port }}"
am_ark_GameModIds: '{{ join "," .Values.ark.mods | quote }}'
## Free RealEstate
ARKCLUSTER: "true"
am_arkopt_clusterid: "arkserver"
am_arkStagingDir: ""
am_arkAutoUpdateOnStart: false
am_ark_SessionName: "arkserver"
am_serverMap: "TheIsland"
am_ark_MaxPlayers: "10"
am_ark_ServerPassword: "password"
am_ark_RCONEnabled: "True"
am_ark_ServerAdminPassword: "123456789"
probes: probes:
liveness: liveness:
type: tcp type: tcp
@@ -69,13 +76,141 @@ workload:
startup: startup:
type: tcp type: tcp
port: "{{ .Values.service.rcon.ports.rcon.port }}" port: "{{ .Values.service.rcon.ports.rcon.port }}"
envFrom:
- secretRef:
name: "ark-secrets"
persistence: persistence:
steamcmd: game:
enabled: true enabled: true
mountPath: /serverdata/steamcmd mountPath: /arkserver
serverfiles: cluster:
enabled: true enabled: true
mountPath: /serverdata/serverfiles mountPath: /arkserver/ShooterGame/Saved/clusters
save:
enabled: true
mountPath: /arkserver/ShooterGame/Saved
gameinis:
enabled: true
type: configmap
objectName: gameinis
mountPath: /arkconfig
crontab:
enabled: true
type: configmap
objectName: gameinis
mountPath: /ark/config/crontab
items:
- key: "crontab"
path: "crontab"
configmap:
gameinis:
enabled: true
data:
Engine.ini: |
# Engine.ini
Game.ini: |
[/Script/ShooterGame.ShooterGameMode]
bDisableStructurePlacementCollision=True
## index:
## 0: Health,
## 1: Stamina,
## 2: Torpidity,
## 3: Oxygen,
## 4: Food,
## 5: Water,
## 6: Temperature,
## 7: Weight,
## 8: MeleeDamageMultiplier,
## 9: SpeedMultiplier,
## 10: TemperatureFortitude,
## 11: CraftingSpeedMultiplier
# PerLevelStatsMultiplier_Player[0]=2.0
# PerLevelStatsMultiplier_Player[4]=2.0
# PerLevelStatsMultiplier_Player[5]=2.0
# PerLevelStatsMultiplier_Player[7]=2.0
# PerLevelStatsMultiplier_DinoTamed[7]=2.0
# PerLevelStatsMultiplier_DinoWild[7]=1
## https://board.nitrado.net/support-de-german-only/support-gameserver/ark-survival-evolved/103586/butgeschwindigkeit-wachstumsgeschwindigkeit/?s=6270aee8447cd08b702a7315fe1e47efe64afb1b#post681499
## https://survivetheark.com/index.php?/forums/topic/200763-help-with-breedingimprinting-settings/
# MatingIntervalMultiplier=0.1
# BabyMatureSpeedMultiplier=25.0
# EggHatchSpeedMultiplier=15.0
# BabyCuddleIntervalMultiplier=0.1
GameUserSettings.ini: |
[/Script/ShooterGame.ShooterGameUserSettings]
Version=5
[ServerSettings]
AllowFlyerCarryPvE=True
AllowThirdPersonPlayer=True
AlwaysNotifyPlayerLeft=False
AutoSavePeriodMinutes=15.000000
ClampResourceHarvestDamage=False
DifficultyOffset=1.000000
OverrideOfficialDifficulty=5.000000
DisableStructureDecayPvE=False
DontAlwaysNotifyPlayerJoined=False
EnablePvPGamma=False
GlobalVoiceChat=False
KickIdlePlayersPeriod=2400.000000
NoTributeDownloads=False
ProximityChat=False
ProximityVoiceChat=False
PvEStructureDecayDestructionPeriod=0.000000
ServerCrosshair=True
ServerForceNoHUD=False
ServerHardcore=False
ServerPassword=password
ServerPVE=True
ShowMapPlayerLocation=True
TamedDinoDamageMultiplier=1.000000
TamedDinoResistanceMultiplier=1.000000
StructurePreventResourceRadiusMultiplier=1.000000
RaidDinoCharacterFoodDrainMultiplier=1.000000
PvEDinoDecayPeriodMultiplier=1.000000
PerPlatformMaxStructuresMultiplier=1.000000
ListenServerTetherDistanceMultiplier=1.000000
MaxTamedDinos=5000.000000
RCONServerGameLogBuffer=600.000000
AllowHitMarkers=True
TamingSpeedMultiplier=3.000000
AllowCaveBuildingPvE=True
AllowAnyoneBabyImprintCuddle=True
ShowFloatingDamageText=True
NonPermanentDiseases=True
HarvestAmountMultiplier=1.900000
PreventDownloadSurvivors=False
PreventDownloadItems=False
PreventDownloadDinos=False
PreventUploadSurvivors=False
PreventUploadItems=False
PreventUploadDinos=False
TribeLogDestroyedEnemyStructures=True
TheMaxStructuresInRange=10500.000000
XPMultiplier=1
ActiveMods=
[SessionSettings]
SessionName=ArkServer
[/Script/Engine.GameSession]
[MessageOfTheDay]
Message=Welcome on ARK
Duration=5
[/Game/PrimalEarth/CoreBlueprints/TestGameMode.TestGameMode_C]
bServerGameLogEnabled=True
crontab: |
## Example of job definition:
## .---------------- minute (0 - 59)
## | .------------- hour (0 - 23)
## | | .---------- day of month (1 - 31)
## | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
## | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
## | | | | |
## * * * * * user-name command to be executed
## Examples for arkmanager:
# 0 * * * * arkmanager update --update-mods --warn --saveworld # check for updates every hour
# */15 * * * * arkmanager saveworld && arkmanager backup # backup every 15min
# 0 0 * * * arkmanager restart --warn --saveworld # restart every day at midnight
@@ -0,0 +1,127 @@
---
# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/helm.toolkit.fluxcd.io/helmrelease_v2.json
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: ark
namespace: ark
spec:
interval: 10m
chart:
spec:
chart: arksurvivalevolved
version: 10.0.0
sourceRef:
kind: HelmRepository
name: truecharts
namespace: flux-system
interval: 15m
timeout: 20m
maxHistory: 3
install:
createNamespace: true
remediation:
retries: 3
upgrade:
cleanupOnFail: true
remediation:
retries: 3
uninstall:
keepHistory: false
values:
credentials:
s3:
type: s3
url: "${S3URL}"
bucket: "${S3PREFIX_TC}-ark"
accessKey: "${S3ID_TC}"
secretKey: "${S3KEY_TC}"
encrKey: "${S3KEY_TC}"
service:
main:
enabled: true
loadBalancerIP: ${ARK_IP}
type: LoadBalancer
# externalTrafficPolicy: Local
ports:
main:
enabled: true
port: 7777
protocol: udp
game:
enabled: true
port: 7778
# This should always be main +1
protocol: udp
query:
enabled: true
# loadBalancerIP: $ARK_IP}
# type: LoadBalancer
ports:
query:
enabled: true
protocol: udp
port: 27015
rcon:
enabled: true
# loadBalancerIP: ${ARK_IP}
# type: LoadBalancer
ports:
rcon:
enabled: true
protocol: tcp
port: 27020
workload:
main:
podSpec:
containers:
main:
env:
## Free RealEstate
am_arkopt_clusterid: "TrueCharts-Ark"
am_arkStagingDir: ""
am_arkAutoUpdateOnStart: false
am_ark_SessionName: "TrueCharts"
am_serverMap: "Fjordur"
am_ark_MaxPlayers: "10"
am_ark_ServerPassword: ${ARK_PASSWORD}
am_ark_RCONEnabled: "True"
am_ark_ServerAdminPassword: ${ARK_RCONPASS}
persistence:
cluster:
volsync:
- name: b2
type: restic
credentials: s3
dest:
accessModes:
- ReadWriteOnce
enabled: true
src:
enabled: true
save:
volsync:
- name: b2
type: restic
credentials: s3
dest:
accessModes:
- ReadWriteOnce
enabled: true
src:
enabled: true
ark:
mods: []
resources:
limits:
cpu: 8000m
memory: 25Gi
requests:
cpu: 1000m
memory: 8Gi
@@ -0,0 +1,6 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespace.yaml
- helm-release.yaml
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: ark
+12
View File
@@ -0,0 +1,12 @@
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: ark
namespace: flux-system
spec:
interval: 10m
path: clusters/main/kubernetes/apps/ark/app
prune: true
sourceRef:
kind: GitRepository
name: truecharts
@@ -3,5 +3,6 @@ kind: Kustomization
resources: resources:
- renovate/ks.yaml - renovate/ks.yaml
- minecraft/ks.yaml - minecraft/ks.yaml
- ark/ks.yaml
- jackett/ks.yaml - jackett/ks.yaml
- bitmagnet/ks.yaml - bitmagnet/ks.yaml