Skip to content

Commit

Permalink
Fix k3s for latest Docker for Mac (cgroupsv2)
Browse files Browse the repository at this point in the history
  • Loading branch information
rnorth committed Jan 18, 2022
1 parent 04937b5 commit dc8e4fa
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 0 deletions.
Expand Up @@ -6,6 +6,7 @@
import com.fasterxml.jackson.databind.node.TextNode;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.github.dockerjava.api.command.InspectContainerResponse;
import com.github.dockerjava.api.model.DockerObjectAccessor;
import lombok.SneakyThrows;
import org.testcontainers.containers.BindMode;
import org.testcontainers.containers.GenericContainer;
Expand All @@ -25,6 +26,11 @@ public K3sContainer(DockerImageName dockerImageName) {

addExposedPorts(6443, 8443);
setPrivilegedMode(true);
withCreateContainerCmdModifier(it -> {
DockerObjectAccessor.overrideRawValue(
it.getHostConfig(), "CgroupnsMode", "host"
);
});
addFileSystemBind("/sys/fs/cgroup", "/sys/fs/cgroup", BindMode.READ_WRITE);

Map<String, String> tmpFsMapping = new HashMap<>();
Expand Down
@@ -1,15 +1,27 @@
package org.testcontainers.k3s;

import io.fabric8.kubernetes.api.model.ContainerBuilder;
import io.fabric8.kubernetes.api.model.ContainerPortBuilder;
import io.fabric8.kubernetes.api.model.Node;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.PodBuilder;
import io.fabric8.kubernetes.api.model.PodSpec;
import io.fabric8.kubernetes.api.model.PodSpecBuilder;
import io.fabric8.kubernetes.api.model.ProbeBuilder;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.dsl.PodResource;
import io.fabric8.kubernetes.client.dsl.Readiable;
import lombok.extern.slf4j.Slf4j;
import org.assertj.core.api.Assertions;
import org.assertj.core.api.Condition;
import org.junit.Test;
import org.testcontainers.containers.output.Slf4jLogConsumer;
import org.testcontainers.utility.DockerImageName;

import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

@Slf4j
public class Fabric8K3sContainerTest {
Expand Down Expand Up @@ -38,6 +50,36 @@ public void shouldStartAndHaveListableNode() {
// }

Assertions.assertThat(nodes).hasSize(1);

// verify that we can start a pod
Pod helloworld = dummyStartablePod();
client.pods().create(helloworld);
client.pods().inNamespace("default").withName("helloworld").waitUntilReady(30, TimeUnit.SECONDS);

Assertions.assertThat(client.pods().inNamespace("default").withName("helloworld"))
.extracting(Readiable::isReady)
.isEqualTo(true);
}
}

private Pod dummyStartablePod() {
PodSpec podSpec = new PodSpecBuilder()
.withContainers(
new ContainerBuilder()
.withName("helloworld")
.withImage("testcontainers/helloworld:1.1.0")
.withPorts(new ContainerPortBuilder().withContainerPort(8080).build())
.withReadinessProbe(new ProbeBuilder().withNewTcpSocket().withNewPort(8080).endTcpSocket().build())
.build()
)
.build();

return new PodBuilder()
.withNewMetadata()
.withName("helloworld")
.withNamespace("default")
.endMetadata()
.withSpec(podSpec)
.build();
}
}

0 comments on commit dc8e4fa

Please sign in to comment.