[FEATURE] Massively increased loading time

This commit is contained in:
Dunemask 2024-01-15 13:07:13 -07:00
parent b989f6efbe
commit 1a79ea7960
13 changed files with 145 additions and 55 deletions

View file

@ -19,6 +19,28 @@ const namespace = process.env.MCL_SERVER_NAMESPACE;
const loadYaml = (f) => yaml.load(fs.readFileSync(path.resolve(f), "utf8"));
function createBackupSecret(serverSpec) {
if (!serverSpec.backupEnabled) return; // If backup not defined, don't create RCLONE secret
const { mclName, id, backupId, backupKey, backupHost } = serverSpec;
const backupYaml = loadYaml("lib/k8s/configs/backup-secret.yml");
backupYaml.metadata.labels.app = `mcl-${mclName}-app`;
backupYaml.metadata.name = `mcl-${mclName}-backup-secret`;
backupYaml.metadata.namespace = namespace;
backupYaml.metadata.annotations["minecluster.dunemask.net/id"] = id;
const rcloneConfig = [
`[${mclName}-backup]`,
"type = s3",
"provider = Minio",
"env_auth = false",
`access_key_id = ${backupId}`,
`secret_access_key = ${backupKey}`,
`endpoint = ${backupHost}`,
`acl = private`,
].join("\n");
backupYaml.data["rclone.conf"] = Buffer.from(rcloneConfig).toString("base64");
return backupYaml;
}
function createRconSecret(serverSpec) {
const { mclName, id } = serverSpec;
const rconYaml = loadYaml("lib/k8s/configs/rcon-secret.yml");
@ -39,12 +61,12 @@ function createServerVolume(serverSpec) {
volumeYaml.metadata.name = `mcl-${mclName}-volume`;
volumeYaml.metadata.namespace = namespace;
volumeYaml.metadata.annotations["minecluster.dunemask.net/id"] = id;
volumeYaml.spec.resources.requests.storage = "1Gi"; // TODO: Changeme
volumeYaml.spec.resources.requests.storage = "5Gi"; // TODO: Changeme
return volumeYaml;
}
function createServerDeploy(serverSpec) {
const { mclName, id } = serverSpec;
const { mclName, id, backupEnabled } = serverSpec;
const deployYaml = loadYaml("lib/k8s/configs/server-deployment.yml");
const { metadata } = deployYaml;
const serverContainer = getServerContainer(serverSpec);
@ -57,6 +79,8 @@ function createServerDeploy(serverSpec) {
metadata.annotations["minecluster.dunemask.net/id"] = id;
deployYaml.metadata = metadata;
deployYaml.spec.template.spec.terminationGracePeriodSeconds = 1;
// Configure Lables & Selectors
deployYaml.spec.selector.matchLabels.app = `mcl-${mclName}-app`;
deployYaml.spec.template.metadata.labels.app = `mcl-${mclName}-app`;
@ -68,6 +92,18 @@ function createServerDeploy(serverSpec) {
({ name }) => name === "datadir",
).persistentVolumeClaim.claimName = `mcl-${mclName}-volume`;
// Backups
if (backupEnabled) {
deployYaml.spec.template.spec.volumes.push({
name: "rclone-config",
secret: {
defaultMode: 420,
items: [{ key: "rclone.conf", path: "rclone.conf" }],
secretName: `mcl-${mclName}-backup-secret`,
},
});
}
// Apply Containers TODO: User control for autostart
// deployYaml.spec.template.spec.containers.push(serverContainer);
deployYaml.spec.template.spec.containers.push(ftpContainer);
@ -119,12 +155,14 @@ function createRconService(createSpec) {
}
export default async function createServerResources(createSpec) {
const backupSecret = createBackupSecret(createSpec);
const rconSecret = createRconSecret(createSpec);
const serverVolume = createServerVolume(createSpec);
const serverDeploy = createServerDeploy(createSpec);
const serverService = createServerService(createSpec);
const rconService = createRconService(createSpec);
k8sCore.createNamespacedPersistentVolumeClaim(namespace, serverVolume);
if (!!backupSecret) k8sCore.createNamespacedSecret(namespace, backupSecret);
k8sCore.createNamespacedSecret(namespace, rconSecret);
k8sCore.createNamespacedService(namespace, serverService);
k8sCore.createNamespacedService(namespace, rconService);