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,33 +1,54 @@
1
+ import { COMPUTE_CTL_PORT } from "../../../neon/control/branches.js";
1
2
  import { imageReference } from "../images.js";
2
- import { COLLECTOR_PORT, collectorRuns, componentName, given, goJson, lakeRuns, NAMESPACE, neonName, ONE, replicasOf, restrictedContainer, selectorLabels, sha256, stackLabels, stackPodSpec, } from "./common.js";
3
+ import { COLLECTOR_PORT, collectorRuns, componentName, given, goJson, lakeRuns, NAMESPACE, ONE, replicasOf, restrictedContainer, scaled, selectorLabels, sha256, stackLabels, stackPodSpec } from "./common.js";
4
+ import { LOG_BROKERS, LOG_METRICS_PORT, LOG_RECORD_BYTES, logPrincipalSecret, TELEMETRY_TOPICS } from "./log.js";
5
+ import { replicaBudget, spread } from "./disruption.js";
6
+ import { JUICEFS_METRICS_PORT, sandboxServiceRuns, WORKSPACE_MOUNT_COMPONENT } from "./sandbox-gateway.js";
7
+ import { INTAKE_COMPONENT, LAKE_METRICS_PORT, LAKE_QUERY_PORT, LOADER_COMPONENT, QUERY_COMPONENT } from "./lake.js";
8
+ import { COMPONENTS, FILER_STORE, FILER_STORE_USERS, METRICS_PORT as SEAWEEDFS_METRICS_PORT } from "./object-store.js";
3
9
  import { priority } from "./priorities.js";
10
+ import { cpuScaledObject } from "./scalers.js";
4
11
  import { verticalPodAutoscaler } from "./sizing.js";
5
- import { DRIVER_METRICS_PORT, DRIVER_POD_NAME, JUICEFS_METRICS_PORT, MOUNT_POD_NAME } from "./juicefs-csi.js";
6
- import { LAKE_INTAKE_PORT } from "./lake.js";
7
- import { COMPONENTS, FILER_STORE, FILER_STORE_USERS, METRICS_PORT as SEAWEEDFS_METRICS_PORT } from "./object-store.js";
8
12
  import { VALKEY_PORT, valkeyPassword } from "./valkey.js";
13
+ import { WEBHOOK_HEALTH_PORT } from "./webhook.js";
9
14
  import { VALKEY } from "./workspace-storage.js";
10
- /** The collector's name, its pods' component, and its Service's. */
15
+ /** The gateway's name, its pods' component, and its Service's, which every producer exports to. */
11
16
  export const COLLECTOR = componentName("collector");
12
- const COMPONENT = "collector";
17
+ export const GATEWAY_COMPONENT = "collector";
18
+ /** The scraper's name and its pods' component. */
19
+ export const SCRAPER = componentName("collector-scraper");
20
+ export const SCRAPER_COMPONENT = "collector-scraper";
13
21
  /**
14
22
  * How often it scrapes the stack. The stack's metrics are most of all the telemetry
15
23
  * there is (the pageserver's alone half of it), some 30 points a second at this interval.
16
24
  */
17
25
  const SCRAPE_INTERVAL = "60s";
18
26
  /**
19
- * How it batches spans and log records: a request of at most as many as one insert of
20
- * the lake inlines (neon/lake/src/otel.ts's INLINED_ROWS), within 5 seconds of the first,
21
- * so those few, which a query wants at once, are inlined in the catalog and make no file.
27
+ * How the scraper batches what it scrapes: a minute's at a time, an export of up to
28
+ * 10,000 points, some megabytes at most, which the log takes as one record of up to
29
+ * 8 MiB (./log.ts) and the intake writes in one commit, a file of each kind's.
22
30
  */
23
- const BATCH = { send_batch_size: 1000, send_batch_max_size: 1000, timeout: "5s" };
31
+ const METRICS_BATCH = { send_batch_size: 10_000, send_batch_max_size: 10_000, timeout: "60s" };
24
32
  /**
25
- * How it batches metric points: a minute's at a time, a request of thousands, which the
26
- * lake writes as a file of each kind's rather than inline in its catalog. Measured on the
27
- * stack, inlining them all cost Neon some 45 KB of WAL a second and the catalog 130 MB an
28
- * hour until flushed; a request every 5 seconds not inlined, 50 files a minute.
33
+ * Each node's filesystem, read from its kubelet's stats (k8s.node.filesystem.available and
34
+ * .capacity): a kubeletstats receiver of each node the Kubernetes observer lists, with the
35
+ * scraper's ServiceAccount, whose serving certificate is the node's own.
29
36
  */
30
- const METRICS_BATCH = { send_batch_size: 10_000, send_batch_max_size: 10_000, timeout: "60s" };
37
+ const NODE_STATS = {
38
+ watch_observers: ["k8s_observer"],
39
+ receivers: {
40
+ kubeletstats: {
41
+ rule: 'type == "k8s.node"',
42
+ config: {
43
+ auth_type: "serviceAccount",
44
+ endpoint: "`endpoint`:`kubelet_endpoint_port`",
45
+ insecure_skip_verify: true,
46
+ collection_interval: SCRAPE_INTERVAL,
47
+ metric_groups: ["node"],
48
+ },
49
+ },
50
+ },
51
+ };
31
52
  /** Whether the bundled object store runs, whose parts it scrapes and whose filer store it reads. */
32
53
  const seaweedfsRuns = ({ neon, objectStore }) => neon.enabled && objectStore.bundled.enabled;
33
54
  /** The object store's parts it scrapes, by their pods' component: all but the filer store, which it reads as a Valkey. */
@@ -42,64 +63,58 @@ function valkeys(config) {
42
63
  : []),
43
64
  ];
44
65
  }
45
- /** What it scrapes: each job's targets, by job, each of neon-control's replicas, the object store's parts, and with workspace storage JuiceFS's pods. */
46
- function scrapes(config) {
47
- const { neon, workspaceStorage } = config;
48
- if (!neon.enabled)
49
- return [];
50
- const safekeeper = neonName("safekeeper");
51
- const targets = {
52
- pageserver: [`${neonName("pageserver")}:9898`],
53
- "storage-controller": [`${neonName("storage-controller")}:1234`],
54
- "storage-broker": [`${neonName("storage-broker")}:50051`],
55
- compute: [`${neonName("compute")}:3080`],
56
- proxy: [`${neonName("proxy")}:7001`],
57
- safekeeper: Array.from({ length: neon.safekeepers.scaling.min }, (_, index) => `${safekeeper}-${index}.${safekeeper}:7676`),
58
- ...(lakeRuns(config) ? { lake: [`${componentName("lake")}:9464`] } : {}),
59
- };
60
- // The pods of `namespace` the label `label` selects: each running one at its address, on
61
- // the port `port` they serve their metrics on, named by its pod. The collector reads `$`
62
- // as the start of a variable, and `$$` as a `$`.
63
- const podsJob = (job, namespace, label, port) => ({
66
+ /**
67
+ * The scrape job `job` of the pods of `namespace` whose component matches `components`:
68
+ * each running one at its address, on `port`, named by its pod, and labelled with its
69
+ * component where `labelled`. The collector reads `$` as the start of a variable, and
70
+ * `$$` as a `$`.
71
+ */
72
+ function podJob(job, namespace, components, port, labelled = false) {
73
+ return {
64
74
  job_name: job,
65
75
  scrape_interval: SCRAPE_INTERVAL,
66
- kubernetes_sd_configs: [{
67
- role: "pod",
68
- namespaces: { names: [namespace] },
69
- selectors: [{ role: "pod", label }],
70
- }],
76
+ kubernetes_sd_configs: [{ role: "pod", namespaces: { names: [namespace] } }],
71
77
  relabel_configs: [
78
+ { source_labels: ["__meta_kubernetes_pod_label_app_kubernetes_io_component"], regex: components.join("|"), action: "keep" },
72
79
  { source_labels: ["__meta_kubernetes_pod_phase"], regex: "Running", action: "keep" },
73
80
  { source_labels: ["__meta_kubernetes_pod_ip"], target_label: "__address__", replacement: `$$1:${port}` },
74
81
  { source_labels: ["__meta_kubernetes_pod_name"], target_label: "pod" },
75
- ],
76
- });
77
- // The object store's parts, each pod of each, which the collector may list in its own
78
- // namespace, as their gateways' count moves; each labelled with its part.
79
- const seaweedfsJob = {
80
- job_name: "seaweedfs",
81
- scrape_interval: SCRAPE_INTERVAL,
82
- kubernetes_sd_configs: [{ role: "pod", namespaces: { names: [NAMESPACE] } }],
83
- relabel_configs: [
84
- { source_labels: ["__meta_kubernetes_pod_label_app_kubernetes_io_component"], regex: SEAWEEDFS_SCRAPED.join("|"), action: "keep" },
85
- { source_labels: ["__meta_kubernetes_pod_phase"], regex: "Running", action: "keep" },
86
- { source_labels: ["__meta_kubernetes_pod_ip"], target_label: "__address__", replacement: `$$1:${SEAWEEDFS_METRICS_PORT}` },
87
- { source_labels: ["__meta_kubernetes_pod_name"], target_label: "pod" },
88
- { source_labels: ["__meta_kubernetes_pod_label_app_kubernetes_io_component"], target_label: "component" },
82
+ ...(labelled ? [{ source_labels: ["__meta_kubernetes_pod_label_app_kubernetes_io_component"], target_label: "component" }] : []),
89
83
  ],
90
84
  };
85
+ }
86
+ /** What it scrapes, a job of each component's pods, by the job's name, which its metrics' service is named. */
87
+ function scrapes(config) {
88
+ const { neon } = config;
89
+ const stack = {
90
+ ...(neon.enabled
91
+ ? {
92
+ pageserver: [["neon-pageserver"], 9898],
93
+ "storage-controller": [["neon-storage-controller"], 1234],
94
+ "storage-broker": [["neon-storage-broker"], 50051],
95
+ // The primary and, where the lake runs, its read replica.
96
+ compute: [["neon-compute", "neon-compute-ro"], COMPUTE_CTL_PORT],
97
+ // Each replica's own wakes and sleeps, as any of them wakes a compute.
98
+ "neon-control": [["neon-control"], 8080],
99
+ proxy: [["neon-proxy"], 7001],
100
+ safekeeper: [["neon-safekeeper"], 7676],
101
+ }
102
+ : {}),
103
+ ...(lakeRuns(config)
104
+ ? { "lake-loader": [[LOADER_COMPONENT], LAKE_METRICS_PORT], "lake-query": [[QUERY_COMPONENT], LAKE_QUERY_PORT], "lake-intake": [[INTAKE_COMPONENT], LAKE_METRICS_PORT] }
105
+ : {}),
106
+ log: [["log"], LOG_METRICS_PORT],
107
+ webhook: [["webhook"], WEBHOOK_HEALTH_PORT],
108
+ };
91
109
  return [
92
- ...Object.keys(targets).sort().map((job) => ({ job_name: job, scrape_interval: SCRAPE_INTERVAL, static_configs: [{ targets: targets[job] }] })),
93
- ...(seaweedfsRuns(config) ? [seaweedfsJob] : []),
94
- // Each replica's own wakes and sleeps, as any of them wakes a compute.
95
- podsJob("neon-control", NAMESPACE, "app.kubernetes.io/component=neon-control", 8080),
96
- // The mount pods, the clients, and the controller's and node service's, the driver.
97
- ...(workspaceStorage.enabled
98
- ? [
99
- podsJob("juicefs", workspaceStorage.csi.namespace, `app.kubernetes.io/name=${MOUNT_POD_NAME}`, JUICEFS_METRICS_PORT),
100
- podsJob("juicefs-csi", workspaceStorage.csi.namespace, `app.kubernetes.io/name=${DRIVER_POD_NAME}`, DRIVER_METRICS_PORT),
101
- ]
102
- : []),
110
+ ...Object.keys(stack).sort().map((job) => {
111
+ const [components, port] = stack[job] ?? [[], 0];
112
+ return podJob(job, NAMESPACE, components, port);
113
+ }),
114
+ // The object store's parts, each labelled with its part.
115
+ ...(seaweedfsRuns(config) ? [podJob("seaweedfs", NAMESPACE, SEAWEEDFS_SCRAPED, SEAWEEDFS_METRICS_PORT, true)] : []),
116
+ // Each node's mount of workspace storage, JuiceFS's client.
117
+ ...(sandboxServiceRuns(config) ? [podJob("juicefs", NAMESPACE, [WORKSPACE_MOUNT_COMPONENT], JUICEFS_METRICS_PORT)] : []),
103
118
  ];
104
119
  }
105
120
  /** The exporter to telemetry.otlpEndpoint, by its name in the collector's configuration, in the protocol it is set to, with its headers. */
@@ -110,20 +125,50 @@ function externalExporter({ telemetry }) {
110
125
  return { "otlp/external": { endpoint, tls: { insecure: endpoint.startsWith("http://") }, ...headers } };
111
126
  return { "otlphttp/external": { endpoint, encoding: otlpProtocol === "http/json" ? "json" : "proto", ...headers } };
112
127
  }
113
- /** The collector's configuration. */
114
- function collectorConfig(config) {
115
- const { telemetry } = config;
116
- const scraped = scrapes(config);
117
- const read = valkeys(config);
128
+ /** What the gateway is given, and the scraper: its health, its OTLP receiver, and none of its own metrics. */
129
+ const BASE = {
130
+ extensions: { health_check: { endpoint: "0.0.0.0:13133" } },
131
+ receivers: { otlp: { protocols: { http: { endpoint: `0.0.0.0:${COLLECTOR_PORT}` } } } },
132
+ };
133
+ const SERVICE = { extensions: ["health_check"], telemetry: { metrics: { level: "none" } } };
134
+ /**
135
+ * The gateway's configuration: every signal from its OTLP receiver straight to the log,
136
+ * each to its topic, acked by every replica the log keeps of it, unbatched and unqueued,
137
+ * so its producer's export is answered by the log's, compressed with zstd, as the log keeps
138
+ * it (./log.ts logAccess); and to the external endpoint.
139
+ */
140
+ function gatewayConfig(config) {
118
141
  const exporters = {
119
- ...(lakeRuns(config) ? { "otlphttp/lake": { endpoint: `http://${componentName("lake")}:${LAKE_INTAKE_PORT}` } } : {}),
120
- ...(telemetry.otlpEndpoint ? externalExporter(config) : {}),
142
+ ...(lakeRuns(config)
143
+ ? {
144
+ kafka: {
145
+ brokers: [LOG_BROKERS],
146
+ protocol_version: "4.2.0",
147
+ auth: { sasl: { username: "gateway", password: "${env:LOG_PASSWORD}", mechanism: "SCRAM-SHA-512" } },
148
+ traces: { topic: TELEMETRY_TOPICS.traces, encoding: "otlp_proto" },
149
+ logs: { topic: TELEMETRY_TOPICS.logs, encoding: "otlp_proto" },
150
+ metrics: { topic: TELEMETRY_TOPICS.metrics, encoding: "otlp_proto" },
151
+ producer: { required_acks: -1, max_message_bytes: LOG_RECORD_BYTES, compression: "zstd" },
152
+ timeout: "10s",
153
+ sending_queue: { enabled: false },
154
+ retry_on_failure: { enabled: false },
155
+ },
156
+ }
157
+ : {}),
158
+ ...(config.telemetry.otlpEndpoint ? externalExporter(config) : {}),
121
159
  };
122
- const sent = (processor) => ({ receivers: ["otlp"], processors: [processor], exporters: Object.keys(exporters) });
160
+ // Nothing between: a log record without an id of its own the lake's intake knows by what it
161
+ // is (neon/lake/src/otel.ts logRecordId), so the same record sent twice is one.
162
+ const sent = { receivers: ["otlp"], exporters: Object.keys(exporters) };
163
+ return { ...BASE, exporters, service: { ...SERVICE, pipelines: { traces: sent, logs: sent, metrics: sent } } };
164
+ }
165
+ /** The scraper's configuration: what it scrapes and reads, of the stack's, and of each node's filesystem, batched a minute's at a time, to the gateway. */
166
+ function scraperConfig(scraped, read) {
167
+ const stack = [...(scraped.length > 0 ? ["prometheus"] : []), ...read.map(({ receiver }) => receiver)];
123
168
  return {
124
- extensions: { health_check: { endpoint: "0.0.0.0:13133" } },
169
+ extensions: { ...BASE.extensions, k8s_observer: { auth_type: "serviceAccount", observe_nodes: true, observe_pods: false } },
125
170
  receivers: {
126
- otlp: { protocols: { http: { endpoint: `0.0.0.0:${COLLECTOR_PORT}` } } },
171
+ "receiver_creator/nodes": NODE_STATS,
127
172
  ...(scraped.length > 0 ? { prometheus: { config: { scrape_configs: scraped } } } : {}),
128
173
  ...Object.fromEntries(read.map(({ receiver, name, username, variable }) => [receiver, {
129
174
  endpoint: `${name}:${VALKEY_PORT}`,
@@ -137,93 +182,157 @@ function collectorConfig(config) {
137
182
  }])),
138
183
  },
139
184
  processors: {
140
- batch: BATCH,
141
- "batch/metrics": METRICS_BATCH,
142
- // What the collector scrapes is the stack's.
143
- ...(scraped.length > 0 ? { "resource/stack": { attributes: [{ key: "service.namespace", value: "alasio-neon", action: "upsert" }] } } : {}),
185
+ batch: METRICS_BATCH,
186
+ // What the scraper scrapes is the stack's.
187
+ "resource/stack": { attributes: [{ key: "service.namespace", value: "alasio-neon", action: "upsert" }] },
144
188
  },
145
- exporters,
189
+ exporters: { "otlphttp/gateway": { endpoint: `http://${COLLECTOR}:${COLLECTOR_PORT}` } },
146
190
  service: {
147
- extensions: ["health_check"],
148
- telemetry: { metrics: { level: "none" } },
191
+ ...SERVICE,
192
+ extensions: [...SERVICE.extensions, "k8s_observer"],
149
193
  pipelines: {
150
- traces: sent("batch"),
151
- logs: sent("batch"),
152
- metrics: sent("batch/metrics"),
153
- ...(scraped.length > 0
154
- ? {
155
- "metrics/stack": {
156
- receivers: ["prometheus", ...read.map(({ receiver }) => receiver)],
157
- processors: ["resource/stack", "batch/metrics"],
158
- exporters: Object.keys(exporters),
159
- },
160
- }
161
- : {}),
194
+ "metrics/nodes": { receivers: ["receiver_creator/nodes"], processors: ["batch"], exporters: ["otlphttp/gateway"] },
195
+ ...(stack.length > 0 ? { metrics: { receivers: stack, processors: ["resource/stack", "batch"], exporters: ["otlphttp/gateway"] } } : {}),
162
196
  },
163
197
  },
164
198
  };
165
199
  }
166
- /** The collector's objects, when it runs. */
167
- export function collectorObjects(config) {
168
- if (!collectorRuns(config))
169
- return [];
170
- const { telemetry, workspaceStorage } = config;
171
- const configuration = collectorConfig(config);
172
- // The namespaces it finds pods to scrape in: the driver's, JuiceFS's, and its own, neon-control's and the object store's parts'.
173
- const listed = [...(workspaceStorage.enabled ? [workspaceStorage.csi.namespace] : []), ...(config.neon.enabled ? [NAMESPACE] : [])];
174
- const metadata = { name: COLLECTOR, namespace: NAMESPACE, labels: stackLabels(COMPONENT) };
200
+ /** A collector's container, `name`, run on the configuration its ConfigMap mounts at /etc/otelcol. */
201
+ function collectorContainer(config, name, { env, resources, ports, headers }) {
202
+ return {
203
+ name,
204
+ image: imageReference(config.images.collector),
205
+ imagePullPolicy: config.images.pullPolicy,
206
+ args: ["--config=/etc/otelcol/config.yaml"],
207
+ ...given("env", env),
208
+ ports: [...ports, { name: "health", containerPort: 13133 }],
209
+ readinessProbe: { httpGet: { path: "/", port: "health" }, periodSeconds: 5 },
210
+ securityContext: { ...restrictedContainer(), readOnlyRootFilesystem: true },
211
+ ...(resources ? { resources } : {}),
212
+ volumeMounts: [
213
+ { name: "config", mountPath: "/etc/otelcol", readOnly: true },
214
+ ...(headers ? [{ name: "headers", mountPath: "/etc/otelcol/headers", readOnly: true }] : []),
215
+ ],
216
+ };
217
+ }
218
+ /**
219
+ * The gateway's objects: who it is, its configuration, its Service, its Deployment, and what
220
+ * scales and sizes it. Its ServiceAccount, of no rights and no token in its pods, is named in
221
+ * its pods as it is: where a pod template names none, Kubernetes keeps the one it was named
222
+ * before in serviceAccount, deprecated, which a template applied over an older one keeps, so
223
+ * its pods would name a ServiceAccount the installation no longer has.
224
+ */
225
+ function gatewayObjects(config) {
226
+ const { telemetry } = config;
227
+ const { scaling, resources } = telemetry.collector.gateway;
228
+ const configuration = gatewayConfig(config);
229
+ const metadata = { name: COLLECTOR, namespace: NAMESPACE, labels: stackLabels(GATEWAY_COMPONENT) };
175
230
  const configMap = { apiVersion: "v1", kind: "ConfigMap", metadata, data: { "config.yaml": goJson(configuration, " ") } };
176
231
  const service = {
177
232
  apiVersion: "v1",
178
233
  kind: "Service",
179
234
  metadata,
180
- spec: { selector: selectorLabels(COMPONENT), ports: [{ name: "otlp-http", port: COLLECTOR_PORT, targetPort: "otlp-http" }] },
235
+ spec: { selector: selectorLabels(GATEWAY_COMPONENT), ports: [{ name: "otlp-http", port: COLLECTOR_PORT, targetPort: "otlp-http" }] },
181
236
  };
237
+ const env = lakeRuns(config) ? [{ name: "LOG_PASSWORD", valueFrom: { secretKeyRef: { name: logPrincipalSecret("gateway"), key: "password" } } }] : [];
238
+ const volumes = [
239
+ { name: "config", configMap: { name: COLLECTOR } },
240
+ // The external exporter's headers: a YAML map, under the key headersKey + ".yaml"
241
+ // in the headers Secret, since the collector takes headers as a map.
242
+ ...(telemetry.headersSecret
243
+ ? [{ name: "headers", secret: { secretName: telemetry.headersSecret, items: [{ key: `${telemetry.headersKey}.yaml`, path: "headers.yaml" }] } }]
244
+ : []),
245
+ ];
246
+ const deployment = {
247
+ apiVersion: "apps/v1",
248
+ kind: "Deployment",
249
+ metadata,
250
+ spec: {
251
+ ...replicasOf(scaling),
252
+ selector: { matchLabels: selectorLabels(GATEWAY_COMPONENT) },
253
+ template: {
254
+ metadata: { labels: stackLabels(GATEWAY_COMPONENT), annotations: { "checksum/config": sha256(goJson(configuration)) } },
255
+ spec: {
256
+ serviceAccountName: COLLECTOR,
257
+ automountServiceAccountToken: false,
258
+ ...priority("floor"),
259
+ ...stackPodSpec(config),
260
+ ...spread(GATEWAY_COMPONENT, scaling),
261
+ containers: [
262
+ collectorContainer(config, "collector", { env, resources, ports: [{ name: "otlp-http", containerPort: COLLECTOR_PORT }], headers: Boolean(telemetry.headersSecret) }),
263
+ ],
264
+ volumes,
265
+ },
266
+ },
267
+ },
268
+ };
269
+ const serviceAccount = { apiVersion: "v1", kind: "ServiceAccount", metadata, automountServiceAccountToken: false };
270
+ return [
271
+ serviceAccount,
272
+ configMap,
273
+ service,
274
+ deployment,
275
+ // Its start is its configuration read and its exporters connected, in seconds; then the
276
+ // batches its clients held while it was not ready, a minute's at most.
277
+ ...cpuScaledObject(deployment, scaling, { percent: 80, startUpSeconds: 60 }),
278
+ ...replicaBudget(GATEWAY_COMPONENT, NAMESPACE, scaling),
279
+ verticalPodAutoscaler(deployment, "InPlace", scaled(scaling) ? ["memory"] : undefined),
280
+ ];
281
+ }
282
+ /** The scraper's objects: who it is, that it may list the nodes and read their kubelets' stats, and the pods it scrapes, its configuration and its Deployment. */
283
+ function scraperObjects(config) {
284
+ const scraped = scrapes(config);
285
+ const read = valkeys(config);
286
+ const configuration = scraperConfig(scraped, read);
287
+ const metadata = { name: SCRAPER, namespace: NAMESPACE, labels: stackLabels(SCRAPER_COMPONENT) };
288
+ const configMap = { apiVersion: "v1", kind: "ConfigMap", metadata, data: { "config.yaml": goJson(configuration, " ") } };
182
289
  const deployment = {
183
290
  apiVersion: "apps/v1",
184
291
  kind: "Deployment",
185
292
  metadata,
186
293
  spec: {
187
294
  ...replicasOf(ONE),
188
- selector: { matchLabels: selectorLabels(COMPONENT) },
295
+ selector: { matchLabels: selectorLabels(SCRAPER_COMPONENT) },
189
296
  template: {
190
- metadata: { labels: stackLabels(COMPONENT), annotations: { "checksum/config": sha256(goJson(configuration)) } },
297
+ metadata: { labels: stackLabels(SCRAPER_COMPONENT), annotations: { "checksum/config": sha256(goJson(configuration)) } },
191
298
  spec: {
192
- ...(listed.length > 0 ? { serviceAccountName: COLLECTOR } : {}),
299
+ serviceAccountName: SCRAPER,
193
300
  ...priority("floor"),
194
301
  ...stackPodSpec(config),
195
- containers: [{
196
- name: "collector",
197
- image: imageReference(telemetry.collector.image),
198
- imagePullPolicy: "IfNotPresent",
199
- args: ["--config=/etc/otelcol/config.yaml"],
200
- ...given("env", valkeys(config).map(({ secret, variable }) => ({ name: variable, valueFrom: valkeyPassword(secret) }))),
201
- ports: [{ name: "otlp-http", containerPort: COLLECTOR_PORT }, { name: "health", containerPort: 13133 }],
202
- readinessProbe: { httpGet: { path: "/", port: "health" }, periodSeconds: 5 },
203
- securityContext: { ...restrictedContainer(), readOnlyRootFilesystem: true },
204
- resources: telemetry.collector.resources,
205
- volumeMounts: [
206
- { name: "config", mountPath: "/etc/otelcol", readOnly: true },
207
- ...(telemetry.headersSecret ? [{ name: "headers", mountPath: "/etc/otelcol/headers", readOnly: true }] : []),
208
- ],
209
- }],
210
- volumes: [
211
- { name: "config", configMap: { name: COLLECTOR } },
212
- // The external exporter's headers: a YAML map, under the key headersKey + ".yaml"
213
- // in the headers Secret, since the collector takes headers as a map.
214
- ...(telemetry.headersSecret
215
- ? [{ name: "headers", secret: { secretName: telemetry.headersSecret, items: [{ key: `${telemetry.headersKey}.yaml`, path: "headers.yaml" }] } }]
216
- : []),
302
+ containers: [
303
+ collectorContainer(config, "scraper", {
304
+ env: read.map(({ secret, variable }) => ({ name: variable, valueFrom: valkeyPassword(secret) })),
305
+ resources: config.telemetry.collector.scraper.resources,
306
+ ports: [],
307
+ headers: false,
308
+ }),
217
309
  ],
310
+ volumes: [{ name: "config", configMap: { name: SCRAPER } }],
218
311
  },
219
312
  },
220
313
  },
221
314
  };
222
- const sized = [deployment, verticalPodAutoscaler(deployment, "InPlace")];
223
- if (listed.length === 0)
224
- return [configMap, service, ...sized];
225
- // Who the collector is, and that it may find the pods it scrapes in the namespaces they are in.
315
+ const sized = [configMap, deployment, verticalPodAutoscaler(deployment, "InPlace")];
316
+ // Who the scraper is, and that it may list the nodes and read their kubelets' stats.
226
317
  const serviceAccount = { apiVersion: "v1", kind: "ServiceAccount", metadata };
318
+ const clusterMetadata = { name: SCRAPER, labels: metadata.labels };
319
+ const nodeReader = {
320
+ apiVersion: "rbac.authorization.k8s.io/v1",
321
+ kind: "ClusterRole",
322
+ metadata: clusterMetadata,
323
+ rules: [{ apiGroups: [""], resources: ["nodes"], verbs: ["get", "list", "watch"] }, { apiGroups: [""], resources: ["nodes/stats"], verbs: ["get"] }],
324
+ };
325
+ const nodeReading = {
326
+ apiVersion: "rbac.authorization.k8s.io/v1",
327
+ kind: "ClusterRoleBinding",
328
+ metadata: clusterMetadata,
329
+ subjects: [{ kind: "ServiceAccount", name: SCRAPER, namespace: NAMESPACE }],
330
+ roleRef: { apiGroup: "rbac.authorization.k8s.io", kind: "ClusterRole", name: SCRAPER },
331
+ };
332
+ if (scraped.length === 0)
333
+ return [serviceAccount, nodeReader, nodeReading, ...sized];
334
+ // And that it may find the pods it scrapes in its own namespace, where they are.
335
+ const listed = [NAMESPACE];
227
336
  const podLister = (namespace) => {
228
337
  const inNamespace = { ...metadata, namespace };
229
338
  const role = {
@@ -236,11 +345,17 @@ export function collectorObjects(config) {
236
345
  apiVersion: "rbac.authorization.k8s.io/v1",
237
346
  kind: "RoleBinding",
238
347
  metadata: inNamespace,
239
- subjects: [{ kind: "ServiceAccount", name: COLLECTOR, namespace: NAMESPACE }],
240
- roleRef: { apiGroup: "rbac.authorization.k8s.io", kind: "Role", name: COLLECTOR },
348
+ subjects: [{ kind: "ServiceAccount", name: SCRAPER, namespace: NAMESPACE }],
349
+ roleRef: { apiGroup: "rbac.authorization.k8s.io", kind: "Role", name: SCRAPER },
241
350
  };
242
351
  return [role, binding];
243
352
  };
244
- return [serviceAccount, ...listed.flatMap(podLister), configMap, service, ...sized];
353
+ return [serviceAccount, nodeReader, nodeReading, ...listed.flatMap(podLister), ...sized];
354
+ }
355
+ /** The collector's objects, when it runs: its gateway's, and its scraper's. */
356
+ export function collectorObjects(config) {
357
+ if (!collectorRuns(config))
358
+ return [];
359
+ return [...gatewayObjects(config), ...scraperObjects(config)];
245
360
  }
246
361
  //# sourceMappingURL=collector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../../../src/manifests/collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../../../src/manifests/collector.ts"],"names":[],"mappings":"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"}
@@ -19,14 +19,19 @@ export const NAMESPACE = "alasio";
19
19
  export const RELEASE = "alasio";
20
20
  /** main: alasio's own environment. */
21
21
  export const MAIN_ENVIRONMENT = { namespace: NAMESPACE, branch: null };
22
- /** The label of a branch environment's objects and namespaces, whose value is its name. */
23
- export const BRANCH_LABEL = "alasio.dev/branch";
22
+ export { BRANCH_LABEL } from "../../../src/branch/names.js";
24
23
  /** A component's name: `alasio-<component>`. */
25
24
  export function componentName(component) {
26
25
  return `${RELEASE}-${component}`;
27
26
  }
28
27
  /** The Secret of a branch environment's token, which its parent forks the sessions it inherited for (src/branch/fork.ts). */
29
28
  export const BRANCH_FORK_SECRET = componentName("branch-fork");
29
+ /**
30
+ * The Secret of an environment's callers' key to the sandbox gateway, of the gateway's
31
+ * (src/binder/names.ts environmentKey), in its alasio's namespace: main's, as Neon's setup
32
+ * renders it, and a branch environment's, as `alasio branch create` writes it.
33
+ */
34
+ export const SESSIONS_CALLER_SECRET = componentName("sessions-caller");
30
35
  /** A Neon service's name: `alasio-neon-<component>`. */
31
36
  export function neonName(component) {
32
37
  return componentName(`neon-${component}`);
@@ -46,6 +51,15 @@ export function labels(component) {
46
51
  export function stackLabels(component) {
47
52
  return { ...labels(component), "alasio.dev/stack": "neon" };
48
53
  }
54
+ /**
55
+ * Labels as a StatefulSet's claim template carries them: `of`, but the release's version,
56
+ * as Kubernetes changes no StatefulSet's claim templates, which the version would change at
57
+ * each release, every upgrade refused.
58
+ */
59
+ export function claimLabels(of) {
60
+ const { "app.kubernetes.io/version": _version, ...kept } = of;
61
+ return kept;
62
+ }
49
63
  /** The labels that select a component's pods. */
50
64
  export function selectorLabels(component) {
51
65
  return { "app.kubernetes.io/name": "alasio", "app.kubernetes.io/instance": RELEASE, "app.kubernetes.io/component": component };
@@ -54,6 +68,8 @@ export function selectorLabels(component) {
54
68
  export const ONE = { min: 1, max: 1 };
55
69
  /** Whether a scaler moves a component of `scale` between its min and max. */
56
70
  export const scaled = ({ min, max }) => min !== max;
71
+ /** Whether a component of `scale` sleeps, none of its pods running, until its scaler wakes it. */
72
+ export const sleeps = ({ min }) => min === 0;
57
73
  /**
58
74
  * The replicas of a workload of `scale`: the count it fixes; or none where its scaler
59
75
  * moves it, which then owns the field, as applying alasio would take it back otherwise.
@@ -213,4 +229,18 @@ export function goJson(value, indent) {
213
229
  export function sha256(text) {
214
230
  return createHash("sha256").update(text).digest("hex");
215
231
  }
232
+ /** A Role in `namespace` of `rules`, named for the ServiceAccount `account` of alasio's namespace, and its binding to it. */
233
+ export function accountRole(account, component, namespace, rules) {
234
+ const metadata = { name: account, namespace, labels: labels(component) };
235
+ return [
236
+ { apiVersion: "rbac.authorization.k8s.io/v1", kind: "Role", metadata, rules },
237
+ {
238
+ apiVersion: "rbac.authorization.k8s.io/v1",
239
+ kind: "RoleBinding",
240
+ metadata,
241
+ roleRef: { apiGroup: "rbac.authorization.k8s.io", kind: "Role", name: account },
242
+ subjects: [{ kind: "ServiceAccount", name: account, namespace: NAMESPACE }],
243
+ },
244
+ ];
245
+ }
216
246
  //# sourceMappingURL=common.js.map