@highstate/k3s 0.9.3 → 0.9.5
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 +147 -40
- package/dist/cluster/index.js.map +1 -1
- package/dist/highstate.manifest.json +1 -1
- package/package.json +10 -9
package/dist/cluster/index.js
CHANGED
@@ -1,63 +1,170 @@
|
|
1
1
|
// src/cluster/index.ts
|
2
|
-
import {
|
2
|
+
import {
|
3
|
+
Command,
|
4
|
+
filterEndpoints,
|
5
|
+
l3EndpointToString,
|
6
|
+
l3ToL4Endpoint,
|
7
|
+
l4EndpointToString,
|
8
|
+
parseL3Endpoint
|
9
|
+
} from "@highstate/common";
|
3
10
|
import { k3s } from "@highstate/library";
|
4
|
-
import {
|
11
|
+
import {
|
12
|
+
fileFromString,
|
13
|
+
forUnit,
|
14
|
+
interpolate,
|
15
|
+
output,
|
16
|
+
secret,
|
17
|
+
toPromise
|
18
|
+
} from "@highstate/pulumi";
|
5
19
|
import { KubeConfig } from "@kubernetes/client-node";
|
6
20
|
import { core, Provider } from "@pulumi/kubernetes";
|
7
|
-
import { createK8sTerminal
|
21
|
+
import { createK8sTerminal } from "@highstate/k8s";
|
22
|
+
import { text } from "@highstate/contract";
|
23
|
+
import { uniqueBy } from "remeda";
|
8
24
|
var { name, args, inputs, outputs } = forUnit(k3s.cluster);
|
9
|
-
var
|
10
|
-
var
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
var
|
22
|
-
|
23
|
-
|
24
|
-
logging: "stderr",
|
25
|
-
dependsOn: k3sCommand
|
25
|
+
var { masters, workers } = await toPromise(inputs);
|
26
|
+
var seed = masters[0];
|
27
|
+
var endpoints = uniqueBy(
|
28
|
+
[...workers, ...masters].flatMap(
|
29
|
+
(server) => server.endpoints.map((endpoint) => parseL3Endpoint(endpoint))
|
30
|
+
),
|
31
|
+
l3EndpointToString
|
32
|
+
);
|
33
|
+
var apiEndpoints = uniqueBy(
|
34
|
+
masters.flatMap((server) => server.endpoints.map((endpoint) => l3ToL4Endpoint(endpoint, 6443))),
|
35
|
+
l4EndpointToString
|
36
|
+
);
|
37
|
+
var configContent = JSON.stringify({
|
38
|
+
...args.config,
|
39
|
+
"tls-san": apiEndpoints.map(l4EndpointToString)
|
26
40
|
});
|
41
|
+
var seedInstallCommand = createNode(seed, "server", { K3S_CLUSTER_INIT: "true" });
|
42
|
+
var tokenCommand = Command.receiveTextFile(
|
43
|
+
"token",
|
44
|
+
{
|
45
|
+
host: seed,
|
46
|
+
path: "/var/lib/rancher/k3s/server/node-token"
|
47
|
+
},
|
48
|
+
{ dependsOn: seedInstallCommand }
|
49
|
+
);
|
50
|
+
var agentTokenCommand = Command.receiveTextFile(
|
51
|
+
"agent-token",
|
52
|
+
{
|
53
|
+
host: seed,
|
54
|
+
path: "/var/lib/rancher/k3s/server/agent-token"
|
55
|
+
},
|
56
|
+
{ dependsOn: seedInstallCommand }
|
57
|
+
);
|
58
|
+
for (const master of masters.slice(1)) {
|
59
|
+
createNode(master, "server", {
|
60
|
+
K3S_TOKEN: tokenCommand.stdout,
|
61
|
+
K3S_URL: `https://${l4EndpointToString(apiEndpoints[0])}`
|
62
|
+
});
|
63
|
+
}
|
64
|
+
for (const worker of workers) {
|
65
|
+
createNode(worker, "agent", {
|
66
|
+
K3S_TOKEN: agentTokenCommand.stdout,
|
67
|
+
K3S_URL: `https://${l4EndpointToString(apiEndpoints[0])}`
|
68
|
+
});
|
69
|
+
}
|
70
|
+
function createNode(server, type, env, dependsOn) {
|
71
|
+
const configFileCommand = Command.createTextFile(`config-${server.hostname}`, {
|
72
|
+
host: server,
|
73
|
+
path: "/etc/rancher/k3s/config.yaml",
|
74
|
+
content: configContent
|
75
|
+
});
|
76
|
+
const registryConfigFileCommand = Command.createTextFile(`registry-config-${server.hostname}`, {
|
77
|
+
host: server,
|
78
|
+
path: "/etc/rancher/k3s/registries.yaml",
|
79
|
+
content: JSON.stringify(args.registries ?? {})
|
80
|
+
});
|
81
|
+
const envString = output(env).apply((env2) => {
|
82
|
+
return Object.entries(env2).map(([key, value]) => `${key}=${value}`).join(" ");
|
83
|
+
});
|
84
|
+
return new Command(
|
85
|
+
`install-${server.hostname}`,
|
86
|
+
{
|
87
|
+
host: server,
|
88
|
+
create: interpolate`curl -sfL https://get.k3s.io | ${envString} sh -s - ${type}`,
|
89
|
+
delete: "/usr/local/bin/k3s-uninstall.sh"
|
90
|
+
},
|
91
|
+
{
|
92
|
+
dependsOn: [
|
93
|
+
configFileCommand.command,
|
94
|
+
registryConfigFileCommand.command,
|
95
|
+
...dependsOn ? [dependsOn] : []
|
96
|
+
]
|
97
|
+
}
|
98
|
+
);
|
99
|
+
}
|
100
|
+
var kubeconfigResult = Command.receiveTextFile(
|
101
|
+
"kubeconfig",
|
102
|
+
{
|
103
|
+
host: seed,
|
104
|
+
path: "/etc/rancher/k3s/k3s.yaml"
|
105
|
+
},
|
106
|
+
{ dependsOn: seedInstallCommand }
|
107
|
+
);
|
27
108
|
var kubeconfig = await toPromise(
|
28
|
-
|
109
|
+
kubeconfigResult.stdout.apply(
|
110
|
+
(kubeconfig2) => kubeconfig2.replace("127.0.0.1:6443", l4EndpointToString(apiEndpoints[0]))
|
111
|
+
)
|
29
112
|
);
|
30
113
|
var kubeConfig = new KubeConfig();
|
31
114
|
kubeConfig.loadFromString(kubeconfig);
|
32
|
-
var externalIps = await detectExternalIps(kubeConfig, args.internalIpsPolicy);
|
33
115
|
var provider = new Provider(name, { kubeconfig: secret(kubeconfig) });
|
34
116
|
var kubeSystem = core.v1.Namespace.get("kube-system", "kube-system", { provider });
|
35
|
-
|
36
|
-
DnsRecord.createSet(args.fqdn, {
|
37
|
-
providers: inputs.dnsProviders,
|
38
|
-
type: "A",
|
39
|
-
value: externalIps[0]
|
40
|
-
});
|
41
|
-
}
|
117
|
+
var kubeconfigFile = fileFromString("config", kubeconfig, "text/yaml", true);
|
42
118
|
var cluster_default = outputs({
|
43
119
|
k8sCluster: {
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
120
|
+
id: kubeSystem.metadata.uid,
|
121
|
+
name,
|
122
|
+
cni: "other",
|
123
|
+
externalIps: filterEndpoints(endpoints, ["public", "external"]).filter((endpoint) => endpoint.type !== "hostname").map(l3EndpointToString),
|
124
|
+
endpoints,
|
125
|
+
apiEndpoints,
|
126
|
+
quirks: {
|
127
|
+
externalServiceType: "LoadBalancer"
|
51
128
|
},
|
52
129
|
kubeconfig: secret(kubeconfig)
|
53
130
|
},
|
131
|
+
endpoints,
|
132
|
+
apiEndpoints,
|
54
133
|
$terminals: [createK8sTerminal(kubeconfig)],
|
55
134
|
$status: {
|
56
|
-
|
57
|
-
|
58
|
-
|
135
|
+
endpoints: endpoints.map(l3EndpointToString),
|
136
|
+
apiEndpoints: apiEndpoints.map(l4EndpointToString)
|
137
|
+
},
|
138
|
+
$pages: {
|
139
|
+
index: {
|
140
|
+
title: "K3s Cluster",
|
141
|
+
content: [
|
142
|
+
{
|
143
|
+
type: "markdown",
|
144
|
+
content: text`
|
145
|
+
The cluster is up and running.
|
146
|
+
|
147
|
+
You can access the cluster via the terminal or by using the kubeconfig file.
|
148
|
+
`
|
149
|
+
},
|
150
|
+
{
|
151
|
+
type: "file",
|
152
|
+
fileMeta: kubeconfigFile.meta
|
153
|
+
},
|
154
|
+
{
|
155
|
+
type: "markdown",
|
156
|
+
content: text`
|
157
|
+
You can also copy the following content of the kubeconfig file and use it to access the cluster:
|
158
|
+
|
159
|
+
\`\`\`yaml
|
160
|
+
${kubeconfig}
|
161
|
+
\`\`\`
|
162
|
+
`
|
163
|
+
}
|
164
|
+
]
|
59
165
|
}
|
60
|
-
}
|
166
|
+
},
|
167
|
+
$files: [kubeconfigFile]
|
61
168
|
});
|
62
169
|
export {
|
63
170
|
cluster_default as default
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/cluster/index.ts"],"sourcesContent":["import {
|
1
|
+
{"version":3,"sources":["../../src/cluster/index.ts"],"sourcesContent":["import {\n Command,\n filterEndpoints,\n l3EndpointToString,\n l3ToL4Endpoint,\n l4EndpointToString,\n parseL3Endpoint,\n} from \"@highstate/common\"\nimport { common, k3s } 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 { createK8sTerminal } from \"@highstate/k8s\"\nimport { text } from \"@highstate/contract\"\nimport { uniqueBy } 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 configContent = JSON.stringify({\n ...args.config,\n \"tls-san\": apiEndpoints.map(l4EndpointToString),\n})\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 ?? {}),\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://get.k3s.io | ${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: \"LoadBalancer\",\n },\n\n kubeconfig: secret(kubeconfig),\n },\n\n endpoints,\n apiEndpoints,\n\n $terminals: [createK8sTerminal(kubeconfig)],\n\n $status: {\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 fileMeta: kubeconfigFile.meta,\n },\n {\n type: \"markdown\",\n content: 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"],"mappings":"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","names":["env","kubeconfig"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@highstate/k3s",
|
3
|
-
"version": "0.9.
|
3
|
+
"version": "0.9.5",
|
4
4
|
"type": "module",
|
5
5
|
"files": [
|
6
6
|
"dist"
|
@@ -15,17 +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.5",
|
19
|
+
"@highstate/contract": "^0.9.5",
|
20
|
+
"@highstate/k8s": "^0.9.5",
|
21
|
+
"@highstate/library": "^0.9.5",
|
22
|
+
"@highstate/pulumi": "^0.9.5",
|
23
23
|
"@kubernetes/client-node": "^1.1.0",
|
24
24
|
"@pulumi/command": "^1.0.2",
|
25
|
-
"@pulumi/kubernetes": "^4.18.0"
|
25
|
+
"@pulumi/kubernetes": "^4.18.0",
|
26
|
+
"remeda": "^2.21.0"
|
26
27
|
},
|
27
28
|
"devDependencies": {
|
28
|
-
"@highstate/cli": "^0.9.
|
29
|
+
"@highstate/cli": "^0.9.5"
|
29
30
|
},
|
30
|
-
"gitHead": "
|
31
|
+
"gitHead": "93fa1e8b1189a5232055c852fd79a684d8b80444"
|
31
32
|
}
|