diff --git a/charts/stable/arksurvivalevolved/Chart.yaml b/charts/stable/arksurvivalevolved/Chart.yaml index 8b0136415a7..f2ef27f9d13 100644 --- a/charts/stable/arksurvivalevolved/Chart.yaml +++ b/charts/stable/arksurvivalevolved/Chart.yaml @@ -19,7 +19,7 @@ dependencies: tags: [] import-values: [] 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 icon: https://truecharts.org/img/hotlink-ok/chart-icons/arksurvivalevolved.webp keywords: @@ -33,9 +33,6 @@ maintainers: url: https://truecharts.org name: arksurvivalevolved 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 type: application -version: 9.5.1 - +version: 10.0.0 diff --git a/charts/stable/arksurvivalevolved/docs/community_guide.md b/charts/stable/arksurvivalevolved/docs/community_guide.md index c3af87bcd49..95ab98ba51a 100644 --- a/charts/stable/arksurvivalevolved/docs/community_guide.md +++ b/charts/stable/arksurvivalevolved/docs/community_guide.md @@ -2,6 +2,8 @@ title: Community Guide --- +TBD: Needs redoing + ## Credentials `Username` and `Password` is optional but recommended. You **_will_** need to disable Steam Guard. diff --git a/charts/stable/arksurvivalevolved/templates/_secrets.tpl b/charts/stable/arksurvivalevolved/templates/_secrets.tpl deleted file mode 100644 index 252bf2be3a8..00000000000 --- a/charts/stable/arksurvivalevolved/templates/_secrets.tpl +++ /dev/null @@ -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 -}} diff --git a/charts/stable/arksurvivalevolved/templates/common.yaml b/charts/stable/arksurvivalevolved/templates/common.yaml index 881082bc6af..0536d142989 100644 --- a/charts/stable/arksurvivalevolved/templates/common.yaml +++ b/charts/stable/arksurvivalevolved/templates/common.yaml @@ -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)) }} {{- 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 */}} {{ include "tc.v1.common.loader.apply" . }} diff --git a/charts/stable/arksurvivalevolved/values.yaml b/charts/stable/arksurvivalevolved/values.yaml index 2ecf2250d97..3818e452871 100644 --- a/charts/stable/arksurvivalevolved/values.yaml +++ b/charts/stable/arksurvivalevolved/values.yaml @@ -1,13 +1,12 @@ image: - pullPolicy: IfNotPresent - repository: ghcr.io/ich777/steamcmd - tag: arkse@sha256:ed49b692950ce7eb7cf8c1f3cf032aed22da7085b982d175e3ccd18b761d6ad1 -securityContext: - container: - runAsNonRoot: false - readOnlyRootFilesystem: false - runAsUser: 0 - runAsGroup: 0 + repository: docker.io/drpsychick/arkserver + tag: latest-v1.6.62 +# securityContext: +# container: +# runAsNonRoot: true +# readOnlyRootFilesystem: false +# runAsUser: 0 +# runAsGroup: 0 service: main: enabled: true @@ -36,29 +35,37 @@ service: protocol: tcp port: 27020 ark: - # setting pass for rcon - 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 + mods: [] + workload: main: podSpec: containers: 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: liveness: type: tcp @@ -69,13 +76,141 @@ workload: startup: type: tcp port: "{{ .Values.service.rcon.ports.rcon.port }}" - envFrom: - - secretRef: - name: "ark-secrets" + persistence: - steamcmd: + game: enabled: true - mountPath: /serverdata/steamcmd - serverfiles: + mountPath: /arkserver + cluster: 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 diff --git a/clusters/main/kubernetes/apps/ark/app/helm-release.yaml b/clusters/main/kubernetes/apps/ark/app/helm-release.yaml new file mode 100644 index 00000000000..ee873aec92d --- /dev/null +++ b/clusters/main/kubernetes/apps/ark/app/helm-release.yaml @@ -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 diff --git a/clusters/main/kubernetes/apps/ark/app/kustomization.yaml b/clusters/main/kubernetes/apps/ark/app/kustomization.yaml new file mode 100644 index 00000000000..1b2b2dc29f5 --- /dev/null +++ b/clusters/main/kubernetes/apps/ark/app/kustomization.yaml @@ -0,0 +1,6 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - namespace.yaml + - helm-release.yaml diff --git a/clusters/main/kubernetes/apps/ark/app/namespace.yaml b/clusters/main/kubernetes/apps/ark/app/namespace.yaml new file mode 100644 index 00000000000..ef86a922b9d --- /dev/null +++ b/clusters/main/kubernetes/apps/ark/app/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: ark diff --git a/clusters/main/kubernetes/apps/ark/ks.yaml b/clusters/main/kubernetes/apps/ark/ks.yaml new file mode 100644 index 00000000000..66459fb5769 --- /dev/null +++ b/clusters/main/kubernetes/apps/ark/ks.yaml @@ -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 diff --git a/clusters/main/kubernetes/apps/kustomization.yaml b/clusters/main/kubernetes/apps/kustomization.yaml index c6c3875d448..b4d95e164a7 100644 --- a/clusters/main/kubernetes/apps/kustomization.yaml +++ b/clusters/main/kubernetes/apps/kustomization.yaml @@ -3,5 +3,6 @@ kind: Kustomization resources: - renovate/ks.yaml - minecraft/ks.yaml + - ark/ks.yaml - jackett/ks.yaml - bitmagnet/ks.yaml