Skip to content

Commit 629bf81

Browse files
nixos/k3s: refactor k3s multi node test (NixOS#355230)
2 parents abf0202 + cd96421 commit 629bf81

File tree

1 file changed

+52
-68
lines changed

1 file changed

+52
-68
lines changed

nixos/tests/k3s/multi-node.nix

Lines changed: 52 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ import ../make-test-python.nix (
1616
socat
1717
];
1818
};
19-
pauseImage = pkgs.dockerTools.streamLayeredImage {
19+
pauseImage = pkgs.dockerTools.buildImage {
2020
name = "test.local/pause";
2121
tag = "local";
22-
contents = imageEnv;
22+
copyToRoot = imageEnv;
2323
config.Entrypoint = [
2424
"/bin/tini"
2525
"--"
@@ -75,6 +75,7 @@ import ../make-test-python.nix (
7575
enable = true;
7676
role = "server";
7777
package = k3s;
78+
images = [ pauseImage ];
7879
clusterInit = true;
7980
extraFlags = [
8081
"--disable coredns"
@@ -117,23 +118,17 @@ import ../make-test-python.nix (
117118
inherit tokenFile;
118119
enable = true;
119120
package = k3s;
121+
images = [ pauseImage ];
120122
serverAddr = "https://192.168.1.1:6443";
121123
clusterInit = false;
122-
extraFlags = builtins.toString [
123-
"--disable"
124-
"coredns"
125-
"--disable"
126-
"local-storage"
127-
"--disable"
128-
"metrics-server"
129-
"--disable"
130-
"servicelb"
131-
"--disable"
132-
"traefik"
133-
"--node-ip"
134-
"192.168.1.3"
135-
"--pause-image"
136-
"test.local/pause:local"
124+
extraFlags = [
125+
"--disable coredns"
126+
"--disable local-storage"
127+
"--disable metrics-server"
128+
"--disable servicelb"
129+
"--disable traefik"
130+
"--node-ip 192.168.1.3"
131+
"--pause-image test.local/pause:local"
137132
];
138133
};
139134
networking.firewall.allowedTCPPorts = [
@@ -163,12 +158,11 @@ import ../make-test-python.nix (
163158
enable = true;
164159
role = "agent";
165160
package = k3s;
161+
images = [ pauseImage ];
166162
serverAddr = "https://192.168.1.3:6443";
167-
extraFlags = lib.concatStringsSep " " [
168-
"--pause-image"
169-
"test.local/pause:local"
170-
"--node-ip"
171-
"192.168.1.2"
163+
extraFlags = [
164+
"--pause-image test.local/pause:local"
165+
"--node-ip 192.168.1.2"
172166
];
173167
};
174168
networking.firewall.allowedTCPPorts = [ 6443 ];
@@ -185,52 +179,42 @@ import ../make-test-python.nix (
185179
};
186180
};
187181

188-
testScript = ''
189-
machines = [server, server2, agent]
190-
for m in machines:
191-
m.start()
192-
m.wait_for_unit("k3s")
193-
194-
is_aarch64 = "${toString pkgs.stdenv.hostPlatform.isAarch64}" == "1"
195-
196-
# wait for the agent to show up
197-
server.wait_until_succeeds("k3s kubectl get node agent")
198-
199-
for m in machines:
200-
m.succeed("k3s check-config")
201-
m.succeed(
202-
"${pauseImage} | k3s ctr image import -"
203-
)
204-
205-
server.succeed("k3s kubectl cluster-info")
206-
# Also wait for our service account to show up; it takes a sec
207-
server.wait_until_succeeds("k3s kubectl get serviceaccount default")
208-
209-
# Now create a pod on each node via a daemonset and verify they can talk to each other.
210-
server.succeed("k3s kubectl apply -f ${networkTestDaemonset}")
211-
server.wait_until_succeeds(f'[ "$(k3s kubectl get ds test -o json | jq .status.numberReady)" -eq {len(machines)} ]')
212-
213-
# Get pod IPs
214-
pods = server.succeed("k3s kubectl get po -o json | jq '.items[].metadata.name' -r").splitlines()
215-
pod_ips = [server.succeed(f"k3s kubectl get po {name} -o json | jq '.status.podIP' -cr").strip() for name in pods]
216-
217-
# Verify each server can ping each pod ip
218-
for pod_ip in pod_ips:
219-
server.succeed(f"ping -c 1 {pod_ip}")
220-
agent.succeed(f"ping -c 1 {pod_ip}")
221-
222-
# Verify the pods can talk to each other
223-
resp = server.wait_until_succeeds(f"k3s kubectl exec {pods[0]} -- socat TCP:{pod_ips[1]}:8000 -")
224-
assert resp.strip() == "server"
225-
resp = server.wait_until_succeeds(f"k3s kubectl exec {pods[1]} -- socat TCP:{pod_ips[0]}:8000 -")
226-
assert resp.strip() == "server"
227-
228-
# Cleanup
229-
server.succeed("k3s kubectl delete -f ${networkTestDaemonset}")
230-
231-
for m in machines:
232-
m.shutdown()
233-
'';
182+
testScript = # python
183+
''
184+
start_all()
185+
186+
machines = [server, server2, agent]
187+
for m in machines:
188+
m.wait_for_unit("k3s")
189+
190+
# wait for the agent to show up
191+
server.wait_until_succeeds("k3s kubectl get node agent")
192+
193+
for m in machines:
194+
m.succeed("k3s check-config")
195+
196+
server.succeed("k3s kubectl cluster-info")
197+
# Also wait for our service account to show up; it takes a sec
198+
server.wait_until_succeeds("k3s kubectl get serviceaccount default")
199+
200+
# Now create a pod on each node via a daemonset and verify they can talk to each other.
201+
server.succeed("k3s kubectl apply -f ${networkTestDaemonset}")
202+
server.wait_until_succeeds(f'[ "$(k3s kubectl get ds test -o json | jq .status.numberReady)" -eq {len(machines)} ]')
203+
204+
# Get pod IPs
205+
pods = server.succeed("k3s kubectl get po -o json | jq '.items[].metadata.name' -r").splitlines()
206+
pod_ips = [server.succeed(f"k3s kubectl get po {name} -o json | jq '.status.podIP' -cr").strip() for name in pods]
207+
208+
# Verify each server can ping each pod ip
209+
for pod_ip in pod_ips:
210+
server.succeed(f"ping -c 1 {pod_ip}")
211+
server2.succeed(f"ping -c 1 {pod_ip}")
212+
agent.succeed(f"ping -c 1 {pod_ip}")
213+
# Verify the pods can talk to each other
214+
for pod in pods:
215+
resp = server.succeed(f"k3s kubectl exec {pod} -- socat TCP:{pod_ip}:8000 -")
216+
assert resp.strip() == "server"
217+
'';
234218

235219
meta.maintainers = lib.teams.k3s.members;
236220
}

0 commit comments

Comments
 (0)