@highstate/k3s 0.9.18 → 0.9.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cluster/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { parseL3Endpoint, l3EndpointToString,
|
|
1
|
+
import { parseL3Endpoint, l3EndpointToString, l3EndpointToL4, l4EndpointToString, Command, filterEndpoints } from '@highstate/common';
|
|
2
|
+
import { createK8sTerminal } from '@highstate/k8s';
|
|
2
3
|
import { k3s } from '@highstate/library';
|
|
3
|
-
import { forUnit, toPromise, output, interpolate, secret
|
|
4
|
+
import { forUnit, toPromise, output, interpolate, secret } from '@highstate/pulumi';
|
|
4
5
|
import { KubeConfig } from '@kubernetes/client-node';
|
|
5
6
|
import { Provider, core } from '@pulumi/kubernetes';
|
|
6
7
|
import { uniqueBy, isIncludedIn } from 'remeda';
|
|
@@ -16,7 +17,7 @@ var endpoints = uniqueBy(
|
|
|
16
17
|
l3EndpointToString
|
|
17
18
|
);
|
|
18
19
|
var apiEndpoints = uniqueBy(
|
|
19
|
-
masters.flatMap((server) => server.endpoints.map((endpoint) =>
|
|
20
|
+
masters.flatMap((server) => server.endpoints.map((endpoint) => l3EndpointToL4(endpoint, 6443))),
|
|
20
21
|
l4EndpointToString
|
|
21
22
|
);
|
|
22
23
|
var config = {
|
|
@@ -81,14 +82,10 @@ function createNode(server, type, env, dependsOn) {
|
|
|
81
82
|
{
|
|
82
83
|
host: server,
|
|
83
84
|
create: interpolate`curl -sfL https://raw.githubusercontent.com/k3s-io/k3s/refs/heads/master/install.sh | ${envString} sh -s - ${type}`,
|
|
84
|
-
delete: "/usr/local/bin/k3s-uninstall.sh"
|
|
85
|
+
delete: "/usr/local/bin/k3s-uninstall.sh || true"
|
|
85
86
|
},
|
|
86
87
|
{
|
|
87
|
-
dependsOn: [
|
|
88
|
-
configFileCommand.command,
|
|
89
|
-
registryConfigFileCommand.command,
|
|
90
|
-
...[]
|
|
91
|
-
]
|
|
88
|
+
dependsOn: [configFileCommand, registryConfigFileCommand, ...[]]
|
|
92
89
|
}
|
|
93
90
|
);
|
|
94
91
|
}
|
|
@@ -109,10 +106,10 @@ var kubeConfig = new KubeConfig();
|
|
|
109
106
|
kubeConfig.loadFromString(kubeconfig);
|
|
110
107
|
var provider = new Provider(name, { kubeconfig: secret(kubeconfig) });
|
|
111
108
|
var kubeSystem = core.v1.Namespace.get("kube-system", "kube-system", { provider });
|
|
112
|
-
fileFromString("config", kubeconfig, "text/yaml", true);
|
|
113
109
|
var cluster_default = outputs({
|
|
114
110
|
k8sCluster: {
|
|
115
111
|
id: kubeSystem.metadata.uid,
|
|
112
|
+
connectionId: kubeSystem.metadata.uid,
|
|
116
113
|
name,
|
|
117
114
|
cni: "other",
|
|
118
115
|
externalIps: filterEndpoints(endpoints, ["public", "external"]).filter((endpoint) => endpoint.type !== "hostname").map(l3EndpointToString),
|
|
@@ -125,11 +122,11 @@ var cluster_default = outputs({
|
|
|
125
122
|
},
|
|
126
123
|
endpoints,
|
|
127
124
|
apiEndpoints,
|
|
128
|
-
|
|
125
|
+
$terminals: [createK8sTerminal(kubeconfig)],
|
|
129
126
|
$statusFields: {
|
|
130
127
|
endpoints: endpoints.map(l3EndpointToString),
|
|
131
128
|
apiEndpoints: apiEndpoints.map(l4EndpointToString)
|
|
132
|
-
}
|
|
129
|
+
}
|
|
133
130
|
// $pages: {
|
|
134
131
|
// index: {
|
|
135
132
|
// title: "K3s Cluster",
|
|
@@ -158,15 +155,16 @@ var cluster_default = outputs({
|
|
|
158
155
|
// },
|
|
159
156
|
// },
|
|
160
157
|
// $files: [kubeconfigFile],
|
|
161
|
-
$workers: {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}
|
|
158
|
+
// $workers: {
|
|
159
|
+
// monitoring: {
|
|
160
|
+
// image:
|
|
161
|
+
// "ghcr.io/highstate/k8s-monitor-worker:latest@sha256:90b5bb185370a959d92d13120738b879dc0a286dd4df602ecd7f675c9a3642eb",
|
|
162
|
+
// params: {
|
|
163
|
+
// kubeconfigSecretId: "",
|
|
164
|
+
// resourceGroups: [],
|
|
165
|
+
// } satisfies k8s.MonitorWorkerParams,
|
|
166
|
+
// },
|
|
167
|
+
// },
|
|
170
168
|
});
|
|
171
169
|
|
|
172
170
|
export { cluster_default as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cluster/index.ts"],"names":["env","kubeconfig"],"mappings":"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","file":"index.js","sourcesContent":["import {\n Command,\n filterEndpoints,\n l3EndpointToString,\n l3ToL4Endpoint,\n l4EndpointToString,\n parseL3Endpoint,\n} from \"@highstate/common\"\nimport { common, k3s, k8s } from \"@highstate/library\"\nimport {\n fileFromString,\n forUnit,\n interpolate,\n output,\n Resource,\n secret,\n toPromise,\n type InputMap,\n} from \"@highstate/pulumi\"\nimport { KubeConfig } from \"@kubernetes/client-node\"\nimport { core, Provider } from \"@pulumi/kubernetes\"\nimport { uniqueBy, isIncludedIn } from \"remeda\"\n\nconst { name, args, inputs, outputs } = forUnit(k3s.cluster)\n\nconst { masters, workers } = await toPromise(inputs)\n\nconst seed = masters[0]\n\nconst endpoints = uniqueBy(\n [...workers, ...masters].flatMap(server =>\n server.endpoints.map(endpoint => parseL3Endpoint(endpoint)),\n ),\n l3EndpointToString,\n)\n\nconst apiEndpoints = uniqueBy(\n masters.flatMap(server => server.endpoints.map(endpoint => l3ToL4Endpoint(endpoint, 6443))),\n l4EndpointToString,\n)\n\nconst config: Record<string, unknown> = {\n ...args.config,\n \"tls-san\": apiEndpoints.map(l4EndpointToString),\n disable: args.disabledComponents.filter(isIncludedIn(k3s.packagedComponents)),\n}\n\nfor (const disabledComponent of args.disabledComponents) {\n if (isIncludedIn(disabledComponent, k3s.internalComponents)) {\n config[`disable-${disabledComponent}`] = true\n }\n}\n\nif (args.cni === \"none\") {\n config[\"flannel-backend\"] = \"none\"\n}\n\nconst configContent = JSON.stringify(config, null, 2)\n\nconst seedInstallCommand = createNode(seed, \"server\", { K3S_CLUSTER_INIT: \"true\" })\n\nconst tokenCommand = Command.receiveTextFile(\n \"token\",\n {\n host: seed,\n path: \"/var/lib/rancher/k3s/server/node-token\",\n },\n { dependsOn: seedInstallCommand },\n)\n\nconst agentTokenCommand = Command.receiveTextFile(\n \"agent-token\",\n {\n host: seed,\n path: \"/var/lib/rancher/k3s/server/agent-token\",\n },\n { dependsOn: seedInstallCommand },\n)\n\nfor (const master of masters.slice(1)) {\n createNode(master, \"server\", {\n K3S_TOKEN: tokenCommand.stdout,\n K3S_URL: `https://${l4EndpointToString(apiEndpoints[0])}`,\n })\n}\n\nfor (const worker of workers) {\n createNode(worker, \"agent\", {\n K3S_TOKEN: agentTokenCommand.stdout,\n K3S_URL: `https://${l4EndpointToString(apiEndpoints[0])}`,\n })\n}\n\nfunction createNode(\n server: common.Server,\n type: \"server\" | \"agent\",\n env: InputMap<string>,\n dependsOn?: Resource,\n) {\n const configFileCommand = Command.createTextFile(`config-${server.hostname}`, {\n host: server,\n path: \"/etc/rancher/k3s/config.yaml\",\n content: configContent,\n })\n\n const registryConfigFileCommand = Command.createTextFile(`registry-config-${server.hostname}`, {\n host: server,\n path: \"/etc/rancher/k3s/registries.yaml\",\n content: JSON.stringify(args.registries ?? {}, null, 2),\n })\n\n const envString = output(env).apply(env => {\n return Object.entries(env)\n .map(([key, value]) => `${key}=${value}`)\n .join(\" \")\n })\n\n return new Command(\n `install-${server.hostname}`,\n {\n host: server,\n create: interpolate`curl -sfL https://raw.githubusercontent.com/k3s-io/k3s/refs/heads/master/install.sh | ${envString} sh -s - ${type}`,\n delete: \"/usr/local/bin/k3s-uninstall.sh\",\n },\n {\n dependsOn: [\n configFileCommand.command,\n registryConfigFileCommand.command,\n ...(dependsOn ? [dependsOn] : []),\n ],\n },\n )\n}\n\nconst kubeconfigResult = Command.receiveTextFile(\n \"kubeconfig\",\n {\n host: seed,\n path: \"/etc/rancher/k3s/k3s.yaml\",\n },\n { dependsOn: seedInstallCommand },\n)\n\nconst kubeconfig = await toPromise(\n kubeconfigResult.stdout.apply(kubeconfig =>\n kubeconfig.replace(\"127.0.0.1:6443\", l4EndpointToString(apiEndpoints[0])),\n ),\n)\n\nconst kubeConfig = new KubeConfig()\nkubeConfig.loadFromString(kubeconfig)\n\nconst provider = new Provider(name, { kubeconfig: secret(kubeconfig) })\nconst kubeSystem = core.v1.Namespace.get(\"kube-system\", \"kube-system\", { provider })\n\nconst kubeconfigFile = fileFromString(\"config\", kubeconfig, \"text/yaml\", true)\n\nexport default outputs({\n k8sCluster: {\n id: kubeSystem.metadata.uid,\n name,\n cni: \"other\",\n\n externalIps: filterEndpoints(endpoints, [\"public\", \"external\"])\n .filter(endpoint => endpoint.type !== \"hostname\")\n .map(l3EndpointToString),\n\n endpoints,\n apiEndpoints,\n\n quirks: {\n externalServiceType: args.disabledComponents.includes(\"servicelb\")\n ? \"NodePort\"\n : \"LoadBalancer\",\n },\n\n kubeconfig: secret(kubeconfig),\n },\n\n endpoints,\n apiEndpoints,\n\n // $terminals: [createK8sTerminal(kubeconfig)],\n\n $statusFields: {\n endpoints: endpoints.map(l3EndpointToString),\n apiEndpoints: apiEndpoints.map(l4EndpointToString),\n },\n\n // $pages: {\n // index: {\n // title: \"K3s Cluster\",\n // content: [\n // {\n // type: \"markdown\",\n // content: text`\n // The cluster is up and running.\n\n // You can access the cluster via the terminal or by using the kubeconfig file.\n // `,\n // },\n // {\n // type: \"file\",\n // meta: kubeconfigFile.meta,\n // },\n // {\n // type: \"markdown\",\n // content: secret(text`\n // You can also copy the following content of the kubeconfig file and use it to access the cluster:\n\n // \\`\\`\\`yaml\n // ${kubeconfig}\n // \\`\\`\\`\n // `),\n // },\n // ],\n // },\n // },\n\n // $files: [kubeconfigFile],\n\n $workers: {\n monitoring: {\n image:\n \"ghcr.io/highstate/k8s-monitor-worker:latest@sha256:90b5bb185370a959d92d13120738b879dc0a286dd4df602ecd7f675c9a3642eb\",\n params: {\n kubeconfigSecretId: \"\",\n resourceGroups: [],\n } satisfies k8s.MonitorWorkerParams,\n },\n },\n})\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cluster/index.ts"],"names":["env","kubeconfig"],"mappings":"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","file":"index.js","sourcesContent":["import {\n Command,\n filterEndpoints,\n l3EndpointToL4,\n l3EndpointToString,\n l4EndpointToString,\n parseL3Endpoint,\n} from \"@highstate/common\"\nimport { createK8sTerminal } from \"@highstate/k8s\"\nimport { type common, k3s } from \"@highstate/library\"\nimport {\n forUnit,\n interpolate,\n output,\n type Resource,\n secret,\n toPromise,\n type InputRecord,\n} from \"@highstate/pulumi\"\nimport { KubeConfig } from \"@kubernetes/client-node\"\nimport { core, Provider } from \"@pulumi/kubernetes\"\nimport { uniqueBy, isIncludedIn } from \"remeda\"\n\nconst { name, args, inputs, outputs } = forUnit(k3s.cluster)\n\nconst { masters, workers } = await toPromise(inputs)\n\nconst seed = masters[0]\n\nconst endpoints = uniqueBy(\n [...workers, ...masters].flatMap(server =>\n server.endpoints.map(endpoint => parseL3Endpoint(endpoint)),\n ),\n l3EndpointToString,\n)\n\nconst apiEndpoints = uniqueBy(\n masters.flatMap(server => server.endpoints.map(endpoint => l3EndpointToL4(endpoint, 6443))),\n l4EndpointToString,\n)\n\nconst config: Record<string, unknown> = {\n ...args.config,\n \"tls-san\": apiEndpoints.map(l4EndpointToString),\n disable: args.disabledComponents.filter(isIncludedIn(k3s.packagedComponents)),\n}\n\nfor (const disabledComponent of args.disabledComponents) {\n if (isIncludedIn(disabledComponent, k3s.internalComponents)) {\n config[`disable-${disabledComponent}`] = true\n }\n}\n\nif (args.cni === \"none\") {\n config[\"flannel-backend\"] = \"none\"\n}\n\nconst configContent = JSON.stringify(config, null, 2)\n\nconst seedInstallCommand = createNode(seed, \"server\", { K3S_CLUSTER_INIT: \"true\" })\n\nconst tokenCommand = Command.receiveTextFile(\n \"token\",\n {\n host: seed,\n path: \"/var/lib/rancher/k3s/server/node-token\",\n },\n { dependsOn: seedInstallCommand },\n)\n\nconst agentTokenCommand = Command.receiveTextFile(\n \"agent-token\",\n {\n host: seed,\n path: \"/var/lib/rancher/k3s/server/agent-token\",\n },\n { dependsOn: seedInstallCommand },\n)\n\nfor (const master of masters.slice(1)) {\n createNode(master, \"server\", {\n K3S_TOKEN: tokenCommand.stdout,\n K3S_URL: `https://${l4EndpointToString(apiEndpoints[0])}`,\n })\n}\n\nfor (const worker of workers) {\n createNode(worker, \"agent\", {\n K3S_TOKEN: agentTokenCommand.stdout,\n K3S_URL: `https://${l4EndpointToString(apiEndpoints[0])}`,\n })\n}\n\nfunction createNode(\n server: common.Server,\n type: \"server\" | \"agent\",\n env: InputRecord<string>,\n dependsOn?: Resource,\n) {\n const configFileCommand = Command.createTextFile(`config-${server.hostname}`, {\n host: server,\n path: \"/etc/rancher/k3s/config.yaml\",\n content: configContent,\n })\n\n const registryConfigFileCommand = Command.createTextFile(`registry-config-${server.hostname}`, {\n host: server,\n path: \"/etc/rancher/k3s/registries.yaml\",\n content: JSON.stringify(args.registries ?? {}, null, 2),\n })\n\n const envString = output(env).apply(env => {\n return Object.entries(env)\n .map(([key, value]) => `${key}=${value}`)\n .join(\" \")\n })\n\n return new Command(\n `install-${server.hostname}`,\n {\n host: server,\n create: interpolate`curl -sfL https://raw.githubusercontent.com/k3s-io/k3s/refs/heads/master/install.sh | ${envString} sh -s - ${type}`,\n delete: \"/usr/local/bin/k3s-uninstall.sh || true\",\n },\n {\n dependsOn: [configFileCommand, registryConfigFileCommand, ...(dependsOn ? [dependsOn] : [])],\n },\n )\n}\n\nconst kubeconfigResult = Command.receiveTextFile(\n \"kubeconfig\",\n {\n host: seed,\n path: \"/etc/rancher/k3s/k3s.yaml\",\n },\n { dependsOn: seedInstallCommand },\n)\n\nconst kubeconfig = await toPromise(\n kubeconfigResult.stdout.apply(kubeconfig =>\n kubeconfig.replace(\"127.0.0.1:6443\", l4EndpointToString(apiEndpoints[0])),\n ),\n)\n\nconst kubeConfig = new KubeConfig()\nkubeConfig.loadFromString(kubeconfig)\n\nconst provider = new Provider(name, { kubeconfig: secret(kubeconfig) })\nconst kubeSystem = core.v1.Namespace.get(\"kube-system\", \"kube-system\", { provider })\n\n// const kubeconfigFile = fileFromString(\"config\", kubeconfig, \"text/yaml\", true)\n\nexport default outputs({\n k8sCluster: {\n id: kubeSystem.metadata.uid,\n connectionId: kubeSystem.metadata.uid,\n name,\n cni: \"other\",\n\n externalIps: filterEndpoints(endpoints, [\"public\", \"external\"])\n .filter(endpoint => endpoint.type !== \"hostname\")\n .map(l3EndpointToString),\n\n endpoints,\n apiEndpoints,\n\n quirks: {\n externalServiceType: args.disabledComponents.includes(\"servicelb\")\n ? \"NodePort\"\n : \"LoadBalancer\",\n },\n\n kubeconfig: secret(kubeconfig),\n },\n\n endpoints,\n apiEndpoints,\n\n $terminals: [createK8sTerminal(kubeconfig)],\n\n $statusFields: {\n endpoints: endpoints.map(l3EndpointToString),\n apiEndpoints: apiEndpoints.map(l4EndpointToString),\n },\n\n // $pages: {\n // index: {\n // title: \"K3s Cluster\",\n // content: [\n // {\n // type: \"markdown\",\n // content: text`\n // The cluster is up and running.\n\n // You can access the cluster via the terminal or by using the kubeconfig file.\n // `,\n // },\n // {\n // type: \"file\",\n // meta: kubeconfigFile.meta,\n // },\n // {\n // type: \"markdown\",\n // content: secret(text`\n // You can also copy the following content of the kubeconfig file and use it to access the cluster:\n\n // \\`\\`\\`yaml\n // ${kubeconfig}\n // \\`\\`\\`\n // `),\n // },\n // ],\n // },\n // },\n\n // $files: [kubeconfigFile],\n\n // $workers: {\n // monitoring: {\n // image:\n // \"ghcr.io/highstate/k8s-monitor-worker:latest@sha256:90b5bb185370a959d92d13120738b879dc0a286dd4df602ecd7f675c9a3642eb\",\n // params: {\n // kubeconfigSecretId: \"\",\n // resourceGroups: [],\n // } satisfies k8s.MonitorWorkerParams,\n // },\n // },\n})\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@highstate/k3s",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.20",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -15,18 +15,18 @@
|
|
|
15
15
|
"build": "highstate build"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@highstate/common": "^0.9.
|
|
19
|
-
"@highstate/contract": "^0.9.
|
|
20
|
-
"@highstate/k8s": "^0.9.
|
|
21
|
-
"@highstate/library": "^0.9.
|
|
22
|
-
"@highstate/pulumi": "^0.9.
|
|
18
|
+
"@highstate/common": "^0.9.20",
|
|
19
|
+
"@highstate/contract": "^0.9.20",
|
|
20
|
+
"@highstate/k8s": "^0.9.20",
|
|
21
|
+
"@highstate/library": "^0.9.20",
|
|
22
|
+
"@highstate/pulumi": "^0.9.20",
|
|
23
23
|
"@kubernetes/client-node": "^1.1.0",
|
|
24
24
|
"@pulumi/command": "^1.0.2",
|
|
25
25
|
"@pulumi/kubernetes": "^4.18.0",
|
|
26
26
|
"remeda": "^2.21.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@highstate/cli": "^0.9.
|
|
29
|
+
"@highstate/cli": "^0.9.20"
|
|
30
30
|
},
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "4bf9183450c2c6f51d6a99d77efc379ff5c7b7ef"
|
|
32
32
|
}
|