feat: GamingServices | add TFG server

This commit is contained in:
2025-11-23 14:45:06 +05:00
parent 3038ddea26
commit 1bdc20b215
4 changed files with 245 additions and 0 deletions

View File

@@ -0,0 +1,129 @@
import { Construct } from "constructs";
import {
StatefulSetV1,
StatefulSetV1SpecTemplateSpecContainerEnv,
} from "@cdktf/provider-kubernetes/lib/stateful-set-v1";
import { KubernetesProvider } from "@cdktf/provider-kubernetes/lib/provider";
import { ServiceV1 } from "@cdktf/provider-kubernetes/lib/service-v1";
import { IngressRouteTcp, LonghornPvc } from "../../../utils";
export type MinecraftServerOptions = {
provider: KubernetesProvider;
namespace: string;
name: string;
env: StatefulSetV1SpecTemplateSpecContainerEnv[];
image: string;
size?: string;
};
export class MinecraftServer extends Construct {
constructor(scope: Construct, id: string, opts: MinecraftServerOptions) {
super(scope, id);
const { provider, namespace, name, image, env, size = "10Gi" } = opts;
const pvc = new LonghornPvc(this, "pvc", {
provider,
namespace,
name,
size,
});
new ServiceV1(this, "service", {
provider,
metadata: {
name,
namespace,
},
spec: {
selector: {
app: name,
},
port: [
{
port: 25565,
targetPort: name,
},
],
type: "ClusterIP",
},
});
new StatefulSetV1(this, "stateful-set", {
provider,
metadata: {
name,
namespace,
},
spec: {
replicas: "1",
serviceName: name,
selector: {
matchLabels: {
app: name,
},
},
template: {
metadata: {
labels: {
app: name,
},
},
spec: {
nodeSelector: {
nodepool: "worker",
},
volume: [
{
name: `${name}-data`,
persistentVolumeClaim: {
claimName: pvc.name,
},
},
],
container: [
{
name,
image,
env,
port: [
{
name: "minecraft",
containerPort: 25565,
},
],
volumeMount: [
{
name: `${name}-data`,
mountPath: "/data",
},
],
resources: {
requests: {
cpu: "2",
memory: "4Gi",
},
limits: {
cpu: "6",
memory: "12Gi",
},
},
},
],
},
},
},
});
new IngressRouteTcp(this, "ingress", {
provider,
namespace,
name,
serviceName: name,
servicePort: 25565,
entryPoint: `minecraft-${name}`,
match: "HostSNI(`*`)",
});
}
}