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.
Files changed (161) hide show
  1. package/dist/cli/src/api-server.js +18 -0
  2. package/dist/cli/src/api-server.js.map +1 -0
  3. package/dist/cli/src/branches.js +123 -46
  4. package/dist/cli/src/branches.js.map +1 -1
  5. package/dist/cli/src/cluster/docker.js +25 -10
  6. package/dist/cli/src/cluster/docker.js.map +1 -1
  7. package/dist/cli/src/cluster/host.js +33 -7
  8. package/dist/cli/src/cluster/host.js.map +1 -1
  9. package/dist/cli/src/cluster/k3s.js +51 -12
  10. package/dist/cli/src/cluster/k3s.js.map +1 -1
  11. package/dist/cli/src/cluster/node.js +115 -33
  12. package/dist/cli/src/cluster/node.js.map +1 -1
  13. package/dist/cli/src/cluster/stargz.js +55 -0
  14. package/dist/cli/src/cluster/stargz.js.map +1 -0
  15. package/dist/cli/src/commands/branch.js +5 -4
  16. package/dist/cli/src/commands/branch.js.map +1 -1
  17. package/dist/cli/src/commands/common.js +9 -3
  18. package/dist/cli/src/commands/common.js.map +1 -1
  19. package/dist/cli/src/commands/folder.js +14 -0
  20. package/dist/cli/src/commands/folder.js.map +1 -0
  21. package/dist/cli/src/commands/init.js +54 -4
  22. package/dist/cli/src/commands/init.js.map +1 -1
  23. package/dist/cli/src/commands/lake.js +40 -6
  24. package/dist/cli/src/commands/lake.js.map +1 -1
  25. package/dist/cli/src/commands/restore-filer-store.js +40 -8
  26. package/dist/cli/src/commands/restore-filer-store.js.map +1 -1
  27. package/dist/cli/src/commands/status.js +216 -20
  28. package/dist/cli/src/commands/status.js.map +1 -1
  29. package/dist/cli/src/commands/uninstall.js +8 -9
  30. package/dist/cli/src/commands/uninstall.js.map +1 -1
  31. package/dist/cli/src/commands/up.js +11 -3
  32. package/dist/cli/src/commands/up.js.map +1 -1
  33. package/dist/cli/src/commands/upgrade.js +1 -1
  34. package/dist/cli/src/commands/upgrade.js.map +1 -1
  35. package/dist/cli/src/commands.js +2 -1
  36. package/dist/cli/src/commands.js.map +1 -1
  37. package/dist/cli/src/config.js +24 -9
  38. package/dist/cli/src/config.js.map +1 -1
  39. package/dist/cli/src/cpu-baseline.js +8 -4
  40. package/dist/cli/src/cpu-baseline.js.map +1 -1
  41. package/dist/cli/src/folders.js +67 -0
  42. package/dist/cli/src/folders.js.map +1 -0
  43. package/dist/cli/src/gateway-calls.js +58 -0
  44. package/dist/cli/src/gateway-calls.js.map +1 -0
  45. package/dist/cli/src/install.js +119 -17
  46. package/dist/cli/src/install.js.map +1 -1
  47. package/dist/cli/src/kept-releases.js +27 -20
  48. package/dist/cli/src/kept-releases.js.map +1 -1
  49. package/dist/cli/src/kube/api.js +11 -5
  50. package/dist/cli/src/kube/api.js.map +1 -1
  51. package/dist/cli/src/kube/apply.js +16 -73
  52. package/dist/cli/src/kube/apply.js.map +1 -1
  53. package/dist/cli/src/kube/rollout.js +84 -26
  54. package/dist/cli/src/kube/rollout.js.map +1 -1
  55. package/dist/cli/src/lake.js +124 -0
  56. package/dist/cli/src/lake.js.map +1 -0
  57. package/dist/cli/src/manifests/admission.js +381 -223
  58. package/dist/cli/src/manifests/admission.js.map +1 -1
  59. package/dist/cli/src/manifests/alasio.js +79 -362
  60. package/dist/cli/src/manifests/alasio.js.map +1 -1
  61. package/dist/cli/src/manifests/branch.js +10 -26
  62. package/dist/cli/src/manifests/branch.js.map +1 -1
  63. package/dist/cli/src/manifests/collector.js +250 -135
  64. package/dist/cli/src/manifests/collector.js.map +1 -1
  65. package/dist/cli/src/manifests/common.js +32 -2
  66. package/dist/cli/src/manifests/common.js.map +1 -1
  67. package/dist/cli/src/manifests/config.js +256 -92
  68. package/dist/cli/src/manifests/config.js.map +1 -1
  69. package/dist/cli/src/manifests/disruption.js +10 -0
  70. package/dist/cli/src/manifests/disruption.js.map +1 -1
  71. package/dist/cli/src/manifests/folders.js +128 -0
  72. package/dist/cli/src/manifests/folders.js.map +1 -0
  73. package/dist/cli/src/manifests/grafana.js +4 -2
  74. package/dist/cli/src/manifests/grafana.js.map +1 -1
  75. package/dist/cli/src/manifests/index.js +15 -8
  76. package/dist/cli/src/manifests/index.js.map +1 -1
  77. package/dist/cli/src/manifests/keda.js +2 -1
  78. package/dist/cli/src/manifests/keda.js.map +1 -1
  79. package/dist/cli/src/manifests/lake.js +350 -73
  80. package/dist/cli/src/manifests/lake.js.map +1 -1
  81. package/dist/cli/src/manifests/log.js +316 -0
  82. package/dist/cli/src/manifests/log.js.map +1 -0
  83. package/dist/cli/src/manifests/neon.js +128 -49
  84. package/dist/cli/src/manifests/neon.js.map +1 -1
  85. package/dist/cli/src/manifests/network-policies.js +263 -100
  86. package/dist/cli/src/manifests/network-policies.js.map +1 -1
  87. package/dist/cli/src/manifests/node-agent.js +24 -8
  88. package/dist/cli/src/manifests/node-agent.js.map +1 -1
  89. package/dist/cli/src/manifests/object-store.js +4 -2
  90. package/dist/cli/src/manifests/object-store.js.map +1 -1
  91. package/dist/cli/src/manifests/sandbox-gateway.js +663 -0
  92. package/dist/cli/src/manifests/sandbox-gateway.js.map +1 -0
  93. package/dist/cli/src/manifests/scalers.js +16 -5
  94. package/dist/cli/src/manifests/scalers.js.map +1 -1
  95. package/dist/cli/src/manifests/sizing.js +16 -8
  96. package/dist/cli/src/manifests/sizing.js.map +1 -1
  97. package/dist/cli/src/manifests/valkey.js +11 -5
  98. package/dist/cli/src/manifests/valkey.js.map +1 -1
  99. package/dist/cli/src/manifests/vpa.js +3 -1
  100. package/dist/cli/src/manifests/vpa.js.map +1 -1
  101. package/dist/cli/src/manifests/webhook.js +102 -0
  102. package/dist/cli/src/manifests/webhook.js.map +1 -0
  103. package/dist/cli/src/manifests/workspace-storage.js +174 -89
  104. package/dist/cli/src/manifests/workspace-storage.js.map +1 -1
  105. package/dist/cli/src/neon-storage.js +155 -0
  106. package/dist/cli/src/neon-storage.js.map +1 -0
  107. package/dist/cli/src/release.js +9 -6
  108. package/dist/cli/src/release.js.map +1 -1
  109. package/dist/cli/src/secrets.js +45 -4
  110. package/dist/cli/src/secrets.js.map +1 -1
  111. package/dist/cli/src/target.js +1 -1
  112. package/dist/cli/src/target.js.map +1 -1
  113. package/dist/cli/src/telegram.js +56 -10
  114. package/dist/cli/src/telegram.js.map +1 -1
  115. package/dist/cli/src/webhook.js +182 -0
  116. package/dist/cli/src/webhook.js.map +1 -0
  117. package/dist/cluster/node/pins.json +12 -2
  118. package/dist/neon/control/branches.js +126 -21
  119. package/dist/neon/control/branches.js.map +1 -1
  120. package/dist/neon/control/endpoints.js +9 -0
  121. package/dist/neon/control/endpoints.js.map +1 -1
  122. package/dist/neon/control/jwt.js +16 -3
  123. package/dist/neon/control/jwt.js.map +1 -1
  124. package/dist/neon/control/secrets.js +51 -7
  125. package/dist/neon/control/secrets.js.map +1 -1
  126. package/dist/src/binder/names.js +33 -0
  127. package/dist/src/binder/names.js.map +1 -0
  128. package/dist/src/binder/tokens.js +58 -0
  129. package/dist/src/binder/tokens.js.map +1 -0
  130. package/dist/src/branch/names.js +12 -2
  131. package/dist/src/branch/names.js.map +1 -1
  132. package/dist/src/events/names.js +7 -0
  133. package/dist/src/events/names.js.map +1 -0
  134. package/dist/src/gateway/names.js +201 -0
  135. package/dist/src/gateway/names.js.map +1 -0
  136. package/dist/src/harness/names.js +49 -0
  137. package/dist/src/harness/names.js.map +1 -0
  138. package/dist/src/kube/sandbox-shape.js +19 -69
  139. package/dist/src/kube/sandbox-shape.js.map +1 -1
  140. package/dist/src/node-agent/names.js +118 -2
  141. package/dist/src/node-agent/names.js.map +1 -1
  142. package/dist/src/sandbox/names.js +12 -20
  143. package/dist/src/sandbox/names.js.map +1 -1
  144. package/dist/src/sandbox/otlp-resource.js +173 -0
  145. package/dist/src/sandbox/otlp-resource.js.map +1 -0
  146. package/dist/src/sandbox/telemetry.js +43 -0
  147. package/dist/src/sandbox/telemetry.js.map +1 -0
  148. package/dist/src/telegram/deliveries.js +40 -0
  149. package/dist/src/telegram/deliveries.js.map +1 -0
  150. package/dist/src/telemetry/config.js +131 -0
  151. package/dist/src/telemetry/config.js.map +1 -0
  152. package/dist/src/telemetry/forward.js +154 -0
  153. package/dist/src/telemetry/forward.js.map +1 -0
  154. package/package.json +1 -1
  155. package/dist/cli/src/manifests/agent-sandbox.js +0 -92
  156. package/dist/cli/src/manifests/agent-sandbox.js.map +0 -1
  157. package/dist/cli/src/manifests/juicefs-csi.js +0 -319
  158. package/dist/cli/src/manifests/juicefs-csi.js.map +0 -1
  159. package/dist/cli/src/manifests/sandboxes.agents.x-k8s.io.json +0 -6295
  160. package/dist/src/kube/config.js +0 -143
  161. 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 { componentName, lakeRuns, MAIN_ENVIRONMENT, neonName, ONE, otelEnv, replicasOf, restrictedContainer, s3Endpoint, selectorLabels, stackLabels, stackPodSpec, } from "./common.js";
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 telemetry intake takes OTLP over HTTP on. */
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
- * The lake's objects, when it runs, which is beside Neon. A branch environment's is the
13
- * branch's copy of the catalog on main's files, which it reads where they are and writes
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
- export function lakeObjects(config, environment = MAIN_ENVIRONMENT) {
19
- if (!lakeRuns(config))
20
- return [];
21
- const name = componentName("lake");
22
- const main = environment.branch === null;
23
- const service = {
24
- apiVersion: "v1",
25
- kind: "Service",
26
- metadata: { name, namespace: environment.namespace, labels: stackLabels("lake") },
27
- spec: {
28
- selector: selectorLabels("lake"),
29
- ports: [{ name: "metrics", port: 9464 }, { name: "otlp-http", port: LAKE_INTAKE_PORT }, ...(main ? [{ name: "query", port: LAKE_QUERY_PORT }] : [])],
30
- },
31
- };
32
- // Where the lake is, which both containers open it at.
33
- const lakeEnv = [
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
- const secret = (variable) => ({ name: variable, valueFrom: { secretKeyRef: { name, key: variable } } });
43
- const image = imageReference(config.images.lake);
44
- // Its query endpoint, which Grafana and alasio lake read main's lake through; a branch environment has neither.
45
- const query = {
46
- name: "query",
47
- image,
48
- imagePullPolicy: config.images.pullPolicy,
49
- command: ["node", "src/endpoint.ts"],
50
- env: [
51
- ...lakeEnv,
52
- ...["LAKE_READER_PASSWORD", "LAKE_READER_S3_KEY", "LAKE_READER_S3_SECRET", "LAKE_QUERY_TOKEN"].map(secret),
53
- { name: "LAKE_QUERY_PORT", value: String(LAKE_QUERY_PORT) },
54
- ...otelEnv(config, environment),
55
- { name: "OTEL_SERVICE_NAME", value: "alasio-lake-query" },
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
- // Live while its loads are not failing for long; ready once its intake has the lake open.
66
- const probe = (path) => ({ httpGet: { path, port: "metrics" } });
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: environment.namespace, labels: stackLabels("lake") },
90
+ metadata: { name, namespace, labels: stackLabels(LOADER_COMPONENT) },
71
91
  spec: {
72
- ...replicasOf(ONE),
92
+ ...replicasOf(scaling),
73
93
  // One loader: two would race each other's loads.
74
94
  strategy: { type: "Recreate" },
75
- selector: { matchLabels: selectorLabels("lake") },
95
+ selector: { matchLabels: selectorLabels(LOADER_COMPONENT) },
76
96
  template: {
77
- metadata: { labels: stackLabels("lake") },
97
+ metadata: { labels: stackLabels(LOADER_COMPONENT) },
78
98
  spec: {
79
- // Main's serves Grafana's alerts, which never sleep; a branch's nothing.
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
- name: "lake",
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
- { name: "LAKE_RETENTION_DAYS", value: String(config.telemetry.retentionDays) },
91
- // Main's keeps its files while Neon has branches, whose lakes read them; a branch's is never maintained.
92
- ...(main ? [{ name: "LAKE_BRANCHES_URL", value: `http://${neonName("control")}:8080/branches` }] : [{ name: "LAKE_MAINTENANCE_HOURS", value: "0" }]),
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
- envFrom: [{ secretRef: { name } }],
96
- ports: [{ name: "metrics", containerPort: 9464 }, { name: "otlp-http", containerPort: LAKE_INTAKE_PORT }],
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: config.lake.resources,
124
+ resources,
101
125
  volumeMounts: [{ name: "tmp", mountPath: "/tmp" }],
102
- },
103
- ...(main ? [query] : []),
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
- return [service, deployment, verticalPodAutoscaler(deployment, "InPlace")];
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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"}