Skip to content

Commit 8bc68b7

Browse files
committed
Add support to nerdctl
1 parent 26eb04d commit 8bc68b7

File tree

7 files changed

+31
-7
lines changed

7 files changed

+31
-7
lines changed

k8s/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ kb-get-pods:
88
kubectl get pod -w -o wide
99

1010
kb-get-nodes:
11-
kubectl get nodes
11+
kubectl get nodes -o wide
1212

1313
kb-get-services:
1414
kubectl get services

k8s/app-chart/templates/runner_deployment.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ spec:
2424
- name: docker-sock
2525
hostPath:
2626
path: /var/run/docker.sock
27+
- name: containerd-sock
28+
hostPath:
29+
path: /run/containerd/containerd.sock
2730
containers:
2831
- name: runner
2932
securityContext:
@@ -47,6 +50,8 @@ spec:
4750
name: users-code-path
4851
- mountPath: /var/run/docker.sock
4952
name: docker-sock
53+
- mountPath: /run/containerd/containerd.sock
54+
name: containerd-sock
5055
envFrom:
5156
- secretRef:
5257
name: codebattle-secrets

services/app/Dockerfile.runner

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,17 @@ FROM elixir:1.18-alpine AS runtime-image
2828

2929
ENV DOCKER_CHANNEL stable
3030
ENV DOCKER_VERSION 24.0.9
31-
31+
ENV NERDCTL_VERSION 2.1.3
3232
ENV GOON_VERSION v1.1.1
3333

34-
3534
RUN apk update && apk add --no-cache ca-certificates git make curl vim
3635

3736
RUN curl -fsSL "https://download.docker.com/linux/static/${DOCKER_CHANNEL}/x86_64/docker-${DOCKER_VERSION}.tgz" \
3837
| tar -xzC /usr/local/bin --strip=1 docker/docker
3938

39+
RUN curl -sL "https://github.com/containerd/nerdctl/releases/download/v${NERDCTL_VERSION}/nerdctl-${NERDCTL_VERSION}-linux-amd64.tar.gz" \
40+
| tar -xz -C /usr/local/bin/
41+
4042
RUN curl -fsSL "https://github.com/alco/goon/releases/download/${GOON_VERSION}/goon_linux_amd64.tar.gz" \
4143
| tar -xzC /usr/local/bin
4244

services/app/apps/runner/lib/mix/tasks/dockers/pull.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ defmodule Mix.Tasks.Dockers.Pull do
2020

2121
defp pull(meta) do
2222
IO.puts("Start pulling image for #{meta.slug}")
23-
result = Porcelain.shell("docker pull #{meta.docker_image}", err: :string)
23+
24+
cmd = "#{Application.get_env(:runner, :container_runtime)} pull #{meta.docker_image}"
25+
result = Porcelain.shell(cmd, err: :string)
26+
2427
IO.puts(result.out)
2528
end
2629
end

services/app/apps/runner/lib/runner/executor.ex

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ defmodule Runner.Executor do
88

99
@tmp_basedir "/tmp/codebattle-runner"
1010
@docker_cmd_template "docker run --rm --init --memory 600m --cpus=2 --net none -l codebattle_game ~s ~s timeout -s KILL ~s make --silent test"
11+
@nerdctl_cmd_template "nerdctl run --rm --runtime=io.containerd.runc.v2 --memory 600m --cpus=2 --net none -l codebattle_game ~s ~s timeout -s KILL ~s make --silent test"
12+
1113
@fake_docker_run Application.compile_env(:runner, :fake_docker_run, false)
1214

1315
@spec call(Runner.Task.t(), Runner.LanguageMeta.t(), String.t(), String.t()) ::
@@ -95,7 +97,14 @@ defmodule Runner.Executor do
9597

9698
Logger.info("Docker volume: #{inspect(volume)}")
9799

98-
@docker_cmd_template
100+
cmd_template =
101+
if Application.get_env(:runner, :container_runtime) == "containerd" do
102+
@nerdctl_cmd_template
103+
else
104+
@docker_cmd_template
105+
end
106+
107+
cmd_template
99108
|> :io_lib.format([volume, lang_meta.docker_image, lang_meta.container_run_timeout])
100109
|> to_string
101110
|> String.split()

services/app/apps/runner/lib/runner/stale_containers_killer.ex

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ defmodule Runner.StaleContainersKiller do
3737
end
3838

3939
def kill_game_container(container_id) do
40-
System.cmd("docker", ["rm", "-f", container_id])
40+
System.cmd(container_runtime(), ["rm", "-f", container_id])
4141
end
4242

4343
def pull_game_info(game) do
@@ -47,7 +47,7 @@ defmodule Runner.StaleContainersKiller do
4747

4848
def list_containers do
4949
{containers, _} =
50-
System.cmd("docker", [
50+
System.cmd(container_runtime(), [
5151
"ps",
5252
"-a",
5353
"--filter",
@@ -60,4 +60,8 @@ defmodule Runner.StaleContainersKiller do
6060
|> String.split("\n", trim: true)
6161
|> Enum.map(&pull_game_info/1)
6262
end
63+
64+
defp container_runtime do
65+
Application.get_env(:runner, :container_runtime)
66+
end
6367
end

services/app/config/releases.exs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ config :runner, RunnerWeb.Endpoint,
161161

162162
config :runner, :runner_url, "http://runner.default.svc"
163163
config :runner, container_killer: System.get_env("RUNNER_CONTAINER_KILLER", "") == "true"
164+
config :runner, container_runtime: System.get_env("RUNNER_CONTAINER_RUNTIME", "docker")
164165
config :runner, cpu_logger: System.get_env("RUNNER_CPU_LOGGER", "") == "true"
165166

166167
config :runner,

0 commit comments

Comments
 (0)