trustgraph/templates/k8s.jsonnet

331 lines
9.7 KiB
Jsonnet
Raw Normal View History

2024-09-05 22:31:36 +01:00
{
container:: function(name)
{
local container = self,
name: name,
limits: {},
reservations: {},
ports: [],
volumes: [],
with_image:: function(x) self + { image: x },
with_command:: function(x) self + { command: x },
with_environment:: function(x) self + { environment: x },
2024-09-06 23:04:07 +01:00
with_limits:: function(c, m) self + { limits: { cpu: c, memory: m } },
2024-09-05 22:31:36 +01:00
with_reservations::
2024-09-06 23:04:07 +01:00
function(c, m) self + { reservations: { cpu: c, memory: m } },
2024-09-05 22:31:36 +01:00
with_volume_mount::
function(vol, mnt)
self + {
volumes: super.volumes + [{
2024-09-05 22:57:01 +01:00
volume: vol, mount: mnt
2024-09-05 22:31:36 +01:00
}]
},
with_port::
function(src, dest, name) self + {
ports: super.ports + [
{ src: src, dest: dest, name : name }
]
},
2024-09-07 12:47:56 +01:00
add:: function() [
2024-09-05 22:31:36 +01:00
2024-09-07 12:47:56 +01:00
{
2024-09-05 22:31:36 +01:00
apiVersion: "apps/v1",
kind: "Deployment",
metadata: {
name: container.name,
namespace: "trustgraph",
labels: {
app: container.name
}
},
spec: {
replicas: 1,
selector: {
matchLabels: {
app: container.name,
}
},
2024-09-06 23:04:07 +01:00
template: {
metadata: {
labels: {
app: container.name,
}
},
spec: {
containers: [
{
name: container.name,
image: container.image,
2024-09-07 12:47:56 +01:00
securityContext: {
// fsGroup: 1234
// runAsUser: 65534
// runAsGroup: 65534
// runAsNonRoot: true
runAsUser: 0,
runAsGroup: 0,
// runAsNonRoot: true,
// readOnlyRootFilesystem: true,
},
2024-09-06 23:04:07 +01:00
resources: {
requests: container.reservations,
limits: container.limits
},
} + (
if std.length(container.ports) > 0 then
{
ports: [
{
hostPort: port.src,
containerPort: port.dest,
}
for port in container.ports
2024-09-05 22:31:36 +01:00
]
2024-09-06 23:04:07 +01:00
} else
{}) +
(if std.objectHas(container, "command") then
{ command: container.command }
else {}) +
(if std.objectHas(container, "environment") then
{ env: [ {
name: e.key, value: e.value
2024-09-05 22:31:36 +01:00
}
2024-09-06 23:04:07 +01:00
for e in
std.objectKeysValues(
container.environment
)
]
}
else {}) +
2024-09-05 22:31:36 +01:00
(if std.length(container.volumes) > 0 then
{
2024-09-06 23:04:07 +01:00
volumeMounts: [
2024-09-05 22:57:01 +01:00
{
mountPath: vol.mount,
name: vol.volume.name,
}
2024-09-05 22:31:36 +01:00
for vol in container.volumes
]
}
2024-09-05 22:57:01 +01:00
else
{}
)
],
volumes: [
vol.volume.volRef()
for vol in container.volumes
]
}
},
2024-09-06 23:04:07 +01:00
} + {}
}
2024-09-05 22:57:01 +01:00
2024-09-07 12:47:56 +01:00
]
2024-09-05 22:31:36 +01:00
},
service:: function(containers)
{
local service = self,
name: containers.name,
2024-09-06 23:04:07 +01:00
ports: [],
with_port::
2024-09-07 15:42:19 +01:00
function(src, dest, name)
self + {
ports: super.ports + [
{ src: src, dest: dest, name: name }
]
},
2024-09-05 22:31:36 +01:00
2024-09-07 12:47:56 +01:00
add:: function() [
{
2024-09-06 23:04:07 +01:00
apiVersion: "v1",
kind: "Service",
metadata: {
name: service.name,
namespace: "trustgraph",
},
spec: {
2024-09-07 15:42:19 +01:00
// type: "NodePort",
2024-09-06 23:04:07 +01:00
selector: {
app: service.name,
},
ports: [
{
port: port.src,
targetPort: port.dest,
2024-09-07 15:42:19 +01:00
// nodePort: port.nodeport,
2024-09-06 23:04:07 +01:00
name: port.name,
}
for port in service.ports
],
}
}
2024-09-07 12:47:56 +01:00
],
2024-09-05 22:31:36 +01:00
},
volume:: function(name)
{
local volume = self,
name: name,
with_size:: function(size) self + { size: size },
2024-09-07 12:47:56 +01:00
add:: function() [
{
2024-09-05 22:57:01 +01:00
apiVersion: "v1",
kind: "PersistentVolume",
metadata: {
name: volume.name,
labels: {
type: "local",
}
},
spec: {
2024-09-07 11:06:20 +01:00
storageClassName: "tg",
2024-09-05 22:57:01 +01:00
capacity: {
storage: volume.size,
},
accessModes: [ "ReadWriteOnce" ],
2024-09-07 12:47:56 +01:00
persistentVolumeReclaimPolicy: "Delete",
2024-09-05 22:57:01 +01:00
hostPath: {
2024-09-06 23:04:07 +01:00
path: "/data/k8s/" + volume.name,
2024-09-05 22:57:01 +01:00
}
}
},
2024-09-07 12:47:56 +01:00
{
2024-09-05 22:57:01 +01:00
apiVersion: "v1",
kind: "PersistentVolumeClaim",
metadata: {
name: volume.name,
2024-09-06 23:04:07 +01:00
namespace: "trustgraph",
2024-09-05 22:57:01 +01:00
},
spec: {
2024-09-07 11:06:20 +01:00
storageClassName: "tg",
2024-09-05 22:57:01 +01:00
accessModes: [ "ReadWriteOnce" ],
resources: {
requests: {
storage: volume.size,
}
},
2024-09-07 11:06:20 +01:00
volumeName: volume.name,
2024-09-05 22:57:01 +01:00
}
}
2024-09-07 12:47:56 +01:00
],
2024-09-05 22:57:01 +01:00
volRef:: function() {
name: volume.name,
2024-09-07 11:06:20 +01:00
persistentVolumeClaim: { claimName: volume.name },
2024-09-05 22:31:36 +01:00
}
},
configVolume:: function(name, dir, parts)
2024-09-05 22:31:36 +01:00
{
local volume = self,
name: name,
with_size:: function(size) self + { size: size },
2024-09-07 12:47:56 +01:00
add:: function() [
{
apiVersion: "v1",
kind: "ConfigMap",
metadata: {
name: volume.name,
namespace: "trustgraph",
},
data: parts
},
2024-09-07 12:47:56 +01:00
],
2024-09-05 22:57:01 +01:00
volRef:: function() {
name: volume.name,
2024-09-07 12:47:56 +01:00
configMap: { name: volume.name },
2024-09-05 22:31:36 +01:00
}
},
2024-09-06 21:43:38 +01:00
secretVolume:: function(name, dir, parts)
{
local volume = self,
name: name,
with_size:: function(size) self + { size: size },
2024-09-07 12:47:56 +01:00
add:: function() [
{
2024-09-06 21:43:38 +01:00
apiVersion: "v1",
kind: "Secret",
metadata: {
name: volume.name,
namespace: "trustgraph",
},
2024-09-06 23:04:07 +01:00
data: {
[item.key]: std.base64(item.value)
for item in std.objectKeysValues(parts)
}
2024-09-06 21:43:38 +01:00
},
2024-09-07 12:47:56 +01:00
],
2024-09-06 21:43:38 +01:00
volRef:: function() {
name: volume.name,
2024-09-07 12:47:56 +01:00
secret: { secretName: volume.name },
2024-09-06 21:43:38 +01:00
}
},
2024-09-05 22:31:36 +01:00
containers:: function(name, containers)
{
local cont = self,
name: name,
containers: containers,
2024-09-07 12:47:56 +01:00
add:: function() std.flattenArrays(
[ c.add() for c in cont.containers ]
2024-09-05 22:31:36 +01:00
),
},
resources:: function(res)
2024-09-06 23:04:07 +01:00
2024-09-07 12:47:56 +01:00
std.flattenArrays(
[ c.add() for c in res ]
2024-09-05 22:31:36 +01:00
),
}