@mark1russell7/kind 0.11.11 → 0.12.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/README.md +24 -2
- package/build/index.d.ts +106 -6
- package/build/index.js +360 -38
- package/build/index.js.map +1 -1
- package/build/{judge-0ku_4dsJ.d.ts → judge-BH4WtL3f.d.ts} +47 -15
- package/build/{judge-CLBiWALR.js → judge-CMQeiw8k.js} +13 -7
- package/build/{judge-CLBiWALR.js.map → judge-CMQeiw8k.js.map} +1 -1
- package/build/judge.d.ts +2 -2
- package/build/judge.js +1 -1
- package/image/agent.mjs +20 -6
- package/package.json +1 -1
- package/src/backends.ts +59 -4
- package/src/compose.ts +37 -2
package/README.md
CHANGED
|
@@ -62,10 +62,12 @@ The tests read three real records of `/1` (`test/records/`): a cell that holds,
|
|
|
62
62
|
|
|
63
63
|
## The cluster
|
|
64
64
|
|
|
65
|
-
- **The scenario** (`scenario.ts`) is the cluster as data: its nodes, its version,
|
|
65
|
+
- **The scenario** (`scenario.ts`) is the cluster as data: its nodes, its version, its dataplane, the sync periods of kube-proxy, its CNI and its subnets. `kindConfig(scenario)` generates the configuration of kind from it.
|
|
66
|
+
- **The dataplane** (`Dataplane`) is the path of a Service on each node, and the mode of a cell. From 0.12.0, it is a mode of kube-proxy (`iptables`, `ipvs`, `nftables`), or `cilium`. A scenario of `cilium` has no kube-proxy and no kindnet (`kubeProxy: null`, `cni: "cilium"`).
|
|
66
67
|
- **The node image** is `kindest/node:v1.37.0`, pinned by digest, the default of kind v0.33.0. The research names v1.37.1 for some defaults. The patch release is the mismatch.
|
|
67
68
|
- **The tools** (`tools.ts`) are kind v0.33.0 and kubectl v1.37.0. The lab downloads each one into `.cache/` in this package, and it compares the sha256 with the pinned value at each use. `KIND_CACHE` names another folder. The lab installs nothing on the system, and the same code works on Linux, macOS and Windows.
|
|
68
69
|
- **istioctl 1.31.3** (`ISTIOCTL`) comes in a gzipped tar file. The pinned sha256 is that of the tar file. The cache keeps the tar file, and each use examines it and takes the tool from it again (`tarEntry`). The release has a zip file for Windows, thus Windows has no asset of istioctl.
|
|
70
|
+
- **Helm v3.22.1** (`HELM`) installs Cilium. It also comes in a gzipped tar file. Its tar file for Windows has `helm.exe`, thus Windows has no asset of Helm.
|
|
69
71
|
- **The isolation.** Each cluster gets its own Docker network, its own kubeconfig and its own cache for kubectl, in its run folder. The lab refuses a pod or service subnet that overlaps a Docker network.
|
|
70
72
|
|
|
71
73
|
## The lab
|
|
@@ -82,6 +84,7 @@ The tests read three real records of `/1` (`test/records/`): a cell that holds,
|
|
|
82
84
|
- Each second, the agent reads the counters of dropped packets (`drops.ts`), and it writes a `drops` line with each counter that grew. For the node, these are the drops of the backlogs, the squeezes of the softirqs, and the drops of each veth.
|
|
83
85
|
- For each client pod, the agent reads `/proc/<pid>/net`. These counters are the IP discards, the sends with no route, the failed connects, the drops of its interfaces, and its neighbors with no address. From 0.1.5, they also count the ICMP errors of an unreachable destination. A refusal by a reject rule is such an error, not a reset. A SYN that does not get to the conntrack of the node leaves its trace in one of them.
|
|
84
86
|
- **The rules of each node.** The agent reads the rules of kube-proxy in the namespaces of the node each 50 ms: `iptables-save`, `nft list table ip kube-proxy`, or `/proc/net/ip_vs`. It writes a line when the backends of the Service change (`backends.ts`). A backend of IPVS with the weight zero takes no new connection, thus it is not a backend.
|
|
87
|
+
- From 0.12.0, in the dataplane `cilium`, the agent asks the agent of Cilium on its socket in the node: `GET /v1/service`. The backends are those in the state `active`, or the `terminating` ones when no backend is active (`ciliumBackendsOf`). A reply that does not parse gives a `rules-fail` line.
|
|
85
88
|
- **The endpoints of each client sidecar.** From 0.3.0, in a sidecar mesh, the agent also polls the Envoy of the client sidecar on its node each 50 ms (`eds`). The client sidecar picks the backend of each call, thus these endpoints and not the rules are the propagation of the cell (`propagationSource`).
|
|
86
89
|
- A poller enters the network namespace of the client pod (`nsenter -n`). It reads `/clusters` on `127.0.0.1:15000` with a filter that selects the server cluster (`eds.ts`).
|
|
87
90
|
- Each change of the healthy hosts gives an `eds` line with the start of the poll before it. That line has the form of a rules line. Each second, an `eds-alive` line counts the polls and gives their mean time.
|
|
@@ -152,6 +155,7 @@ The lab image (`image/`) holds the service of a cell on `@mark1russell7/service`
|
|
|
152
155
|
|
|
153
156
|
- **The keep-alive clients.** A workload with `connections` gives each HTTP client that count of keep-alive connections. Each request goes on the next connection in turn. kube-proxy selects a backend only for a new connection. SIGHUP gives the client new connections, and its old connections close after the timeout. With no `connections`, each request has a new connection, as before.
|
|
154
157
|
- **The lame duck.** The declaration has the optional field `lameDuck`. With true or no value, the edge sends `Connection: close` while the service is not ready (`httpTransport` as it is). With false, the app gives the transport `keepAlive: () => true`, thus each connection stays open and a caller learns only from the endpoints.
|
|
158
|
+
- **The shared gate.** The declaration has the optional field `sharedGate`, a candidate of S6 that is off by default. With true, the app gives its health server `sharedGate()` of this package. The readiness probe that the kubelet reads then leaves out each check of the Redis of the declaration, which must have Redis. The controller still reads those checks, thus the service refuses each request with a 503. A check of no dependency, a drain or a failed liveness still fails the probe.
|
|
155
159
|
- **HTTP/2.** The declaration has the optional field `protocol` (`EdgeProtocol`). With `h2c`, the app listens with `node:http2` through the same `httpTransport`, and the lame duck is a GOAWAY on each session. The manifests give each client `PROTOCOL=h2c`. The client then keeps `connections` sessions, and sends each request as a stream on the next session in turn.
|
|
156
160
|
- A GOAWAY, a close or an error of a session makes its slot open a new session at the next stream. Then kube-proxy selects a backend for that new connection.
|
|
157
161
|
- The client sends a stream that the server did not take again, once, on a new session (RFC 9113, section 8.7). Its line has `r: 1`.
|
|
@@ -265,7 +269,11 @@ From 0.8.0, a prediction `ends` can be the end of the tunnel of each client (`of
|
|
|
265
269
|
- The first request of each client after the heal must be `ok`, on a new tunnel. The main value is the middle of the ends, in `s`.
|
|
266
270
|
- From 0.8.1, `ends` has the optional band `answer`. A change to CLOSE_WAIT in that band ± δ also agrees: the peer answers the close of the client, and its FIN comes first. Before the band, the peer closed first.
|
|
267
271
|
|
|
268
|
-
|
|
272
|
+
In 0.12.0, `kubeProxy` of a scenario can be null, `cni` can be `cilium`, and the mode of a cell can be `cilium`. A reader of `kubeProxy.mode` breaks, thus this is a breaking change before 1.0.0. To migrate, examine `kubeProxy` for null, and read the mode from `dataplane`. The record format stays `/2`.
|
|
273
|
+
|
|
274
|
+
The optional field `protocol` of a declaration, the type `EdgeProtocol` and the mode h2c of the lab image are new features. The optional field `sharedGate` of a declaration and the function `sharedGate` are new features. They keep the old behavior, thus their release is a patch. The record format stays `/2`.
|
|
275
|
+
|
|
276
|
+
They keep the old behavior. Before `1.0.0`, a feature is a patch, thus the next version is `0.11.1`. The record format stays `/2`.
|
|
269
277
|
|
|
270
278
|
A new member of the union `TriggerKind`, `cannot-serve`, breaks a reader that switches on it. That is a breaking change before 1.0.0, thus the next version is 0.11.0. The record format stays `/2`, with the optional fields `connections` of a workload and `lameDuck` of a declaration. The line `client` of the reconnect is a new line of a run.
|
|
271
279
|
|
|
@@ -291,11 +299,25 @@ A preStop sleep that is longer than the grace is a command in the container (`sh
|
|
|
291
299
|
|
|
292
300
|
The catalogs are in `@systems/cells` (`t07.ts`, `t18.ts`, `grpc/t07.ts` and `grpc/t15.ts`). `KIND_LAB=1` starts them in kind.
|
|
293
301
|
|
|
302
|
+
## Cilium
|
|
303
|
+
|
|
304
|
+
From 0.12.0, a cell can have the dataplane `cilium`: Cilium 1.20.4 is the CNI, and it replaces kube-proxy (`cilium.ts`).
|
|
305
|
+
|
|
306
|
+
- **The cluster.** kind makes the cluster with no kube-proxy and no CNI, thus it does not wait for ready nodes. Then the lab loads the images of Cilium and installs it, before each other image.
|
|
307
|
+
- **The install.** `installCilium` installs the chart of 1.20.4, pinned by sha256 (`CILIUM_CHART`), with Helm. Then it waits for the agent, the operator, Envoy, each node and CoreDNS. A failed install gives the pods of kube-system and the log of the agent in its error.
|
|
308
|
+
- **The values** (`ciliumValues`). `kubeProxyReplacement` is true, and the agent reaches the API server on the control plane. The IPAM is `kubernetes`, as the kind guide of Cilium tells. The operator has one replica. Each other value is the default of the chart.
|
|
309
|
+
- **Socket LB** stays at its default: on, because the replacement of kube-proxy sets it. It selects a backend at each `connect()`, thus an established connection keeps its backend, as with kube-proxy.
|
|
310
|
+
- **The images.** `CILIUM_IMAGES` pins the agent, the operator and Envoy by the digests of the chart. `pullPolicy` is `Never`.
|
|
311
|
+
- **The mode** of the cluster manifest gives the version of Cilium and the keys of `cilium-config` that a cell depends on (`ciliumMode`).
|
|
312
|
+
- **The target `kube-proxy`** of a freeze needs kube-proxy. A cell of `cilium` with that target fails with a clear error.
|
|
313
|
+
|
|
294
314
|
## CI
|
|
295
315
|
|
|
296
316
|
The cells operate on the runners of GitHub, and not on a machine that does other work (`.github/workflows/kind.yml`). Each shard gets a runner, and each job makes its own clusters and deletes them.
|
|
297
317
|
|
|
298
318
|
- **The modes of the kernel.** kube-proxy in a node container uses the modules of the host kernel. Thus the job loads `ip_vs` and `nf_tables` first. A cell of a mode that the kernel cannot do waits, and `summary.ndjson` tells why.
|
|
319
|
+
- **The dataplane `cilium`** needs cgroup v2 on the runner. The job examines it, and a cell of `cilium` waits on a runner without it.
|
|
320
|
+
- **The capture.** The job `capture` makes a cluster of `cilium` and dumps the services of the agent of each node in three states of the backends (`src/cilium.capture.test.ts`). It uploads the artifact `cilium-capture`. The unit tests of `ciliumBackendsOf` read a part of a real dump (`test/cilium/`).
|
|
299
321
|
- **The inotify limits.** The pods of each node share the inotify limits of the kernel of the runner. Thus the job raises them to 512 instances and 524288 watches, the values of the known issues of kind.
|
|
300
322
|
- **The shards.** `shardOf` gives each shard an equal share of the estimated time, and the cells of one mode stay together. Thus a shard makes few clusters.
|
|
301
323
|
- **The output.** Each job uploads its raw records, `summary.ndjson`, and what the runner is. The run folder of each cluster stays out of the output, because a kubeconfig holds credentials.
|
package/build/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { $ as unitOf, $t as secondsOf, A as TriggerV1, An as
|
|
1
|
+
import { $ as unitOf, $t as secondsOf, A as TriggerV1, An as KubeProxyMode, At as restartsAt, B as RunCheck, Bn as kindConfig, Bt as stoppingOf, C as KindCellResult, Cn as WindowPrediction, Ct as kernelCounts, D as PredictionV1, Dn as KUBE_PROXY_MODES, Dt as recordsOf, E as LoadSample, En as Dataplane, Et as podsOf, F as KIND_NOISE, Fn as ZONE_LOST, Ft as sliceEmptyOf, G as factsOf, Gn as zoneOf, Gt as CLIENT, H as checkRun, Hn as nodeNames, Ht as tunnelsOf, I as KindDecision, In as cidrOverlap, It as sliceReadyAt, J as observationEnd, Jt as PORT, K as judgeKind, Kt as HEALTH_PORT, L as KindVerdict, Ln as cidrRange, Lt as sliceReadyOf, M as upgrade, Mn as NodeImage, Mt as signalOf, N as upgradeCell, Nn as ZONE_KEPT, Nt as signalsOf, O as RunCheckV1, On as KindConfig, Ot as requestsOf, P as Deleted, Pn as ZONE_LABEL, Pt as sliceDropOf, Q as reusesReset, Qt as seconds, R as LAST_SLACK, Rn as goDuration, Rt as slicesOf, S as KindCellRecordV1, Sn as TriggerKind, St as isTunnelState, T as KindVerdictV1, Tn as DATAPLANES, Tt as podsAt, U as cyclesOf, Un as scenario, Ut as ztunnelPodsOf, V as RunFacts, Vn as kubeProxyPatch, Vt as transitionOf, W as deletionsOf, Wn as scenarioProblems, Wt as ztunnelReplaced, X as propagationSource, Xt as SERVER, Y as propagationOf, Yt as REDIS, Z as referenceOf, Zt as bandOf, _ as ClusterManifest, _n as Replica, _t as deletionOf, a as STAGES, an as Flap, at as PropagationSource, b as FORMAT_V1, bn as Template, bt as failuresOf, c as readRecord, cn as KubeletProbe, ct as RulesLine, d as calibrationOf, dn as MeshMode, dt as TCP_STATE, en as showBand, et as updatesOf, f as cellsTable, fn as NonePrediction, ft as TunnelLine, g as BandV1, gn as Reference, gt as byNode, h as timeSpread, hn as RedisDeclaration, ht as byClients, i as quantileOf, in as EdgeProtocol, it as PodLine, j as judge, jn as NODE_IMAGES, jt as rulesOf, k as RunFactsV1, kn as KindScenario, kt as restartOf, l as Judged, ln as Mesh, lt as SliceLine, m as predictionText, mn as Prediction, mt as backendsAt, n as medianInterval, nn as Cycle, nt as HBONE_PORT, o as kindCellRecordSchema, on as KindCell, ot as RecordLine, p as medianText, pn as PodSettings, pt as ZtunnelPodLine, q as observationAfter, qt as LOG_LABEL, r as middle, rn as Declaration, rt as Line, s as kindCellRecordV1Schema, sn as KindRun, st as Request, t as RELATIVE, tn as Band, tt as Endpoint, u as TimeSpread, un as MeshFlavor, ut as SocketLine, v as EnvironmentManifest, vn as ResetReuse, vt as dropOf, w as KindCellV1, wn as Workload, wt as outcomesOf, x as KindCellRecord, xn as Trigger, xt as intakeOf, y as FORMAT, yn as Stack, yt as emptyOf, z as Propagated, zn as isKubeProxyMode, zt as socketsOf } from "./judge-BH4WtL3f.js";
|
|
2
2
|
import { Quantity } from "@mark1russell7/quantity";
|
|
3
|
-
import { CheckFn, Finding, HealthServer, Poll, Scenario, ServiceBuilder, ServiceDescription, Stage, StopWay, Timing, TransportImpl, Verdict } from "@mark1russell7/service";
|
|
3
|
+
import { CheckFn, Coupling, Finding, HealthServer, Poll, Scenario, ServiceBuilder, ServiceDescription, Stage, StopWay, Timing, TransportImpl, Verdict } from "@mark1russell7/service";
|
|
4
4
|
import { BuildImage } from "@mark1russell7/harness";
|
|
5
5
|
import { RedisClient } from "@mark1russell7/service/redis";
|
|
6
6
|
import { DRAIN_RULES, O04, O09, O10, O16 } from "@mark1russell7/service/rules";
|
|
7
7
|
//#region src/backends.d.ts
|
|
8
|
-
/** A service rule names the Service whose backends the agent reads: its namespace, its name, and its ClusterIP and port for IPVS. */
|
|
8
|
+
/** A service rule names the Service whose backends the agent reads: its namespace, its name, and its ClusterIP and port for IPVS and Cilium. */
|
|
9
9
|
interface ServiceRule {
|
|
10
|
-
readonly mode: "iptables" | "ipvs" | "nftables";
|
|
10
|
+
readonly mode: "iptables" | "ipvs" | "nftables" | "cilium";
|
|
11
11
|
readonly ns: string;
|
|
12
12
|
readonly svc: string;
|
|
13
13
|
readonly ip: string;
|
|
@@ -20,8 +20,26 @@ interface ServiceRule {
|
|
|
20
20
|
* - iptables: the `KUBE-SVC` chain of the Service jumps to a `KUBE-SEP` chain for each backend, and that chain does the DNAT.
|
|
21
21
|
* - nftables: the `service-` chain of the Service does the DNAT to each backend, or it names an `endpoint-` chain for each one.
|
|
22
22
|
* - IPVS: `/proc/net/ip_vs` has the line of the virtual service, then a line for each real server.
|
|
23
|
+
* - Cilium: the JSON of the services of the agent (`ciliumBackendsOf`).
|
|
23
24
|
*/
|
|
24
25
|
export declare const backendsOf: (mode: ServiceRule["mode"], text: string, rule: Pick<ServiceRule, "ns" | "svc" | "ip" | "port">) => string[];
|
|
26
|
+
/**
|
|
27
|
+
* This function gives the backends of a Service in the reply of `GET /v1/service` of the agent of
|
|
28
|
+
* Cilium 1.20, as `ip:port`, sorted. The model is `ServiceSpec` of `api/v1/openapi.yaml`. The
|
|
29
|
+
* frontend is the ClusterIP and the port of the rule, with the scope `external` or no scope.
|
|
30
|
+
*
|
|
31
|
+
* The backends are those in the state `active`, or with no state. If no backend is active, the
|
|
32
|
+
* backends are those in the state `terminating`. The BPF reconciler gives the slots of a service
|
|
33
|
+
* in this sequence (`pkg/loadbalancer/reconciler/bpf_reconciler.go`). Thus a new connection goes
|
|
34
|
+
* only to them. kube-proxy does the same with the endpoints that serve and stop. The other
|
|
35
|
+
* states take no new connection: `terminating-not-serving`, `quarantined` and `maintenance`.
|
|
36
|
+
*/
|
|
37
|
+
export declare const ciliumBackendsOf: (text: string, rule: Pick<ServiceRule, "ip" | "port">) => string[];
|
|
38
|
+
/**
|
|
39
|
+
* This function tells if a dump of the rules names the Service of a rule. The rules of kube-proxy
|
|
40
|
+
* name it as `namespace/name`. The JSON of Cilium names it in the flags of its frontend.
|
|
41
|
+
*/
|
|
42
|
+
export declare const namesService: (mode: ServiceRule["mode"], text: string, rule: Pick<ServiceRule, "ns" | "svc">) => boolean;
|
|
25
43
|
//#endregion
|
|
26
44
|
//#region src/cluster.d.ts
|
|
27
45
|
/** The credentials of the API, as a container on the network of the cluster reaches it. */
|
|
@@ -57,6 +75,71 @@ interface Cluster {
|
|
|
57
75
|
*/
|
|
58
76
|
export declare const createCluster: (scenario: KindScenario, dir: string) => Promise<Cluster>;
|
|
59
77
|
//#endregion
|
|
78
|
+
//#region src/cilium.d.ts
|
|
79
|
+
/**
|
|
80
|
+
* This module installs Cilium 1.20.4 in a kind cluster with Helm, from images pinned by digest.
|
|
81
|
+
* Cilium is the CNI and replaces kube-proxy (the dataplane `cilium`). Each value of the install
|
|
82
|
+
* that is not a default of the chart is in `ciliumValues`, with its reason.
|
|
83
|
+
*/
|
|
84
|
+
/** This version is the release of Cilium of the lab, from 2026-10-23: the version of the chart and the tag of each image. */
|
|
85
|
+
export declare const CILIUM_VERSION = "1.20.4";
|
|
86
|
+
/** This chart is the Helm chart of Cilium 1.20.4. The sha256 is of the file on `helm.cilium.io` (read on 2026-10-27). */
|
|
87
|
+
export declare const CILIUM_CHART: {
|
|
88
|
+
readonly url: string;
|
|
89
|
+
readonly sha256: string;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* These are the images that the install needs, pinned by the digests that the chart of 1.20.4 names
|
|
93
|
+
* (`values.yaml`). The agent, the operator and Envoy are the only images: the install has no
|
|
94
|
+
* node init, no preflight and no Hubble relay. The lab pulls each one by its digest, tags it
|
|
95
|
+
* (`localPin`), and loads it into each node. Thus no node pulls from a registry.
|
|
96
|
+
*/
|
|
97
|
+
export declare const CILIUM_IMAGES: {
|
|
98
|
+
readonly agent: string;
|
|
99
|
+
readonly operator: string;
|
|
100
|
+
readonly envoy: string;
|
|
101
|
+
};
|
|
102
|
+
/** These are the local tags of the images of Cilium, after the pull by digest. */
|
|
103
|
+
interface CiliumImages {
|
|
104
|
+
readonly agent: string;
|
|
105
|
+
readonly operator: string;
|
|
106
|
+
readonly envoy: string;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* This function gives the Helm values of the install in a cluster. The values that are not the
|
|
110
|
+
* defaults of the chart:
|
|
111
|
+
* - `kubeProxyReplacement: true`, and the address of the API server on the control plane. With no
|
|
112
|
+
* kube-proxy, the agent cannot reach the API through its Service
|
|
113
|
+
* (`Documentation/network/kubernetes/kubeproxy-free.rst`).
|
|
114
|
+
* - `ipam.mode: kubernetes`: the agent takes the pod CIDR of each node from the node, as the kind
|
|
115
|
+
* guide tells (`Documentation/installation/kind.rst`). Thus the pod subnet of the scenario holds.
|
|
116
|
+
* - Each image is an `override`: the helper `cilium.image` of the chart then uses it as it is
|
|
117
|
+
* (`templates/_helpers.tpl`). `pullPolicy: Never`: each image is on each node.
|
|
118
|
+
* - The operator has one replica, not two. Its anti-affinity puts each replica on a different node,
|
|
119
|
+
* and no cell examines a failover of the operator.
|
|
120
|
+
*
|
|
121
|
+
* Socket LB stays at its default. KPR sets it on (`pkg/kpr/kpr.go`). It selects a backend at
|
|
122
|
+
* `connect()`. A connection keeps its backend, as with the conntrack NAT of kube-proxy. On the
|
|
123
|
+
* deletion of a backend, the agent destroys only its UDP sockets, because
|
|
124
|
+
* `LBSockTerminateAllProtos` is off by default (`pkg/loadbalancer/reconciler/termination.go`).
|
|
125
|
+
*/
|
|
126
|
+
export declare const ciliumValues: (clusterName: string, images: CiliumImages) => Record<string, unknown>;
|
|
127
|
+
/** These are the workloads in kube-system that the install waits for, then the DNS that waits for the CNI. */
|
|
128
|
+
export declare const CILIUM_WORKLOADS: readonly string[];
|
|
129
|
+
/** This function gives the path of the chart in the cache, after a download when the cache does not have it. It refuses a file whose sha256 is not the pinned value. */
|
|
130
|
+
export declare const ensureChart: (cache?: string) => Promise<string>;
|
|
131
|
+
/**
|
|
132
|
+
* This function installs Cilium in a cluster with no CNI and no kube-proxy. Helm keeps its own
|
|
133
|
+
* files in the folder of the cluster. The function waits for each workload, for each node to be
|
|
134
|
+
* ready, and for CoreDNS. If the install fails, the error has the pods of kube-system and the last
|
|
135
|
+
* lines of the log of the agent.
|
|
136
|
+
*/
|
|
137
|
+
export declare const installCilium: (cluster: Cluster, images: CiliumImages) => Promise<void>;
|
|
138
|
+
/** This is the setting of Cilium that a cluster manifest records: the version and the keys of `cilium-config` that the cells depend on. */
|
|
139
|
+
export declare const CILIUM_CONFIG_KEYS: readonly string[];
|
|
140
|
+
/** This function gives the mode of a cluster manifest of the dataplane `cilium`, from the data of the configmap `cilium-config`. */
|
|
141
|
+
export declare const ciliumMode: (data: Readonly<Record<string, string>>) => string;
|
|
142
|
+
//#endregion
|
|
60
143
|
//#region src/compose.d.ts
|
|
61
144
|
/** These are the parts of a running service. A composition for `lint()` gives none of them. */
|
|
62
145
|
interface Parts {
|
|
@@ -72,6 +155,17 @@ export declare const ROUTE = "GET /work";
|
|
|
72
155
|
export declare const FLAG_CHECK = "self.flag";
|
|
73
156
|
/** This name is the watchdog of the event loop. */
|
|
74
157
|
export declare const WATCHDOG = "self.event-loop";
|
|
158
|
+
/**
|
|
159
|
+
* This function gives the health server of the shared gate (S6, candidate E). Its readiness probe
|
|
160
|
+
* leaves out each check of `dependency`, a dependency that each replica shares. The controller still
|
|
161
|
+
* reads each check, thus the service still refuses each request at once with a 503. The other
|
|
162
|
+
* probes, and the readiness of a controller, answer as before.
|
|
163
|
+
*
|
|
164
|
+
* The probe passes when the service is started and not in the drain, and liveness does not fail
|
|
165
|
+
* readiness through a coupling. Each readiness check of another dependency, or of no dependency,
|
|
166
|
+
* must also be released.
|
|
167
|
+
*/
|
|
168
|
+
export declare const sharedGate: (server: HealthServer, dependency: string, couplings: readonly Coupling[]) => HealthServer;
|
|
75
169
|
/**
|
|
76
170
|
* This function composes the service of a declaration: its policies, its couplings, its checks,
|
|
77
171
|
* one server, one controller and each stage of the shutdown. A declaration with Redis needs the
|
|
@@ -843,7 +937,7 @@ export declare const shardOf: <T extends KindCell>(cells: readonly T[], index: n
|
|
|
843
937
|
* The cache keeps the file, and each use takes the entry from it again.
|
|
844
938
|
*/
|
|
845
939
|
interface Tool {
|
|
846
|
-
readonly name: "kind" | "kubectl" | "istioctl";
|
|
940
|
+
readonly name: "kind" | "kubectl" | "istioctl" | "helm";
|
|
847
941
|
readonly version: string;
|
|
848
942
|
/** These are the release assets, by the platform and the architecture of Node: `win32-x64`, `linux-x64`. */
|
|
849
943
|
readonly assets: Readonly<Record<string, {
|
|
@@ -863,6 +957,12 @@ export declare const KUBECTL: Tool;
|
|
|
863
957
|
* release has a zip file for Windows, and the lab reads only a gzipped tar file. Thus Windows has no asset.
|
|
864
958
|
*/
|
|
865
959
|
export declare const ISTIOCTL: Tool;
|
|
960
|
+
/**
|
|
961
|
+
* This release of Helm is v3.22.1, from 2026-10-15. The lab installs Cilium from its chart with it.
|
|
962
|
+
* The guide of Cilium 1.20.4 installs with Helm 3. The sums are from the `.sha256sum` files of
|
|
963
|
+
* `get.helm.sh`. The tar file for Windows has `helm.exe`, not `helm`, thus Windows has no asset.
|
|
964
|
+
*/
|
|
965
|
+
export declare const HELM: Tool;
|
|
866
966
|
/**
|
|
867
967
|
* This function gives the bytes of one file of a gzipped tar file. A header of the ustar format has
|
|
868
968
|
* 512 bytes. It has the name at 0, the size in octal at 124, the type at 156 and the prefix of the
|
|
@@ -886,5 +986,5 @@ export declare const toolPath: (tool: Tool, key?: string, cache?: string) => str
|
|
|
886
986
|
*/
|
|
887
987
|
export declare const ensureTool: (tool: Tool, key?: string, cache?: string) => Promise<string>;
|
|
888
988
|
//#endregion
|
|
889
|
-
export { type Band, type BandV1, CLIENT, type Cluster, type ClusterHosts, type ClusterManifest, type Credentials, type Cycle, DRAIN_RULES, type Declaration, type Deleted, type DeletionWindow, type EdgeProtocol, type EdsSpec, Endpoint, type EnvironmentManifest, FORMAT, FORMAT_V1, type FaultPlan, type Flap, HBONE_PORT, HEALTH_PORT, type Judged, KIND_NOISE, KUBE_PROXY_MODES, type KindCell, type KindCellRecord, type KindCellRecordV1, type KindCellResult, type KindCellV1, type KindConfig, type KindDecision, type KindLab, type KindRun, type KindScenario, type KindVerdict, type KindVerdictV1, type KubeProxyMode, type KubeletProbe, LAST_SLACK, LOG_LABEL, type LdsSpec, type LeafCertificate, type LearnWindow, Line, type ListenerCounts, type LoadSample, type Mesh, type MeshFlavor, type MeshImages, type MeshMode, NODE_IMAGES, type NodeImage, type NodeLifecycle, type NonePrediction, O04, O09, O10, O16, PORT, type Parts, PodLine, type PodSettings, type Prediction, type PredictionV1, type Propagated, type Propagation, PropagationSource, REDIS, RELATIVE, RecordLine, type RedisDeclaration, type Reference, type Replica, Request, type ResetReuse, RulesLine, type RunCheck, type RunCheckV1, type RunFacts, type RunFactsV1, type RunOptions, SERVER, STAGES, type ServiceRule, SliceLine, SocketLine, type Stack, type Stamp, type Step, TCP_STATE, type Target, type Template, type TimeSpread, type Tool, type Trigger, type TriggerKind, type TriggerV1, TunnelLine, type Verdicts, type WindowPrediction, type Workload, ZONE_KEPT, ZONE_LABEL, ZONE_LOST, ZtunnelPodLine, backendsAt, bandOf, byClients, byNode, calibrationOf, cellsTable, checkRun, cidrOverlap, cidrRange, cyclesOf, deletionOf, deletionsOf, dropOf, emptyOf, factsOf, failuresOf, goDuration, intakeOf, isTunnelState, judge, judgeKind, kernelCounts, kindCellRecordSchema, kindCellRecordV1Schema, kindConfig, kubeProxyPatch, medianInterval, medianText, middle, nodeNames, observationAfter, observationEnd, outcomesOf, podsAt, podsOf, predictionText, propagationOf, propagationSource, quantileOf, readRecord, recordsOf, referenceOf, requestsOf, restartOf, restartsAt, reusesReset, rulesOf, scenario, scenarioProblems, seconds, secondsOf, showBand, signalOf, signalsOf, sliceDropOf, sliceEmptyOf, sliceReadyAt, sliceReadyOf, slicesOf, socketsOf, stoppingOf, timeSpread, transitionOf, tunnelsOf, unitOf, updatesOf, upgrade, upgradeCell, zoneOf, ztunnelPodsOf, ztunnelReplaced };
|
|
989
|
+
export { type Band, type BandV1, CLIENT, type CiliumImages, type Cluster, type ClusterHosts, type ClusterManifest, type Credentials, type Cycle, DATAPLANES, DRAIN_RULES, type Dataplane, type Declaration, type Deleted, type DeletionWindow, type EdgeProtocol, type EdsSpec, Endpoint, type EnvironmentManifest, FORMAT, FORMAT_V1, type FaultPlan, type Flap, HBONE_PORT, HEALTH_PORT, type Judged, KIND_NOISE, KUBE_PROXY_MODES, type KindCell, type KindCellRecord, type KindCellRecordV1, type KindCellResult, type KindCellV1, type KindConfig, type KindDecision, type KindLab, type KindRun, type KindScenario, type KindVerdict, type KindVerdictV1, type KubeProxyMode, type KubeletProbe, LAST_SLACK, LOG_LABEL, type LdsSpec, type LeafCertificate, type LearnWindow, Line, type ListenerCounts, type LoadSample, type Mesh, type MeshFlavor, type MeshImages, type MeshMode, NODE_IMAGES, type NodeImage, type NodeLifecycle, type NonePrediction, O04, O09, O10, O16, PORT, type Parts, PodLine, type PodSettings, type Prediction, type PredictionV1, type Propagated, type Propagation, PropagationSource, REDIS, RELATIVE, RecordLine, type RedisDeclaration, type Reference, type Replica, Request, type ResetReuse, RulesLine, type RunCheck, type RunCheckV1, type RunFacts, type RunFactsV1, type RunOptions, SERVER, STAGES, type ServiceRule, SliceLine, SocketLine, type Stack, type Stamp, type Step, TCP_STATE, type Target, type Template, type TimeSpread, type Tool, type Trigger, type TriggerKind, type TriggerV1, TunnelLine, type Verdicts, type WindowPrediction, type Workload, ZONE_KEPT, ZONE_LABEL, ZONE_LOST, ZtunnelPodLine, backendsAt, bandOf, byClients, byNode, calibrationOf, cellsTable, checkRun, cidrOverlap, cidrRange, cyclesOf, deletionOf, deletionsOf, dropOf, emptyOf, factsOf, failuresOf, goDuration, intakeOf, isKubeProxyMode, isTunnelState, judge, judgeKind, kernelCounts, kindCellRecordSchema, kindCellRecordV1Schema, kindConfig, kubeProxyPatch, medianInterval, medianText, middle, nodeNames, observationAfter, observationEnd, outcomesOf, podsAt, podsOf, predictionText, propagationOf, propagationSource, quantileOf, readRecord, recordsOf, referenceOf, requestsOf, restartOf, restartsAt, reusesReset, rulesOf, scenario, scenarioProblems, seconds, secondsOf, showBand, signalOf, signalsOf, sliceDropOf, sliceEmptyOf, sliceReadyAt, sliceReadyOf, slicesOf, socketsOf, stoppingOf, timeSpread, transitionOf, tunnelsOf, unitOf, updatesOf, upgrade, upgradeCell, zoneOf, ztunnelPodsOf, ztunnelReplaced };
|
|
890
990
|
//# sourceMappingURL=index.d.ts.map
|