types

package
v5.6.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 10, 2024 License: MIT Imports: 13 Imported by: 12

Documentation

Overview

Copyright © 2020-2023 The k3d Author(s)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Copyright © 2020-2023 The k3d Author(s)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Copyright © 2020-2023 The k3d Author(s)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Copyright © 2020-2023 The k3d Author(s)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Copyright © 2020-2023 The k3d Author(s)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Copyright © 2020-2023 The k3d Author(s)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Copyright © 2020-2023 The k3d Author(s)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Copyright © 2020-2023 The k3d Author(s)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Copyright © 2020-2023 The k3d Author(s)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Index

Constants

View Source
const (
	// Log config
	K3dEnvLogNodeWaitLogs = "K3D_LOG_NODE_WAIT_LOGS"

	// Images
	K3dEnvImageLoadbalancer = "K3D_IMAGE_LOADBALANCER"
	K3dEnvImageTools        = "K3D_IMAGE_TOOLS"
	K3dEnvImageHelperTag    = "K3D_HELPER_IMAGE_TAG"

	// Debug options
	K3dEnvDebugCorednsRetries       = "K3D_DEBUG_COREDNS_RETRIES"
	K3dEnvDebugDisableDockerInit    = "K3D_DEBUG_DISABLE_DOCKER_INIT"
	K3dEnvDebugNodeWaitBackOffLimit = "K3D_DEBUG_NODE_WAIT_BACKOFF_LIMIT"

	// Fixes
	K3dEnvFixCgroupV2 = "K3D_FIX_CGROUPV2"
	K3dEnvFixDNS      = "K3D_FIX_DNS"
	K3dEnvFixMounts   = "K3D_FIX_MOUNTS"
)

k3d config environment variables for options that don't have a place in the config file or CLI

View Source
const (
	DefaultLoadbalancerConfigPath        = "/etc/confd/values.yaml"
	DefaultLoadbalancerWorkerConnections = 1024
)
View Source
const (
	DefaultRegistryPort       = "5000"
	DefaultRegistryName       = DefaultObjectNamePrefix + "-registry"
	DefaultRegistriesFilePath = "/etc/rancher/k3s/registries.yaml"
	DefaultRegistryMountPath  = "/var/lib/registry"
	DefaultDockerHubAddress   = "registry-1.docker.io"
	// Default temporary path for the LocalRegistryHosting configmap, from where it will be applied via kubectl
	DefaultLocalRegistryHostingConfigmapTempPath = "/tmp/localRegistryHostingCM.yaml"
)

Registry Defaults

View Source
const (
	LabelClusterName             string = "k3d.cluster"
	LabelClusterURL              string = "k3d.cluster.url"
	LabelClusterToken            string = "k3d.cluster.token"
	LabelClusterExternal         string = "k3d.cluster.external"
	LabelImageVolume             string = "k3d.cluster.imageVolume"
	LabelNetworkExternal         string = "k3d.cluster.network.external"
	LabelNetwork                 string = "k3d.cluster.network"
	LabelNetworkID               string = "k3d.cluster.network.id"
	LabelNetworkIPRange          string = "k3d.cluster.network.iprange"
	LabelClusterStartHostAliases string = "k3d.cluster.start.hostaliases"
	LabelRole                    string = "k3d.role"
	LabelServerAPIPort           string = "k3d.server.api.port"
	LabelServerAPIHost           string = "k3d.server.api.host"
	LabelServerAPIHostIP         string = "k3d.server.api.hostIP"
	LabelServerIsInit            string = "k3d.server.init"
	LabelServerLoadBalancer      string = "k3d.server.loadbalancer"
	LabelRegistryHost            string = "k3d.registry.host"
	LabelRegistryHostIP          string = "k3d.registry.hostIP"
	LabelRegistryPortExternal    string = "k3s.registry.port.external"
	LabelRegistryPortInternal    string = "k3s.registry.port.internal"
	LabelNodeStaticIP            string = "k3d.node.staticIP"
)

List of k3d technical label name

View Source
const DefaultAPIHost = "0.0.0.0"

DefaultAPIHost defines the default host (IP) for the Kubernetes API

View Source
const DefaultAPIPort = "6443"

DefaultAPIPort defines the default Kubernetes API Port

View Source
const DefaultClusterName = "k3s-default"

DefaultClusterName specifies the default name used for newly created clusters

View Source
const DefaultClusterNameMaxLength = 32

DefaultClusterNameMaxLength specifies the maximal length of a passed in cluster name This restriction allows us to construct an name consisting of <DefaultObjectNamePrefix[3]>-<ClusterName>-<TypeSuffix[5-10]>-<Counter[1-3]> ... and still stay within the 64 character limit (e.g. of docker)

View Source
const DefaultConfigDirName = ".config/k3d" // should end up in $XDG_CONFIG_HOME

DefaultConfigDirName defines the name of the config directory (where we'll e.g. put the kubeconfigs)

View Source
const DefaultImageVolumeMountPath = "/k3d/images"

DefaultImageVolumeMountPath defines the mount path inside k3d nodes where we will mount the shared image volume by default

View Source
const DefaultK3dInternalHostRecord = "host.k3d.internal"

DefaultK3dInternalHostRecord defines the default /etc/hosts entry for the k3d host

View Source
const DefaultK3sImageRepo = "docker.io/rancher/k3s"

DefaultK3sImageRepo specifies the default image repository for the used k3s image

View Source
const DefaultKubeconfigPrefix = DefaultObjectNamePrefix + "-kubeconfig"

DefaultKubeconfigPrefix defines the default prefix for kubeconfig files

View Source
const DefaultLBImageRepo = "ghcr.io/k3d-io/k3d-proxy"

DefaultLBImageRepo defines the default cluster load balancer image

View Source
const DefaultNodeWaitForLogMessageCrashLoopBackOffLimit = 10

DefaultNodeWaitForLogMessageCrashLoopBackOffLimit defines the maximum number of retries to find the target log message, if the container is in a crash loop. This makes sense e.g. when a new server is waiting to join an existing cluster and has to wait for other learners to finish.

View Source
const DefaultObjectNamePrefix = "k3d"

DefaultObjectNamePrefix defines the name prefix for every object created by k3d

View Source
const DefaultRegistryImageRepo = "docker.io/library/registry"

DefaultRegistryImageRepo defines the default image used for the k3d-managed registry

View Source
const DefaultRegistryImageTag = "2"

DefaultRegistryImageTag defines the default image tag used for the k3d-managed registry

View Source
const DefaultRuntimeNetwork = "bridge"

DefaultNetwork defines the default (Docker) runtime network

View Source
const DefaultToolsImageRepo = "ghcr.io/k3d-io/k3d-tools"

DefaultToolsImageRepo defines the default image used for the tools container

View Source
const NodeStatusRestarting = "restarting"

NodeStatusRestarting defines the status string that signals the node container is restarting

View Source
const NodeWaitForLogMessageRestartWarnTime = 2 * time.Minute

NodeWaitForLogMessageRestartWarnTime is the time after which to warn about a restarting container

Variables

View Source
var ClusterExternalNodeRoles = []Role{
	RegistryRole,
}

ClusterExternalNodeRoles is a list of roles for nodes that do not belong to a specific cluster

View Source
var ClusterInternalNodeRoles = []Role{
	ServerRole,
	AgentRole,
	LoadBalancerRole,
}

ClusterInternalNodeRoles is a list of roles for nodes that belong to a cluster

View Source
var DefaultNodeEnv = []string{
	fmt.Sprintf("%s=/output/kubeconfig.yaml", k3s.EnvKubeconfigOutput),
}

DefaultNodeEnv defines some default environment variables that should be set on every node

View Source
var DefaultRoleCmds = map[Role][]string{
	ServerRole: {"server"},
	AgentRole:  {"agent"},
}

DefaultRoleCmds maps the node roles to their respective default commands

View Source
var DefaultRuntimeLabels = map[string]string{
	"app": "k3d",
}

DefaultRuntimeLabels specifies a set of labels that will be attached to k3d runtime objects by default

View Source
var DefaultRuntimeLabelsVar = map[string]string{
	"k3d.version": version.GetVersion(),
}

DefaultRuntimeLabelsVar specifies a set of labels that will be attached to k3d runtime objects by default but are not static (e.g. across k3d versions)

View Source
var DefaultTmpfsMounts = []string{
	"/run",
	"/var/run",
}

DefaultTmpfsMounts specifies tmpfs mounts that are required for all k3d nodes

View Source
var DoNotCopyServerFlags = []string{
	"--cluster-init",
}

DoNotCopyServerFlags defines a list of commands/args that shouldn't be copied from an existing node when adding a similar node to a cluster

ImportModes defines the loading methods for image loading

NodeRoles defines the roles available for nodes

View Source
var ReadyLogMessagesByRoleAndIntent = map[Role]map[Intent]string{
	Role(InternalRoleInitServer): {
		IntentClusterCreate: "Containerd is now running",
		IntentClusterStart:  "Running kube-apiserver",
		IntentAny:           "Running kube-apiserver",
	},
	ServerRole: {
		IntentAny: "k3s is up and running",
	},
	AgentRole: {
		IntentAny: "Successfully registered node",
	},
	LoadBalancerRole: {
		IntentAny: "start worker processes",
	},
	RegistryRole: {
		IntentAny: "listening on",
	},
}

Functions

func GetDefaultObjectName

func GetDefaultObjectName(name string) string

GetDefaultObjectName prefixes the passed name with the default prefix

func GetHelperImageVersion

func GetHelperImageVersion() string

GetHelperImageVersion returns the CLI version or 'latest'

func GetLoadbalancerImage

func GetLoadbalancerImage() string

func GetReadyLogMessage

func GetReadyLogMessage(node *Node, intent Intent) string

func GetToolsImage

func GetToolsImage() string

Types

type AgentOpts

type AgentOpts struct{}

AgentOpts describes some additional agent role specific opts

type Cluster

type Cluster struct {
	Name               string             `json:"name,omitempty"`
	Network            ClusterNetwork     `json:"network,omitempty"`
	Token              string             `json:"clusterToken,omitempty"`
	Nodes              []*Node            `json:"nodes,omitempty"`
	InitNode           *Node              // init server node
	ExternalDatastore  *ExternalDatastore `json:"externalDatastore,omitempty"`
	KubeAPI            *ExposureOpts      `json:"kubeAPI,omitempty"`
	ServerLoadBalancer *Loadbalancer      `json:"serverLoadBalancer,omitempty"`
	ImageVolume        string             `json:"imageVolume,omitempty"`
	Volumes            []string           `json:"volumes,omitempty"` // k3d-managed volumes attached to this cluster
}

Cluster describes a k3d cluster

func (*Cluster) AgentCountRunning

func (c *Cluster) AgentCountRunning() (int, int)

AgentCountRunning returns the number of agent nodes running in the cluster and the total number

func (*Cluster) HasLoadBalancer

func (c *Cluster) HasLoadBalancer() bool

HasLoadBalancer returns true if cluster has a loadbalancer node

func (*Cluster) ServerCountRunning

func (c *Cluster) ServerCountRunning() (int, int)

ServerCountRunning returns the number of server nodes running in the cluster and the total number

type ClusterCreateOpts

type ClusterCreateOpts struct {
	DisableImageVolume  bool              `json:"disableImageVolume,omitempty"`
	WaitForServer       bool              `json:"waitForServer,omitempty"`
	Timeout             time.Duration     `json:"timeout,omitempty"`
	DisableLoadBalancer bool              `json:"disableLoadbalancer,omitempty"`
	GPURequest          string            `json:"gpuRequest,omitempty"`
	ServersMemory       string            `json:"serversMemory,omitempty"`
	AgentsMemory        string            `json:"agentsMemory,omitempty"`
	NodeHooks           []NodeHook        `json:"nodeHooks,omitempty"`
	GlobalLabels        map[string]string `json:"globalLabels,omitempty"`
	GlobalEnv           []string          `json:"globalEnv,omitempty"`
	HostAliases         []HostAlias       `json:"hostAliases,omitempty"`
	Registries          struct {
		Create *Registry         `json:"create,omitempty"`
		Use    []*Registry       `json:"use,omitempty"`
		Config *wharfie.Registry `json:"config,omitempty"` // registries.yaml (k3s config for containerd registry override)
	} `json:"registries,omitempty"`
}

ClusterCreateOpts describe a set of options one can set when creating a cluster

type ClusterDeleteOpts

type ClusterDeleteOpts struct {
	SkipRegistryCheck bool // skip checking if this is a registry (and act accordingly)
}

ClusterDeleteOpts describe a set of options one can set when deleting a cluster

type ClusterNetwork

type ClusterNetwork struct {
	Name     string `json:"name,omitempty"`
	ID       string `json:"id"` // may be the same as name, but e.g. docker only differentiates by random ID, not by name
	External bool   `json:"isExternal,omitempty"`
	IPAM     IPAM   `json:"ipam,omitempty"`
	Members  []*NetworkMember
}

ClusterNetwork describes a network which a cluster is running in

type ClusterStartOpts

type ClusterStartOpts struct {
	WaitForServer   bool
	Timeout         time.Duration
	NodeHooks       []NodeHook `json:"nodeHooks,omitempty"`
	EnvironmentInfo *EnvironmentInfo
	Intent          Intent
	HostAliases     []HostAlias `json:"hostAliases,omitempty"`
}

ClusterStartOpts describe a set of options one can set when (re-)starting a cluster

type EnvironmentInfo

type EnvironmentInfo struct {
	HostGateway netip.Addr
	RuntimeInfo runtimeTypes.RuntimeInfo
}

type ExposureOpts

type ExposureOpts struct {
	nat.PortMapping        // filled automatically (reference to normal portmapping)
	Host            string `json:"host,omitempty"`
}

ExposureOpts describes settings that the user can set for accessing the Kubernetes API

type ExternalDatastore

type ExternalDatastore struct {
	Endpoint string `json:"endpoint,omitempty"`
	CAFile   string `json:"caFile,omitempty"`
	CertFile string `json:"certFile,omitempty"`
	KeyFile  string `json:"keyFile,omitempty"`
	Network  string `json:"network,omitempty"`
}

ExternalDatastore describes an external datastore used for HA/multi-server clusters

type HostAlias

type HostAlias struct {
	IP        string   `mapstructure:"ip" json:"ip"`
	Hostnames []string `mapstructure:"hostnames" json:"hostnames"`
}

type IPAM

type IPAM struct {
	IPPrefix netip.Prefix `json:"ipPrefix,omitempty"`
	IPsUsed  []netip.Addr `json:"ipsUsed,omitempty"`
	Managed  bool         // IPAM is done by k3d
}

type ImageImportOpts

type ImageImportOpts struct {
	KeepTar       bool
	KeepToolsNode bool
	Mode          ImportMode
}

ImageImportOpts describes a set of options one can set for loading image(s) into cluster(s)

type ImportMode

type ImportMode string

LoadMode describes how images are loaded into the cluster

const (
	ImportModeAutoDetect ImportMode = "auto"
	ImportModeDirect     ImportMode = "direct"
	ImportModeToolsNode  ImportMode = "tools-node"
)

type Intent

type Intent string
const (
	IntentClusterCreate Intent = "cluster-create"
	IntentClusterStart  Intent = "cluster-start"
	IntentNodeCreate    Intent = "node-create"
	IntentNodeStart     Intent = "node-start"
	IntentAny           Intent = ""
)

type InternalRole

type InternalRole Role
const (
	InternalRoleInitServer InternalRole = "initServer"
)

type LifecycleStage

type LifecycleStage string

LifecycleStage defines descriptors for specific stages in the lifecycle of a node or cluster object

const (
	LifecycleStagePreStart  LifecycleStage = "preStart"
	LifecycleStagePostStart LifecycleStage = "postStart"
)

all defined lifecyclestages

type LoadBalancerSettings

type LoadBalancerSettings struct {
	WorkerConnections   int `json:"workerConnections"`
	DefaultProxyTimeout int `json:"defaultProxyTimeout,omitempty"`
}

type Loadbalancer

type Loadbalancer struct {
	*Node  `mapstructure:",squash"` // the underlying node
	Config *LoadbalancerConfig      `mapstructure:"config" json:"config"` // its configuration
}

func NewLoadbalancer

func NewLoadbalancer() *Loadbalancer

type LoadbalancerConfig

type LoadbalancerConfig struct {
	Ports    map[string][]string  `json:"ports"`
	Settings LoadBalancerSettings `json:"settings"`
}

LoadbalancerConfig defines the coarse file structure to configure the k3d-proxy * Example: * ports: * 1234.tcp: * - k3d-k3s-default-server-0 * - k3d-k3s-default-server-1 * 4321.udp: * - k3d-k3s-default-agent-0 * - k3d-k3s-default-agent-1

type LoadbalancerCreateOpts

type LoadbalancerCreateOpts struct {
	Labels          map[string]string
	ConfigOverrides []string
}

type NetworkMember

type NetworkMember struct {
	Name string
	IP   netip.Addr
}

type Node

type Node struct {
	Name           string                `json:"name,omitempty"`
	Role           Role                  `json:"role,omitempty"`
	Image          string                `json:"image,omitempty"`
	Volumes        []string              `json:"volumes,omitempty"`
	Env            []string              `json:"env,omitempty"`
	Cmd            []string              // filled automatically based on role
	Args           []string              `json:"extraArgs,omitempty"`
	Ports          nat.PortMap           `json:"portMappings,omitempty"`
	Restart        bool                  `json:"restart,omitempty"`
	Created        string                `json:"created,omitempty"`
	HostPidMode    bool                  `json:"hostPidMode,omitempty"`
	RuntimeLabels  map[string]string     `json:"runtimeLabels,omitempty"`
	RuntimeUlimits []*dockerunits.Ulimit `json:"runtimeUlimits,omitempty"`
	K3sNodeLabels  map[string]string     `json:"k3sNodeLabels,omitempty"`
	Networks       []string              // filled automatically
	ExtraHosts     []string              // filled automatically (docker specific?)
	ServerOpts     ServerOpts            `json:"serverOpts,omitempty"`
	AgentOpts      AgentOpts             `json:"agentOpts,omitempty"`
	GPURequest     string                // filled automatically
	Memory         string                // filled automatically
	State          NodeState             // filled automatically
	IP             NodeIP                // filled automatically -> refers solely to the cluster network
	HookActions    []NodeHook            `json:"hooks,omitempty"`
	K3dEntrypoint  bool
}

Node describes a k3d node

func (*Node) FillRuntimeLabels

func (node *Node) FillRuntimeLabels()

type NodeCreateOpts

type NodeCreateOpts struct {
	Wait            bool
	Timeout         time.Duration
	NodeHooks       []NodeHook `json:"nodeHooks,omitempty"`
	EnvironmentInfo *EnvironmentInfo
	ClusterToken    string
}

NodeCreateOpts describes a set of options one can set when creating a new node

type NodeDeleteOpts

type NodeDeleteOpts struct {
	SkipLBUpdate bool // skip updating the loadbalancer
}

NodeDeleteOpts describes a set of options one can set when deleting a node

type NodeHook

type NodeHook struct {
	Stage  LifecycleStage `json:"stage,omitempty"`
	Action NodeHookAction `json:"action,omitempty"`
}

NodeHook is an action that is bound to a specifc stage of a node lifecycle

type NodeHookAction

type NodeHookAction interface {
	Run(ctx context.Context, node *Node) error
	Name() string // returns the name (type) of the action
	Info() string // returns a description of what this action does
}

NodeHookAction is an interface to implement actions that should trigger at specific points of the node lifecycle

type NodeIP

type NodeIP struct {
	IP     netip.Addr
	Static bool
}

type NodeStartOpts

type NodeStartOpts struct {
	Wait            bool
	Timeout         time.Duration
	NodeHooks       []NodeHook `json:"nodeHooks,omitempty"`
	ReadyLogMessage string
	EnvironmentInfo *EnvironmentInfo
	Intent          Intent
}

NodeStartOpts describes a set of options one can set when (re-)starting a node

type NodeState

type NodeState struct {
	Running bool
	Status  string
	Started string
}

NodeState describes the current state of a node

type Registry

type Registry struct {
	ClusterRef   string          // filled automatically -> if created with a cluster
	Protocol     string          `json:"protocol,omitempty"` // default: http
	Host         string          `json:"host"`
	Image        string          `json:"image,omitempty"`
	Network      string          `json:"Network,omitempty"`
	Volumes      []string        `json:"Volumes,omitempty"`
	ExposureOpts ExposureOpts    `json:"expose"`
	Options      RegistryOptions `json:"options,omitempty"`
}

Registry describes a k3d-managed registry

type RegistryExternal

type RegistryExternal struct {
	Protocol string `json:"protocol,omitempty"` // default: http
	Host     string `json:"host"`
	Port     string `json:"port"`
}

RegistryExternal describes a minimal spec for an "external" registry "external" meaning, that it's unrelated to the current cluster e.g. used for the --registry-use flag registry reference

type RegistryOptions added in v5.4.3

type RegistryOptions struct {
	ConfigFile string        `json:"configFile,omitempty"`
	Proxy      RegistryProxy `json:"proxy,omitempty"`
}

type RegistryProxy added in v5.4.3

type RegistryProxy struct {
	RemoteURL string `json:"remoteURL"`
	Username  string `json:"username,omitempty"`
	Password  string `json:"password,omitempty"`
}

type Role

type Role string

Role defines a k3d node role

const (
	ServerRole       Role = "server"
	AgentRole        Role = "agent"
	NoRole           Role = "noRole"
	LoadBalancerRole Role = "loadbalancer"
	RegistryRole     Role = "registry"
)

existing k3d node roles

type ServerOpts

type ServerOpts struct {
	IsInit  bool          `json:"isInitializingServer,omitempty"`
	KubeAPI *ExposureOpts `json:"kubeAPI"`
}

ServerOpts describes some additional server role specific opts

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL