Skip to content

K3s

Since testcontainers-go v0.21.0

Introduction

The Testcontainers module for K3s.

Adding this module to your project dependencies

Please run the following command to add the K3s module to your Go dependencies:

go get github.com/testcontainers/testcontainers-go/modules/k3s

Usage example

Module reference

The K3s module exposes one entrypoint function to create the K3s container, and this function receives two parameters:

func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomizer) (*K3sContainer, error)
  • context.Context, the Go context.
  • testcontainers.ContainerCustomizer, a variadic argument for passing options.

Container Ports

These are the ports used by the K3s container:

defaultKubeSecurePort     = "6443/tcp"
defaultRancherWebhookPort = "8443/tcp"

Container Options

When starting the K3s container, you can pass options in a variadic way to configure it.

Image

If you need to set a different K3s Docker image, you can use testcontainers.WithImage with a valid Docker image for K3s. E.g. testcontainers.WithImage("docker.io/rancher/k3s:v1.27.1-k3s1").

Wait Strategies

If you need to set a different wait strategy for K3s, you can use testcontainers.WithWaitStrategy with a valid wait strategy for K3s.

Info

The default deadline for the wait strategy is 60 seconds.

At the same time, it's possible to set a wait strategy and a custom deadline with testcontainers.WithWaitStrategyAndDeadline.

Docker type modifiers

If you need an advanced configuration for K3s, you can leverage the following Docker type modifiers:

  • testcontainers.WithConfigModifier
  • testcontainers.WithHostConfigModifier
  • testcontainers.WithEndpointSettingsModifier

Please read the Create containers: Advanced Settings documentation for more information.

Container Methods

The K3s container exposes the following methods:

GetKubeConfig

The GetKubeConfig method returns the K3s cluster's kubeconfig, including the server URL, to be used for connecting to the Kubernetes Rest Client API using a Kubernetes client. It'll be returned in the format of []bytes.

kubeConfigYaml, err := container.GetKubeConfig(ctx)
if err != nil {
    t.Fatalf("failed to get kube-config : %s", err)
}