blob: fc64aaa7fa9d580c2f670fa3ab22222deabbb701 [file] [log] [blame]
Sergiusz Bazanskicb5c3212019-05-19 03:10:17 +02001# Factorio on Kubernetes.
2
Sergiusz Bazanski7fb4acb2019-07-21 17:02:12 +02003local kube = import "../../../../kube/kube.libsonnet";
Sergiusz Bazanskicb5c3212019-05-19 03:10:17 +02004
5{
6 local factorio = self,
7 local cfg = factorio.cfg,
8
9 cfg:: {
10 namespace: error "namespace must be set",
11 appName: "factorio",
Sergiusz Bazanskiddfd6592019-08-09 18:24:00 +020012 storageClassName: "waw-hdd-redundant-2",
Sergiusz Bazanskicb5c3212019-05-19 03:10:17 +020013 prefix: "", # if set, should be 'foo-'
14
15 rconPort: 2137,
16 rconPassword: "farts",
17
18 tag: "latest",
Serge Bazanski970b7682020-08-04 20:33:17 +020019 image: "registry.k0.hswaw.net/q3k/factorio:" + cfg.tag,
Sergiusz Bazanskicb5c3212019-05-19 03:10:17 +020020 resources: {
21 requests: {
22 cpu: "500m",
23 memory: "500Mi",
24 },
25 limits: {
26 cpu: "1",
27 memory: "1Gi",
28 },
29 },
30 },
31
32
33 makeName(suffix):: cfg.prefix + suffix,
34
35 metadata:: {
36 namespace: cfg.namespace,
37 labels: {
Sergiusz Bazanski6e985c42020-04-01 02:21:45 +020038 "app.kubernetes.io/name": factorio.makeName("factorio"),
Sergiusz Bazanskicb5c3212019-05-19 03:10:17 +020039 "app.kubernetes.io/managed-by": "kubecfg",
40 "app.kubernetes.io/component": "factorio",
41 },
42 },
43
Sergiusz Bazanski083b1762020-01-22 21:48:22 +010044 volumeClaimMods: kube.PersistentVolumeClaim(factorio.makeName("factorio-mods")) {
45 metadata+: factorio.metadata,
46 spec+: {
47 storageClassName: cfg.storageClassName,
48 accessModes: [ "ReadWriteOnce" ],
49 resources: {
50 requests: {
51 storage: "1Gi",
52 },
53 },
54 },
55 },
56
57 volumeClaimData: kube.PersistentVolumeClaim(factorio.makeName("factorio")) {
Sergiusz Bazanskicb5c3212019-05-19 03:10:17 +020058 metadata+: factorio.metadata,
59 spec+: {
60 storageClassName: cfg.storageClassName,
61 accessModes: [ "ReadWriteOnce" ],
62 resources: {
63 requests: {
64 storage: "5Gi",
65 },
66 },
67 },
68 },
Sergiusz Bazanski083b1762020-01-22 21:48:22 +010069
Sergiusz Bazanskicb5c3212019-05-19 03:10:17 +020070 deployment: kube.Deployment(factorio.makeName("factorio")) {
71 metadata+: factorio.metadata,
72 spec+: {
73 replicas: 1,
74 template+: {
75 spec+: {
76 volumes_: {
Sergiusz Bazanski083b1762020-01-22 21:48:22 +010077 data: kube.PersistentVolumeClaimVolume(factorio.volumeClaimData),
78 mods: kube.PersistentVolumeClaimVolume(factorio.volumeClaimMods),
Sergiusz Bazanskicb5c3212019-05-19 03:10:17 +020079 },
80 containers_: {
81 factorio: kube.Container(factorio.makeName("factorio")) {
82 image: cfg.image,
83 args: [
84 "/entrypoint.sh",
85 "--rcon-port", std.toString(cfg.rconPort),
86 "--rcon-password", cfg.rconPassword,
87 ],
88 ports_: {
89 client: { containerPort: 34197 },
90 rcon: { containerPort: cfg.rconPort },
91 },
92 volumeMounts_: {
93 data: { mountPath: "/data" },
Sergiusz Bazanski083b1762020-01-22 21:48:22 +010094 mods: { mountPath: "/factorio/mods" },
Sergiusz Bazanskicb5c3212019-05-19 03:10:17 +020095 },
96 resources: cfg.resources,
97 },
98 },
99 },
100 },
101 },
102 },
103 svc: kube.Service(factorio.makeName("factorio")) {
Sergiusz Bazanski6e985c42020-04-01 02:21:45 +0200104 metadata+: factorio.metadata {
105 // hack - have to keep existing naming scheme otherwise we'd lose addresses
106 labels: {
107 "app.kubernetes.io/name": cfg.appName,
108 },
109 },
Sergiusz Bazanskicb5c3212019-05-19 03:10:17 +0200110 target_pod:: factorio.deployment.spec.template,
111 spec+: {
112 ports: [
113 { name: "client", port: 34197, targetPort: 34197, protocol: "UDP" },
114 ],
115 type: "LoadBalancer",
116 },
117 },
118}