alasio 7.0.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/src/api-server.js +18 -0
- package/dist/cli/src/api-server.js.map +1 -0
- package/dist/cli/src/branches.js +123 -46
- package/dist/cli/src/branches.js.map +1 -1
- package/dist/cli/src/cluster/docker.js +25 -10
- package/dist/cli/src/cluster/docker.js.map +1 -1
- package/dist/cli/src/cluster/host.js +33 -7
- package/dist/cli/src/cluster/host.js.map +1 -1
- package/dist/cli/src/cluster/k3s.js +51 -12
- package/dist/cli/src/cluster/k3s.js.map +1 -1
- package/dist/cli/src/cluster/node.js +115 -33
- package/dist/cli/src/cluster/node.js.map +1 -1
- package/dist/cli/src/cluster/stargz.js +55 -0
- package/dist/cli/src/cluster/stargz.js.map +1 -0
- package/dist/cli/src/commands/branch.js +5 -4
- package/dist/cli/src/commands/branch.js.map +1 -1
- package/dist/cli/src/commands/common.js +9 -3
- package/dist/cli/src/commands/common.js.map +1 -1
- package/dist/cli/src/commands/folder.js +14 -0
- package/dist/cli/src/commands/folder.js.map +1 -0
- package/dist/cli/src/commands/init.js +54 -4
- package/dist/cli/src/commands/init.js.map +1 -1
- package/dist/cli/src/commands/lake.js +40 -6
- package/dist/cli/src/commands/lake.js.map +1 -1
- package/dist/cli/src/commands/restore-filer-store.js +40 -8
- package/dist/cli/src/commands/restore-filer-store.js.map +1 -1
- package/dist/cli/src/commands/status.js +216 -20
- package/dist/cli/src/commands/status.js.map +1 -1
- package/dist/cli/src/commands/uninstall.js +8 -9
- package/dist/cli/src/commands/uninstall.js.map +1 -1
- package/dist/cli/src/commands/up.js +11 -3
- package/dist/cli/src/commands/up.js.map +1 -1
- package/dist/cli/src/commands/upgrade.js +1 -1
- package/dist/cli/src/commands/upgrade.js.map +1 -1
- package/dist/cli/src/commands.js +2 -1
- package/dist/cli/src/commands.js.map +1 -1
- package/dist/cli/src/config.js +24 -9
- package/dist/cli/src/config.js.map +1 -1
- package/dist/cli/src/cpu-baseline.js +8 -4
- package/dist/cli/src/cpu-baseline.js.map +1 -1
- package/dist/cli/src/folders.js +67 -0
- package/dist/cli/src/folders.js.map +1 -0
- package/dist/cli/src/gateway-calls.js +58 -0
- package/dist/cli/src/gateway-calls.js.map +1 -0
- package/dist/cli/src/install.js +119 -17
- package/dist/cli/src/install.js.map +1 -1
- package/dist/cli/src/kept-releases.js +27 -20
- package/dist/cli/src/kept-releases.js.map +1 -1
- package/dist/cli/src/kube/api.js +11 -5
- package/dist/cli/src/kube/api.js.map +1 -1
- package/dist/cli/src/kube/apply.js +16 -73
- package/dist/cli/src/kube/apply.js.map +1 -1
- package/dist/cli/src/kube/rollout.js +84 -26
- package/dist/cli/src/kube/rollout.js.map +1 -1
- package/dist/cli/src/lake.js +124 -0
- package/dist/cli/src/lake.js.map +1 -0
- package/dist/cli/src/manifests/admission.js +381 -223
- package/dist/cli/src/manifests/admission.js.map +1 -1
- package/dist/cli/src/manifests/alasio.js +79 -362
- package/dist/cli/src/manifests/alasio.js.map +1 -1
- package/dist/cli/src/manifests/branch.js +10 -26
- package/dist/cli/src/manifests/branch.js.map +1 -1
- package/dist/cli/src/manifests/collector.js +250 -135
- package/dist/cli/src/manifests/collector.js.map +1 -1
- package/dist/cli/src/manifests/common.js +32 -2
- package/dist/cli/src/manifests/common.js.map +1 -1
- package/dist/cli/src/manifests/config.js +256 -92
- package/dist/cli/src/manifests/config.js.map +1 -1
- package/dist/cli/src/manifests/disruption.js +10 -0
- package/dist/cli/src/manifests/disruption.js.map +1 -1
- package/dist/cli/src/manifests/folders.js +128 -0
- package/dist/cli/src/manifests/folders.js.map +1 -0
- package/dist/cli/src/manifests/grafana.js +4 -2
- package/dist/cli/src/manifests/grafana.js.map +1 -1
- package/dist/cli/src/manifests/index.js +15 -8
- package/dist/cli/src/manifests/index.js.map +1 -1
- package/dist/cli/src/manifests/keda.js +2 -1
- package/dist/cli/src/manifests/keda.js.map +1 -1
- package/dist/cli/src/manifests/lake.js +350 -73
- package/dist/cli/src/manifests/lake.js.map +1 -1
- package/dist/cli/src/manifests/log.js +316 -0
- package/dist/cli/src/manifests/log.js.map +1 -0
- package/dist/cli/src/manifests/neon.js +128 -49
- package/dist/cli/src/manifests/neon.js.map +1 -1
- package/dist/cli/src/manifests/network-policies.js +263 -100
- package/dist/cli/src/manifests/network-policies.js.map +1 -1
- package/dist/cli/src/manifests/node-agent.js +24 -8
- package/dist/cli/src/manifests/node-agent.js.map +1 -1
- package/dist/cli/src/manifests/object-store.js +4 -2
- package/dist/cli/src/manifests/object-store.js.map +1 -1
- package/dist/cli/src/manifests/sandbox-gateway.js +663 -0
- package/dist/cli/src/manifests/sandbox-gateway.js.map +1 -0
- package/dist/cli/src/manifests/scalers.js +16 -5
- package/dist/cli/src/manifests/scalers.js.map +1 -1
- package/dist/cli/src/manifests/sizing.js +16 -8
- package/dist/cli/src/manifests/sizing.js.map +1 -1
- package/dist/cli/src/manifests/valkey.js +11 -5
- package/dist/cli/src/manifests/valkey.js.map +1 -1
- package/dist/cli/src/manifests/vpa.js +3 -1
- package/dist/cli/src/manifests/vpa.js.map +1 -1
- package/dist/cli/src/manifests/webhook.js +102 -0
- package/dist/cli/src/manifests/webhook.js.map +1 -0
- package/dist/cli/src/manifests/workspace-storage.js +174 -89
- package/dist/cli/src/manifests/workspace-storage.js.map +1 -1
- package/dist/cli/src/neon-storage.js +155 -0
- package/dist/cli/src/neon-storage.js.map +1 -0
- package/dist/cli/src/release.js +9 -6
- package/dist/cli/src/release.js.map +1 -1
- package/dist/cli/src/secrets.js +45 -4
- package/dist/cli/src/secrets.js.map +1 -1
- package/dist/cli/src/target.js +1 -1
- package/dist/cli/src/target.js.map +1 -1
- package/dist/cli/src/telegram.js +56 -10
- package/dist/cli/src/telegram.js.map +1 -1
- package/dist/cli/src/webhook.js +182 -0
- package/dist/cli/src/webhook.js.map +1 -0
- package/dist/cluster/node/pins.json +12 -2
- package/dist/neon/control/branches.js +126 -21
- package/dist/neon/control/branches.js.map +1 -1
- package/dist/neon/control/endpoints.js +9 -0
- package/dist/neon/control/endpoints.js.map +1 -1
- package/dist/neon/control/jwt.js +16 -3
- package/dist/neon/control/jwt.js.map +1 -1
- package/dist/neon/control/secrets.js +51 -7
- package/dist/neon/control/secrets.js.map +1 -1
- package/dist/src/binder/names.js +33 -0
- package/dist/src/binder/names.js.map +1 -0
- package/dist/src/binder/tokens.js +58 -0
- package/dist/src/binder/tokens.js.map +1 -0
- package/dist/src/branch/names.js +12 -2
- package/dist/src/branch/names.js.map +1 -1
- package/dist/src/events/names.js +7 -0
- package/dist/src/events/names.js.map +1 -0
- package/dist/src/gateway/names.js +201 -0
- package/dist/src/gateway/names.js.map +1 -0
- package/dist/src/harness/names.js +49 -0
- package/dist/src/harness/names.js.map +1 -0
- package/dist/src/kube/sandbox-shape.js +19 -69
- package/dist/src/kube/sandbox-shape.js.map +1 -1
- package/dist/src/node-agent/names.js +118 -2
- package/dist/src/node-agent/names.js.map +1 -1
- package/dist/src/sandbox/names.js +12 -20
- package/dist/src/sandbox/names.js.map +1 -1
- package/dist/src/sandbox/otlp-resource.js +173 -0
- package/dist/src/sandbox/otlp-resource.js.map +1 -0
- package/dist/src/sandbox/telemetry.js +43 -0
- package/dist/src/sandbox/telemetry.js.map +1 -0
- package/dist/src/telegram/deliveries.js +40 -0
- package/dist/src/telegram/deliveries.js.map +1 -0
- package/dist/src/telemetry/config.js +131 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/forward.js +154 -0
- package/dist/src/telemetry/forward.js.map +1 -0
- package/package.json +1 -1
- package/dist/cli/src/manifests/agent-sandbox.js +0 -92
- package/dist/cli/src/manifests/agent-sandbox.js.map +0 -1
- package/dist/cli/src/manifests/juicefs-csi.js +0 -319
- package/dist/cli/src/manifests/juicefs-csi.js.map +0 -1
- package/dist/cli/src/manifests/sandboxes.agents.x-k8s.io.json +0 -6295
- package/dist/src/kube/config.js +0 -143
- package/dist/src/kube/config.js.map +0 -1
|
@@ -1,37 +1,47 @@
|
|
|
1
|
-
import { computeId, MAIN } from "../../../neon/control/branches.js";
|
|
1
|
+
import { computeId, MAIN, replicaId } from "../../../neon/control/branches.js";
|
|
2
|
+
import { memoryBytes } from "../capacity.js";
|
|
2
3
|
import { imageReference } from "../images.js";
|
|
3
|
-
import {
|
|
4
|
+
import { environmentName, INTAKE_GROUP, lakeWakeTopic, LOG_BROKERS, loaderGroup, loaderLogSecret, logPrincipalSecret, retentionMs, TELEMETRY_TOPICS } from "./log.js";
|
|
5
|
+
import { componentName, lakeRuns, MAIN_ENVIRONMENT, NAMESPACE, neonName, otelEnv, replicasOf, restrictedContainer, s3Endpoint, selectorLabels, sleeps, stackLabels, stackPodSpec, } from "./common.js";
|
|
6
|
+
import { replicaBudget, spread } from "./disruption.js";
|
|
4
7
|
import { PROXY_HOST, PROXY_PORT } from "./neon.js";
|
|
8
|
+
import { FILER, MASTER } from "./object-store.js";
|
|
5
9
|
import { priority } from "./priorities.js";
|
|
10
|
+
import { scaledObject } from "./scalers.js";
|
|
6
11
|
import { verticalPodAutoscaler } from "./sizing.js";
|
|
7
|
-
/** The port its
|
|
8
|
-
export const LAKE_INTAKE_PORT = 4318;
|
|
9
|
-
/** The port its query endpoint takes queries on. */
|
|
12
|
+
/** The port its readers take queries on. */
|
|
10
13
|
export const LAKE_QUERY_PORT = 8090;
|
|
14
|
+
/** The port the loader and the intake serve their health and metrics on. */
|
|
15
|
+
export const LAKE_METRICS_PORT = 9464;
|
|
16
|
+
/** Its components: the loader's, the readers', maintenance's and the intake's, each its Deployment's or CronJobs' name's end. */
|
|
17
|
+
export const LOADER_COMPONENT = "lake-loader";
|
|
18
|
+
export const QUERY_COMPONENT = "lake-query";
|
|
19
|
+
export const MAINTENANCE_COMPONENT = "lake-maintenance";
|
|
20
|
+
/** The reconciliation's, apart from maintenance's, as the bundled object store's filer, masters and volume servers admit it alone of the lake (./network-policies.ts). */
|
|
21
|
+
export const RECONCILE_COMPONENT = "lake-reconcile";
|
|
22
|
+
export const INTAKE_COMPONENT = "lake-intake";
|
|
23
|
+
/** When the telemetry's files are merged: hourly, away from the hour's other passes. */
|
|
24
|
+
const MERGE_SCHEDULE = "47 * * * *";
|
|
11
25
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* beside them, and maintains none of: main's maintenance keeps every file while Neon has
|
|
15
|
-
* branches, which it asks neon-control about (neon/lake/src/sync.ts). A branch's has no
|
|
16
|
-
* query endpoint, as it has no Grafana: what it sends is read in main's lake, tagged.
|
|
26
|
+
* How many queries each reader may have taken and not answered before KEDA gives the pool
|
|
27
|
+
* another: one running and one waiting, as a dashboard opened asks a few at once.
|
|
17
28
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
// Its environment's compute, through Neon's proxy, which wakes it if it sleeps.
|
|
29
|
+
const QUERIES_PER_READER = 2;
|
|
30
|
+
/**
|
|
31
|
+
* How long a reader has to stop: its drain, which waits for the queries under way in it for
|
|
32
|
+
* DRAIN_WITHIN_MS at most (neon/lake/src/drain.ts, 75 s), then its endpoint's stop.
|
|
33
|
+
*/
|
|
34
|
+
export const LAKE_QUERY_STOP_SECONDS = 90;
|
|
35
|
+
/**
|
|
36
|
+
* How far behind the intake's group may be on each partition, in records, before KEDA
|
|
37
|
+
* gives it another replica: half of what a replica writes in a batch at most
|
|
38
|
+
* (neon/lake/src/intake.ts's BATCH), a backlog, as after an outage, rather than
|
|
39
|
+
* the stack's ordinary minutes, which are some tens of records.
|
|
40
|
+
*/
|
|
41
|
+
const LAG_THRESHOLD = 1_000;
|
|
42
|
+
/** Where the lake is, which each of its components opens it at: its environment's compute, through Neon's proxy, which wakes it if it sleeps. */
|
|
43
|
+
function lakeEnv(config, environment = MAIN_ENVIRONMENT) {
|
|
44
|
+
return [
|
|
35
45
|
{ name: "LAKE_DATABASE_HOST", value: PROXY_HOST },
|
|
36
46
|
{ name: "LAKE_DATABASE_PORT", value: String(PROXY_PORT) },
|
|
37
47
|
{ name: "LAKE_DATABASE_ENDPOINT", value: computeId(environment.branch ?? MAIN) },
|
|
@@ -39,74 +49,341 @@ export function lakeObjects(config, environment = MAIN_ENVIRONMENT) {
|
|
|
39
49
|
{ name: "LAKE_S3_ENDPOINT", value: s3Endpoint(config) },
|
|
40
50
|
{ name: "HOME", value: "/tmp" },
|
|
41
51
|
];
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
],
|
|
57
|
-
ports: [{ name: "query", containerPort: LAKE_QUERY_PORT }],
|
|
58
|
-
// It serves whether or not the lake can be read, so the intake beside it is not held back.
|
|
59
|
-
readinessProbe: { httpGet: { path: "/healthz", port: "query" }, periodSeconds: 10 },
|
|
60
|
-
livenessProbe: { httpGet: { path: "/healthz", port: "query" }, periodSeconds: 30, failureThreshold: 3 },
|
|
61
|
-
securityContext: { ...restrictedContainer(), readOnlyRootFilesystem: true },
|
|
62
|
-
resources: config.lake.query.resources,
|
|
63
|
-
volumeMounts: [{ name: "query-tmp", mountPath: "/tmp" }],
|
|
52
|
+
}
|
|
53
|
+
/** `variable` of the Secret `secret`'s key `key`. */
|
|
54
|
+
const fromSecret = (variable, secret, key) => ({ name: variable, valueFrom: { secretKeyRef: { name: secret, key } } });
|
|
55
|
+
/** The lake's writers' credentials, from its Secret: its role's password, and the object store's identity of the lake's. */
|
|
56
|
+
const writerSecrets = () => ["LAKE_DATABASE_PASSWORD", "LAKE_S3_KEY", "LAKE_S3_SECRET"].map((variable) => fromSecret(variable, componentName("lake"), variable));
|
|
57
|
+
/** A probe of `path` on the metrics port. */
|
|
58
|
+
const probe = (path) => ({ httpGet: { path, port: "metrics" } });
|
|
59
|
+
/** KEDA's reading of the log as the `scaler` principal, which may describe the groups and topics it scales on and read none, in `namespace`, the Secret's copy there. */
|
|
60
|
+
function logAuthentication(name, namespace, component) {
|
|
61
|
+
const scaler = logPrincipalSecret("scaler");
|
|
62
|
+
return {
|
|
63
|
+
apiVersion: "keda.sh/v1alpha1",
|
|
64
|
+
kind: "TriggerAuthentication",
|
|
65
|
+
metadata: { name, namespace, labels: stackLabels(component) },
|
|
66
|
+
spec: { secretTargetRef: ["sasl", "username", "password"].map((parameter) => ({ parameter, name: scaler, key: parameter })) },
|
|
64
67
|
};
|
|
65
|
-
|
|
66
|
-
|
|
68
|
+
}
|
|
69
|
+
/** A trigger of how far `group` is behind on `topic`, past `threshold` records a partition, authenticated as `authentication` says. */
|
|
70
|
+
const lagTrigger = (group, topic, threshold, authentication) => ({
|
|
71
|
+
type: "kafka",
|
|
72
|
+
metadata: { bootstrapServers: LOG_BROKERS, consumerGroup: group, topic, lagThreshold: String(threshold), activationLagThreshold: "0", offsetResetPolicy: "earliest" },
|
|
73
|
+
authenticationRef: { name: authentication },
|
|
74
|
+
});
|
|
75
|
+
/**
|
|
76
|
+
* The loader of `environment`: woken by KEDA once its group is behind on the environment's
|
|
77
|
+
* wake topic at all, and back to none once it has caught up. A group that never committed
|
|
78
|
+
* is as far behind as the topic is long, so the first record wakes it.
|
|
79
|
+
*/
|
|
80
|
+
function loaderObjects(config, environment) {
|
|
81
|
+
const name = componentName(LOADER_COMPONENT);
|
|
82
|
+
const { namespace } = environment;
|
|
83
|
+
const topic = lakeWakeTopic(environmentName(environment));
|
|
84
|
+
const group = loaderGroup(environmentName(environment));
|
|
85
|
+
const log = loaderLogSecret(environment);
|
|
86
|
+
const { scaling, resources } = config.lake.loader;
|
|
67
87
|
const deployment = {
|
|
68
88
|
apiVersion: "apps/v1",
|
|
69
89
|
kind: "Deployment",
|
|
70
|
-
metadata: { name, namespace
|
|
90
|
+
metadata: { name, namespace, labels: stackLabels(LOADER_COMPONENT) },
|
|
71
91
|
spec: {
|
|
72
|
-
...replicasOf(
|
|
92
|
+
...replicasOf(scaling),
|
|
73
93
|
// One loader: two would race each other's loads.
|
|
74
94
|
strategy: { type: "Recreate" },
|
|
75
|
-
selector: { matchLabels: selectorLabels(
|
|
95
|
+
selector: { matchLabels: selectorLabels(LOADER_COMPONENT) },
|
|
76
96
|
template: {
|
|
77
|
-
metadata: { labels: stackLabels(
|
|
97
|
+
metadata: { labels: stackLabels(LOADER_COMPONENT) },
|
|
78
98
|
spec: {
|
|
79
|
-
|
|
80
|
-
...priority(main ? "floor" : "component"),
|
|
99
|
+
...priority("component"),
|
|
81
100
|
...stackPodSpec(config),
|
|
101
|
+
// A load under way finishes; its records, untold, are read again.
|
|
82
102
|
terminationGracePeriodSeconds: 60,
|
|
83
|
-
containers: [
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
image,
|
|
103
|
+
containers: [{
|
|
104
|
+
name: "loader",
|
|
105
|
+
image: imageReference(config.images.lake),
|
|
87
106
|
imagePullPolicy: config.images.pullPolicy,
|
|
88
107
|
env: [
|
|
89
|
-
...lakeEnv,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
108
|
+
...lakeEnv(config, environment),
|
|
109
|
+
...writerSecrets(),
|
|
110
|
+
sourceEnv(environment),
|
|
111
|
+
{ name: "LOG_BROKERS", value: LOG_BROKERS },
|
|
112
|
+
fromSecret("LOG_USERNAME", log, "username"),
|
|
113
|
+
fromSecret("LOG_PASSWORD", log, "password"),
|
|
114
|
+
{ name: "LAKE_WAKE_TOPIC", value: topic },
|
|
115
|
+
{ name: "LAKE_WAKE_GROUP", value: group },
|
|
93
116
|
...otelEnv(config, environment),
|
|
117
|
+
{ name: "OTEL_SERVICE_NAME", value: "alasio-lake-loader" },
|
|
94
118
|
],
|
|
95
|
-
|
|
96
|
-
|
|
119
|
+
ports: [{ name: "metrics", containerPort: LAKE_METRICS_PORT }],
|
|
120
|
+
// Live while its loads are not failing for long; ready once it has the lake open, under its lock, and its member of the group.
|
|
97
121
|
readinessProbe: { ...probe("/readyz"), periodSeconds: 10 },
|
|
98
122
|
livenessProbe: { ...probe("/healthz"), initialDelaySeconds: 60, periodSeconds: 30, failureThreshold: 3 },
|
|
99
123
|
securityContext: { ...restrictedContainer(), readOnlyRootFilesystem: true },
|
|
100
|
-
resources
|
|
124
|
+
resources,
|
|
101
125
|
volumeMounts: [{ name: "tmp", mountPath: "/tmp" }],
|
|
102
|
-
},
|
|
103
|
-
|
|
104
|
-
],
|
|
105
|
-
volumes: [{ name: "tmp", emptyDir: { sizeLimit: "4Gi" } }, ...(main ? [{ name: "query-tmp", emptyDir: { sizeLimit: "2Gi" } }] : [])],
|
|
126
|
+
}],
|
|
127
|
+
volumes: [{ name: "tmp", emptyDir: { sizeLimit: "4Gi" } }],
|
|
106
128
|
},
|
|
107
129
|
},
|
|
108
130
|
},
|
|
109
131
|
};
|
|
110
|
-
|
|
132
|
+
const scaledObjects = scaledObject(deployment, scaling, [lagTrigger(group, topic, 1, name)]);
|
|
133
|
+
return [
|
|
134
|
+
deployment,
|
|
135
|
+
...(scaledObjects.length > 0 ? [logAuthentication(name, namespace, LOADER_COMPONENT), ...scaledObjects] : []),
|
|
136
|
+
verticalPodAutoscaler(deployment, "InPlace", sleeps(scaling) ? ["memory"] : undefined),
|
|
137
|
+
];
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Where `environment`'s alasio's database is read from, which its loader and its
|
|
141
|
+
* reconciliation load from: its read replica, which takes nothing of what alasio's own
|
|
142
|
+
* compute serves alasio.
|
|
143
|
+
*/
|
|
144
|
+
const sourceEnv = (environment) => ({ name: "LAKE_SOURCE_ENDPOINT", value: replicaId(environment.branch ?? MAIN) });
|
|
145
|
+
/**
|
|
146
|
+
* What DuckDB is let hold in a container whose memory limit is `limit`: three fifths of it,
|
|
147
|
+
* the rest Node's and the Parquet reader's, which DuckDB's own limit does not count; its
|
|
148
|
+
* own default, where the container has none.
|
|
149
|
+
*/
|
|
150
|
+
const duckdbMemory = (limit) => limit ? [{ name: "LAKE_MEMORY_LIMIT", value: `${Math.floor((memoryBytes(limit) * 3) / 5 / 2 ** 20)}MiB` }] : [];
|
|
151
|
+
/**
|
|
152
|
+
* A pass of maintenance's (neon/lake/src/maintain.ts) on `environment`'s lake: its
|
|
153
|
+
* container, given `env` beside where the lake is and its writer's credentials, and its pod
|
|
154
|
+
* template, as a Job of the pass runs it.
|
|
155
|
+
*/
|
|
156
|
+
function passTemplate(config, environment, pass, env) {
|
|
157
|
+
return {
|
|
158
|
+
backoffLimit: 2,
|
|
159
|
+
activeDeadlineSeconds: 3600,
|
|
160
|
+
template: {
|
|
161
|
+
metadata: { labels: stackLabels(pass === "reconcile" ? RECONCILE_COMPONENT : MAINTENANCE_COMPONENT) },
|
|
162
|
+
spec: {
|
|
163
|
+
restartPolicy: "Never",
|
|
164
|
+
...priority("component"),
|
|
165
|
+
...stackPodSpec(config),
|
|
166
|
+
containers: [{
|
|
167
|
+
name: "maintenance",
|
|
168
|
+
image: imageReference(config.images.lake),
|
|
169
|
+
imagePullPolicy: config.images.pullPolicy,
|
|
170
|
+
command: ["node", "src/maintain.ts", pass],
|
|
171
|
+
env: [
|
|
172
|
+
...lakeEnv(config, environment),
|
|
173
|
+
...writerSecrets(),
|
|
174
|
+
...duckdbMemory(config.lake.maintenance.resources.limits?.["memory"]),
|
|
175
|
+
...env,
|
|
176
|
+
...otelEnv(config, environment),
|
|
177
|
+
{ name: "OTEL_SERVICE_NAME", value: "alasio-lake-maintenance" },
|
|
178
|
+
],
|
|
179
|
+
securityContext: { ...restrictedContainer(), readOnlyRootFilesystem: true },
|
|
180
|
+
resources: config.lake.maintenance.resources,
|
|
181
|
+
volumeMounts: [{ name: "tmp", mountPath: "/tmp" }],
|
|
182
|
+
}],
|
|
183
|
+
volumes: [{ name: "tmp", emptyDir: { sizeLimit: "4Gi" } }],
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/** Main's maintenance: a CronJob of each of its passes, its daily one on `schedule`, the merge hourly. */
|
|
189
|
+
function maintenanceObjects(config) {
|
|
190
|
+
const cronJob = (pass, schedule) => ({
|
|
191
|
+
apiVersion: "batch/v1",
|
|
192
|
+
kind: "CronJob",
|
|
193
|
+
metadata: { name: componentName(pass === "merge" ? "lake-merge" : MAINTENANCE_COMPONENT), namespace: NAMESPACE, labels: stackLabels(MAINTENANCE_COMPONENT) },
|
|
194
|
+
spec: {
|
|
195
|
+
schedule,
|
|
196
|
+
// A pass waits for the one before it; one missed by more than an hour waits for the next.
|
|
197
|
+
concurrencyPolicy: "Forbid",
|
|
198
|
+
startingDeadlineSeconds: 3600,
|
|
199
|
+
successfulJobsHistoryLimit: 1,
|
|
200
|
+
failedJobsHistoryLimit: 3,
|
|
201
|
+
jobTemplate: {
|
|
202
|
+
spec: passTemplate(config, MAIN_ENVIRONMENT, pass, [
|
|
203
|
+
{ name: "LAKE_RETENTION_DAYS", value: String(config.telemetry.retentionDays) },
|
|
204
|
+
// It keeps its files while Neon has branches, whose lakes read them.
|
|
205
|
+
{ name: "LAKE_BRANCHES_URL", value: `http://${neonName("control")}:8080/branches` },
|
|
206
|
+
fromSecret("LAKE_BRANCHES_TOKEN", componentName("lake"), "LAKE_BRANCHES_TOKEN"),
|
|
207
|
+
]),
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
return [cronJob("maintain", config.lake.maintenance.schedule), cronJob("merge", MERGE_SCHEDULE)];
|
|
212
|
+
}
|
|
213
|
+
/** The Job of a lake's reconciliation, in its environment's namespace. */
|
|
214
|
+
export const LAKE_RECONCILE = componentName("lake-reconcile");
|
|
215
|
+
/**
|
|
216
|
+
* The reconciliation of `environment`'s lake, main's or a branch environment's, each with a
|
|
217
|
+
* catalog of its own: a Job of maintenance's reconcile pass, which sets its catalog right with
|
|
218
|
+
* the object store where files it names are gone, and loads again from its alasio's database
|
|
219
|
+
* what its transcripts lost (neon/lake/src/reconcile.ts). It is run on demand alone, by alasio
|
|
220
|
+
* lake reconcile and by alasio restore-filer-store, as a pass that changes the catalog
|
|
221
|
+
* on its own would hide a loss a person is to look into.
|
|
222
|
+
*/
|
|
223
|
+
export function lakeReconcile(config, environment = MAIN_ENVIRONMENT) {
|
|
224
|
+
return {
|
|
225
|
+
apiVersion: "batch/v1",
|
|
226
|
+
kind: "Job",
|
|
227
|
+
metadata: { name: LAKE_RECONCILE, namespace: environment.namespace, labels: stackLabels(RECONCILE_COMPONENT) },
|
|
228
|
+
spec: {
|
|
229
|
+
...passTemplate(config, environment, "reconcile", [
|
|
230
|
+
sourceEnv(environment),
|
|
231
|
+
// A branch environment's lake's telemetry is main's as of its branch point, which main's reads again.
|
|
232
|
+
...(environment.branch === null ? [] : [{ name: "LAKE_BRANCH", value: environment.branch }]),
|
|
233
|
+
// The bundled store's parts, which say whether a file the store fails a read of is gone.
|
|
234
|
+
...(config.objectStore.bundled.enabled
|
|
235
|
+
? [
|
|
236
|
+
{ name: "LAKE_STORE_FILER_URL", value: `http://${FILER}.${NAMESPACE}.svc:8888` },
|
|
237
|
+
{ name: "LAKE_STORE_MASTER_URL", value: `http://${MASTER}.${NAMESPACE}.svc:9333` },
|
|
238
|
+
// Every one of which the masters are to know before their not knowing a volume says it is gone.
|
|
239
|
+
{ name: "LAKE_STORE_VOLUME_SERVERS", value: String(config.objectStore.bundled.volumeServers.scaling.min) },
|
|
240
|
+
]
|
|
241
|
+
: []),
|
|
242
|
+
]),
|
|
243
|
+
backoffLimit: 0,
|
|
244
|
+
},
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/** Main's readers, their Service, which keeps the lake's name, and the headless one each finds the others by. */
|
|
248
|
+
function queryObjects(config) {
|
|
249
|
+
const name = componentName(QUERY_COMPONENT);
|
|
250
|
+
const { scaling, resources } = config.lake.query;
|
|
251
|
+
const peers = `${name}-peers`;
|
|
252
|
+
const service = {
|
|
253
|
+
apiVersion: "v1",
|
|
254
|
+
kind: "Service",
|
|
255
|
+
metadata: { name: componentName("lake"), namespace: NAMESPACE, labels: stackLabels(QUERY_COMPONENT) },
|
|
256
|
+
spec: { selector: selectorLabels(QUERY_COMPONENT), ports: [{ name: "query", port: LAKE_QUERY_PORT }] },
|
|
257
|
+
};
|
|
258
|
+
// Ready readers alone, each by its address: the pool /pool sums the queues of.
|
|
259
|
+
const headless = {
|
|
260
|
+
apiVersion: "v1",
|
|
261
|
+
kind: "Service",
|
|
262
|
+
metadata: { name: peers, namespace: NAMESPACE, labels: stackLabels(QUERY_COMPONENT) },
|
|
263
|
+
spec: { clusterIP: "None", selector: selectorLabels(QUERY_COMPONENT), ports: [{ name: "query", port: LAKE_QUERY_PORT }] },
|
|
264
|
+
};
|
|
265
|
+
const deployment = {
|
|
266
|
+
apiVersion: "apps/v1",
|
|
267
|
+
kind: "Deployment",
|
|
268
|
+
metadata: { name, namespace: NAMESPACE, labels: stackLabels(QUERY_COMPONENT) },
|
|
269
|
+
spec: {
|
|
270
|
+
...replicasOf(scaling),
|
|
271
|
+
selector: { matchLabels: selectorLabels(QUERY_COMPONENT) },
|
|
272
|
+
template: {
|
|
273
|
+
metadata: { labels: stackLabels(QUERY_COMPONENT) },
|
|
274
|
+
spec: {
|
|
275
|
+
// They serve Grafana's alerts, which never sleep.
|
|
276
|
+
...priority("floor"),
|
|
277
|
+
...stackPodSpec(config),
|
|
278
|
+
...spread(QUERY_COMPONENT, scaling),
|
|
279
|
+
terminationGracePeriodSeconds: LAKE_QUERY_STOP_SECONDS,
|
|
280
|
+
containers: [{
|
|
281
|
+
name: "query",
|
|
282
|
+
image: imageReference(config.images.lake),
|
|
283
|
+
imagePullPolicy: config.images.pullPolicy,
|
|
284
|
+
command: ["node", "src/endpoint.ts"],
|
|
285
|
+
env: [
|
|
286
|
+
...lakeEnv(config),
|
|
287
|
+
...["LAKE_READER_PASSWORD", "LAKE_READER_S3_KEY", "LAKE_READER_S3_SECRET", "LAKE_QUERY_TOKEN"].map((variable) => fromSecret(variable, componentName("lake"), variable)),
|
|
288
|
+
{ name: "LAKE_QUERY_PORT", value: String(LAKE_QUERY_PORT) },
|
|
289
|
+
{ name: "LAKE_QUERY_PEERS", value: `${peers}.${NAMESPACE}.svc.cluster.local` },
|
|
290
|
+
...otelEnv(config),
|
|
291
|
+
{ name: "OTEL_SERVICE_NAME", value: "alasio-lake-query" },
|
|
292
|
+
],
|
|
293
|
+
ports: [{ name: "query", containerPort: LAKE_QUERY_PORT }],
|
|
294
|
+
// Ready once it has the lake open, so its Service sends no query to one that cannot read it.
|
|
295
|
+
readinessProbe: { httpGet: { path: "/readyz", port: "query" }, periodSeconds: 10 },
|
|
296
|
+
livenessProbe: { httpGet: { path: "/healthz", port: "query" }, periodSeconds: 30, failureThreshold: 3 },
|
|
297
|
+
// Stopping, it answers the queries under way in it first, which its stop would end.
|
|
298
|
+
lifecycle: { preStop: { exec: { command: ["node", "src/drain.ts"] } } },
|
|
299
|
+
securityContext: { ...restrictedContainer(), readOnlyRootFilesystem: true },
|
|
300
|
+
resources,
|
|
301
|
+
volumeMounts: [{ name: "tmp", mountPath: "/tmp" }],
|
|
302
|
+
}],
|
|
303
|
+
volumes: [{ name: "tmp", emptyDir: { sizeLimit: "2Gi" } }],
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
},
|
|
307
|
+
};
|
|
308
|
+
// The queries the pool has not answered, as any reader sums them, so many to a reader.
|
|
309
|
+
const queue = {
|
|
310
|
+
type: "metrics-api",
|
|
311
|
+
metadata: { url: `http://${componentName("lake")}.${NAMESPACE}.svc.cluster.local:${LAKE_QUERY_PORT}/pool`, valueLocation: "queries", targetValue: String(QUERIES_PER_READER) },
|
|
312
|
+
};
|
|
313
|
+
return [service, headless, deployment, ...scaledObject(deployment, scaling, [queue]), ...replicaBudget(QUERY_COMPONENT, NAMESPACE, scaling), verticalPodAutoscaler(deployment, "InPlace")];
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* The intake's objects: its Deployment, the ScaledObject that scales it, a trigger of
|
|
317
|
+
* each topic's lag, and what KEDA reads that as.
|
|
318
|
+
*/
|
|
319
|
+
function intakeObjects(config) {
|
|
320
|
+
const name = componentName(INTAKE_COMPONENT);
|
|
321
|
+
const { scaling, resources } = config.lake.intake;
|
|
322
|
+
const metadata = { name, namespace: NAMESPACE, labels: stackLabels(INTAKE_COMPONENT) };
|
|
323
|
+
const intake = logPrincipalSecret("intake");
|
|
324
|
+
const deployment = {
|
|
325
|
+
apiVersion: "apps/v1",
|
|
326
|
+
kind: "Deployment",
|
|
327
|
+
metadata,
|
|
328
|
+
spec: {
|
|
329
|
+
...replicasOf(scaling),
|
|
330
|
+
selector: { matchLabels: selectorLabels(INTAKE_COMPONENT) },
|
|
331
|
+
template: {
|
|
332
|
+
metadata: { labels: stackLabels(INTAKE_COMPONENT) },
|
|
333
|
+
spec: {
|
|
334
|
+
...priority("component"),
|
|
335
|
+
...stackPodSpec(config),
|
|
336
|
+
...spread(INTAKE_COMPONENT, scaling),
|
|
337
|
+
// A batch being written is finished; one being gathered is read again by another.
|
|
338
|
+
terminationGracePeriodSeconds: 60,
|
|
339
|
+
containers: [{
|
|
340
|
+
name: "intake",
|
|
341
|
+
image: imageReference(config.images.lake),
|
|
342
|
+
imagePullPolicy: config.images.pullPolicy,
|
|
343
|
+
command: ["node", "src/intake-service.ts"],
|
|
344
|
+
env: [
|
|
345
|
+
...lakeEnv(config),
|
|
346
|
+
...writerSecrets(),
|
|
347
|
+
{ name: "LOG_BROKERS", value: LOG_BROKERS },
|
|
348
|
+
fromSecret("LOG_USERNAME", intake, "username"),
|
|
349
|
+
fromSecret("LOG_PASSWORD", intake, "password"),
|
|
350
|
+
// How long the log is to keep what it reads, which it says beside how long it does.
|
|
351
|
+
{ name: "LOG_RETENTION_MS", value: String(retentionMs(config.log.retention)) },
|
|
352
|
+
...otelEnv(config),
|
|
353
|
+
{ name: "OTEL_SERVICE_NAME", value: "alasio-lake-intake" },
|
|
354
|
+
],
|
|
355
|
+
ports: [{ name: "metrics", containerPort: LAKE_METRICS_PORT }],
|
|
356
|
+
readinessProbe: { ...probe("/readyz"), periodSeconds: 10 },
|
|
357
|
+
// A batch being decoded holds its event loop a while: given time to answer.
|
|
358
|
+
livenessProbe: { ...probe("/healthz"), initialDelaySeconds: 60, periodSeconds: 30, timeoutSeconds: 10, failureThreshold: 3 },
|
|
359
|
+
securityContext: { ...restrictedContainer(), readOnlyRootFilesystem: true },
|
|
360
|
+
resources,
|
|
361
|
+
volumeMounts: [{ name: "tmp", mountPath: "/tmp" }],
|
|
362
|
+
}],
|
|
363
|
+
volumes: [{ name: "tmp", emptyDir: { sizeLimit: "2Gi" } }],
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
},
|
|
367
|
+
};
|
|
368
|
+
const scaledObjects = scaledObject(deployment, scaling, Object.values(TELEMETRY_TOPICS).map((topic) => lagTrigger(INTAKE_GROUP, topic, LAG_THRESHOLD, name)));
|
|
369
|
+
return [
|
|
370
|
+
deployment,
|
|
371
|
+
...(scaledObjects.length > 0 ? [logAuthentication(name, NAMESPACE, INTAKE_COMPONENT), ...scaledObjects] : []),
|
|
372
|
+
...replicaBudget(INTAKE_COMPONENT, NAMESPACE, scaling),
|
|
373
|
+
verticalPodAutoscaler(deployment, "InPlace", sleeps(scaling) ? ["memory"] : undefined),
|
|
374
|
+
];
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* The lake's objects, when it runs, which is beside Neon. A branch environment's is its
|
|
378
|
+
* loader alone, of the branch's copy of the catalog on main's files, which it reads where
|
|
379
|
+
* they are and writes beside them, and maintains none of: main's maintenance keeps every
|
|
380
|
+
* file while Neon has branches, which it asks neon-control about (neon/lake/src/sync.ts).
|
|
381
|
+
*/
|
|
382
|
+
export function lakeObjects(config, environment = MAIN_ENVIRONMENT) {
|
|
383
|
+
if (!lakeRuns(config))
|
|
384
|
+
return [];
|
|
385
|
+
if (environment.branch !== null)
|
|
386
|
+
return loaderObjects(config, environment);
|
|
387
|
+
return [...loaderObjects(config, environment), ...maintenanceObjects(config), ...queryObjects(config), ...intakeObjects(config)];
|
|
111
388
|
}
|
|
112
389
|
//# sourceMappingURL=lake.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lake.js","sourceRoot":"","sources":["../../../../src/manifests/lake.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lake.js","sourceRoot":"","sources":["../../../../src/manifests/lake.ts"],"names":[],"mappings":"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"}
|