apiVersion: v1 data: map-gen-settings.json: | { "autoplace_controls": { "coal": { "frequency": 1, "richness": 1, "size": 1 }, "copper-ore": { "frequency": 1, "richness": 1, "size": 1 }, "crude-oil": { "frequency": 1, "richness": 1, "size": 1 }, "enemy-base": { "frequency": 1, "richness": 1, "size": 1 }, "iron-ore": { "frequency": 1, "richness": 1, "size": 1 }, "stone": { "frequency": 1, "richness": 1, "size": 1 }, "trees": { "frequency": 1, "richness": 1, "size": 1 }, "uranium-ore": { "frequency": 1, "richness": 1, "size": 1 } }, "cliff_settings": { "cliff_elevation_0": 10, "cliff_elevation_interval": 40, "name": "cliff", "richness": 1 }, "height": 0, "peaceful_mode": false, "property_expression_names": { "control-setting:aux:bias": "0", "control-setting:aux:frequency:multiplier": "1", "control-setting:moisture:bias": "0", "control-setting:moisture:frequency:multiplier": "1" }, "starting_area": 1, "starting_points": [ { "x": 0, "y": 0 } ], "terrain_segmentation": 1, "water": 1, "width": 0 } map-settings.json: | { "difficulty_settings": { "recipe_difficulty": 0, "research_queue_setting": "after-victory", "technology_difficulty": 0, "technology_price_multiplier": 1 }, "enemy_evolution": { "destroy_factor": 0.002, "enabled": true, "pollution_factor": 9e-7, "time_factor": 0.000004 }, "enemy_expansion": { "building_coefficient": 0.1, "enabled": true, "enemy_building_influence_radius": 2, "friendly_base_influence_radius": 2, "max_colliding_tiles_coefficient": 0.9, "max_expansion_cooldown": 216000, "max_expansion_distance": 7, "min_base_spacing": 3, "min_expansion_cooldown": 14400, "neighbouring_base_chunk_coefficient": 0.4, "neighbouring_chunk_coefficient": 0.5, "other_base_coefficient": 2, "settler_group_max_size": 20, "settler_group_min_size": 5 }, "max_failed_behavior_count": 3, "path_finder": { "cache_accept_path_end_distance_ratio": 0.15, "cache_accept_path_start_distance_ratio": 0.2, "cache_max_connect_to_cache_steps_multiplier": 100, "cache_path_end_distance_rating_multiplier": 20, "cache_path_start_distance_rating_multiplier": 10, "direct_distance_to_consider_short_request": 100, "enemy_with_different_destination_collision_penalty": 30, "extended_collision_penalty": 3, "fwd2bwd_ratio": 5, "general_entity_collision_penalty": 10, "general_entity_subsequent_collision_penalty": 3, "goal_pressure_ratio": 2, "ignore_moving_enemy_collision_distance": 5, "long_cache_min_cacheable_distance": 30, "long_cache_size": 25, "max_clients_to_accept_any_new_request": 10, "max_clients_to_accept_short_new_request": 100, "max_steps_worked_per_tick": 100, "max_work_done_per_tick": 8000, "min_steps_to_check_path_find_termination": 2000, "negative_cache_accept_path_end_distance_ratio": 0.3, "negative_cache_accept_path_start_distance_ratio": 0.3, "negative_path_cache_delay_interval": 20, "overload_levels": [ 0, 100, 500 ], "overload_multipliers": [ 2, 3, 4 ], "short_cache_min_algo_steps_to_cache": 50, "short_cache_min_cacheable_distance": 10, "short_cache_size": 5, "short_request_max_steps": 1000, "short_request_ratio": 0.5, "stale_enemy_with_same_destination_collision_penalty": 30, "start_to_goal_cost_multiplier_to_terminate_path_find": 500, "use_path_cache": true }, "pollution": { "ageing": 1, "diffusion_ratio": 0.02, "enabled": true, "enemy_attack_pollution_consumption_modifier": 1, "expected_max_per_chunk": 150, "max_pollution_to_restore_trees": 20, "min_pollution_to_damage_trees": 60, "min_to_diffuse": 15, "min_to_show_per_chunk": 50, "pollution_per_tree_damage": 50, "pollution_restored_per_tree_damage": 10, "pollution_with_max_forest_damage": 150 }, "steering": { "default": { "force_unit_fuzzy_goto_behavior": false, "radius": 1.2, "separation_factor": 1.2, "separation_force": 0.005 }, "moving": { "force_unit_fuzzy_goto_behavior": false, "radius": 3, "separation_factor": 3, "separation_force": 0.01 } }, "unit_group": { "max_gathering_unit_groups": 30, "max_group_gathering_time": 36000, "max_group_member_fallback_factor": 3, "max_group_radius": 30, "max_group_slowdown_factor": 0.3, "max_member_slowdown_when_ahead": 0.6, "max_member_speedup_when_behind": 1.4, "max_unit_group_size": 200, "max_wait_time_for_late_members": 7200, "member_disown_distance": 10, "min_group_gathering_time": 3600, "min_group_radius": 5, "tick_tolerance_when_member_arrives": 60 } } rconpw: | replaceme server-adminlist.json: | [ "Urrrk", "Wendy" ] server-settings.json: | { "afk_autokick_interval": 0, "allow_commands": "admins-only", "auto_pause": true, "auto_pause_when_players_connect": false, "autosave_interval": 10, "autosave_only_on_server": true, "autosave_slots": 5, "description": "Factorio running on Kubernetes", "game_password": "", "ignore_player_limit_for_returning_players": false, "max_heartbeats_per_second": 60, "max_players": 0, "max_upload_in_kilobytes_per_second": 0, "max_upload_slots": 5, "maximum_segment_size": 100, "maximum_segment_size_peer_count": 10, "minimum_latency_in_ticks": 0, "minimum_segment_size": 25, "minimum_segment_size_peer_count": 20, "name": "Factorio", "non_blocking_saving": false, "only_admins_can_pause_the_game": true, "password": "", "require_user_verification": false, "tags": [ "game", "tags" ], "token": "", "username": "", "visibility": { "lan": true, "public": false } } kind: ConfigMap metadata: labels: app.kubernetes.io/instance: factorio app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: factorio app.kubernetes.io/version: stable helm.sh/chart: factorio-1.2.2 name: factorio-settings --- apiVersion: v1 kind: PersistentVolumeClaim metadata: labels: app.kubernetes.io/instance: factorio app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: factorio app.kubernetes.io/version: stable helm.sh/chart: factorio-1.2.2 name: factorio-config spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: openebs-3-replicas --- apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/instance: factorio app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: factorio app.kubernetes.io/version: stable helm.sh/chart: factorio-1.2.2 name: factorio spec: replicas: 1 revisionHistoryLimit: 3 selector: matchLabels: app.kubernetes.io/instance: factorio app.kubernetes.io/name: factorio strategy: type: Recreate template: metadata: labels: app.kubernetes.io/instance: factorio app.kubernetes.io/name: factorio spec: automountServiceAccountToken: true containers: - env: - name: GENERATE_NEW_SAVE value: "false" - name: LOAD_LATEST_SAVE value: "true" - name: PORT value: "34197" - name: RCON_PORT value: "27015" - name: SAVE_NAME value: _autosave1 - name: TOKEN value: "" - name: TZ value: UTC - name: UPDATE_MODS_ON_START value: "false" - name: USERNAME value: "" image: factoriotools/factorio:2.0.43 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 3 initialDelaySeconds: 0 periodSeconds: 10 tcpSocket: port: 27015 timeoutSeconds: 1 name: factorio ports: - containerPort: 27015 name: rcon protocol: TCP - containerPort: 34197 name: server protocol: UDP readinessProbe: failureThreshold: 3 initialDelaySeconds: 0 periodSeconds: 10 tcpSocket: port: 27015 timeoutSeconds: 1 startupProbe: failureThreshold: 30 initialDelaySeconds: 0 periodSeconds: 5 tcpSocket: port: 27015 timeoutSeconds: 1 volumeMounts: - mountPath: /factorio name: config - mountPath: /helmconfig/map_settings.json name: factorio-config subPath: map_settings.json dnsPolicy: ClusterFirst enableServiceLinks: true initContainers: - command: - sh - -c - | mkdir -p /factorio/config cp -vL /helmconfig/* /factorio/config/ image: busybox imagePullPolicy: IfNotPresent name: copy-configmap securityContext: runAsUser: 0 volumeMounts: - mountPath: /helmconfig/ name: factorio-config - mountPath: /factorio/ name: config serviceAccountName: default volumes: - name: config persistentVolumeClaim: claimName: factorio-config - configMap: name: factorio-settings name: factorio-config