Documentation ¶
Overview ¶
Copyright © 2020-2021 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-2021 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-2021 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-2021 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-2021 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-2021 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-2021 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-2021 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-2021 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
- Variables
- func GetDefaultObjectName(name string) string
- func GetHelperImageVersion() string
- func GetLoadbalancerImage() string
- func GetReadyLogMessage(node *Node, intent Intent) string
- func GetToolsImage() string
- type AgentOpts
- type Cluster
- type ClusterCreateOpts
- type ClusterDeleteOpts
- type ClusterNetwork
- type ClusterStartOpts
- type EnvironmentInfo
- type ExposureOpts
- type ExternalDatastore
- type IPAM
- type ImageImportOpts
- type ImportMode
- type Intent
- type InternalRole
- type LifecycleStage
- type LoadBalancerSettings
- type Loadbalancer
- type LoadbalancerConfig
- type LoadbalancerCreateOpts
- type NetworkMember
- type Node
- type NodeCreateOpts
- type NodeDeleteOpts
- type NodeHook
- type NodeHookAction
- type NodeIP
- type NodeStartOpts
- type NodeState
- type Registry
- type RegistryExternal
- type Role
- type ServerOpts
Constants ¶
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" )
k3d config environment variables for options that don't have a place in the config file or CLI
const ( DefaultLoadbalancerConfigPath = "/etc/confd/values.yaml" DefaultLoadbalancerWorkerConnections = 1024 )
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
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" 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" 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
const DefaultAPIHost = "0.0.0.0"
DefaultAPIHost defines the default host (IP) for the Kubernetes API
const DefaultAPIPort = "6443"
DefaultAPIPort defines the default Kubernetes API Port
const DefaultClusterName = "k3s-default"
DefaultClusterName specifies the default name used for newly created clusters
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)
const DefaultConfigDirName = ".k3d" // should end up in $HOME/
DefaultConfigDirName defines the name of the config directory (where we'll e.g. put the kubeconfigs)
const DefaultImageVolumeMountPath = "/k3d/images"
DefaultImageVolumeMountPath defines the mount path inside k3d nodes where we will mount the shared image volume by default
const DefaultK3dInternalHostRecord = "host.k3d.internal"
DefaultK3dInternalHostRecord defines the default /etc/hosts entry for the k3d host
const DefaultK3sImageRepo = "docker.io/rancher/k3s"
DefaultK3sImageRepo specifies the default image repository for the used k3s image
const DefaultKubeconfigPrefix = DefaultObjectNamePrefix + "-kubeconfig"
DefaultKubeconfigPrefix defines the default prefix for kubeconfig files
const DefaultLBImageRepo = "docker.io/rancher/k3d-proxy"
DefaultLBImageRepo defines the default cluster load balancer image
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.
const DefaultObjectNamePrefix = "k3d"
DefaultObjectNamePrefix defines the name prefix for every object created by k3d
const DefaultRegistryImageRepo = "docker.io/library/registry"
DefaultRegistryImageRepo defines the default image used for the k3d-managed registry
const DefaultRegistryImageTag = "2"
DefaultRegistryImageTag defines the default image tag used for the k3d-managed registry
const DefaultRuntimeNetwork = "bridge"
DefaultNetwork defines the default (Docker) runtime network
const DefaultToolsImageRepo = "docker.io/rancher/k3d-tools"
DefaultToolsImageRepo defines the default image used for the tools container
const NodeStatusRestarting = "restarting"
NodeStatusRestarting defines the status string that signals the node container is restarting
const NodeWaitForLogMessageRestartWarnTime = 2 * time.Minute
NodeWaitForLogMessageRestartWarnTime is the time after which to warn about a restarting container
Variables ¶
var ClusterExternalNodeRoles = []Role{ RegistryRole, }
ClusterExternalNodeRoles is a list of roles for nodes that do not belong to a specific cluster
var ClusterInternalNodeRoles = []Role{ ServerRole, AgentRole, LoadBalancerRole, }
ClusterInternalNodeRoles is a list of roles for nodes that belong to a cluster
var DefaultNodeEnv = []string{ fmt.Sprintf("%s=/output/kubeconfig.yaml", k3s.EnvKubeconfigOutput), }
DefaultNodeEnv defines some default environment variables that should be set on every node
var DefaultRoleCmds = map[Role][]string{
ServerRole: {"server"},
AgentRole: {"agent"},
}
DefaultRoleCmds maps the node roles to their respective default commands
var DefaultRuntimeLabels = map[string]string{
"app": "k3d",
}
DefaultRuntimeLabels specifies a set of labels that will be attached to k3d runtime objects by default
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)
var DefaultTmpfsMounts = []string{
"/run",
"/var/run",
}
DefaultTmpfsMounts specifies tmpfs mounts that are required for all k3d nodes
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
var ImportModes = map[string]ImportMode{ string(ImportModeAutoDetect): ImportModeAutoDetect, string(ImportModeDirect): ImportModeDirect, string(ImportModeToolsNode): ImportModeToolsNode, }
ImportModes defines the loading methods for image loading
var NodeRoles = map[string]Role{ string(ServerRole): ServerRole, string(AgentRole): AgentRole, string(LoadBalancerRole): LoadBalancerRole, string(RegistryRole): RegistryRole, }
NodeRoles defines the roles available for nodes
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 ¶
GetDefaultObjectName prefixes the passed name with the default prefix
func GetHelperImageVersion ¶ added in v5.0.2
func GetHelperImageVersion() string
GetHelperImageVersion returns the CLI version or 'latest'
func GetLoadbalancerImage ¶
func GetLoadbalancerImage() string
func GetReadyLogMessage ¶ added in v5.0.2
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 `yaml:"name" json:"name,omitempty"` Network ClusterNetwork `yaml:"network" json:"network,omitempty"` Token string `yaml:"clusterToken" json:"clusterToken,omitempty"` Nodes []*Node `yaml:"nodes" json:"nodes,omitempty"` InitNode *Node // init server node ExternalDatastore *ExternalDatastore `yaml:"externalDatastore,omitempty" json:"externalDatastore,omitempty"` KubeAPI *ExposureOpts `yaml:"kubeAPI" json:"kubeAPI,omitempty"` ServerLoadBalancer *Loadbalancer `yaml:"serverLoadbalancer,omitempty" json:"serverLoadBalancer,omitempty"` ImageVolume string `yaml:"imageVolume" json:"imageVolume,omitempty"` }
Cluster describes a k3d cluster
func (*Cluster) AgentCountRunning ¶
AgentCountRunning returns the number of agent nodes running in the cluster and the total number
func (*Cluster) HasLoadBalancer ¶
HasLoadBalancer returns true if cluster has a loadbalancer node
func (*Cluster) ServerCountRunning ¶
ServerCountRunning returns the number of server nodes running in the cluster and the total number
type ClusterCreateOpts ¶
type ClusterCreateOpts struct { DisableImageVolume bool `yaml:"disableImageVolume" json:"disableImageVolume,omitempty"` WaitForServer bool `yaml:"waitForServer" json:"waitForServer,omitempty"` Timeout time.Duration `yaml:"timeout" json:"timeout,omitempty"` DisableLoadBalancer bool `yaml:"disableLoadbalancer" json:"disableLoadbalancer,omitempty"` GPURequest string `yaml:"gpuRequest" json:"gpuRequest,omitempty"` ServersMemory string `yaml:"serversMemory" json:"serversMemory,omitempty"` AgentsMemory string `yaml:"agentsMemory" json:"agentsMemory,omitempty"` NodeHooks []NodeHook `yaml:"nodeHooks,omitempty" json:"nodeHooks,omitempty"` GlobalLabels map[string]string `yaml:"globalLabels,omitempty" json:"globalLabels,omitempty"` GlobalEnv []string `yaml:"globalEnv,omitempty" json:"globalEnv,omitempty"` Registries struct { Create *Registry `yaml:"create,omitempty" json:"create,omitempty"` Use []*Registry `yaml:"use,omitempty" json:"use,omitempty"` Config *k3s.Registry `yaml:"config,omitempty" json:"config,omitempty"` // registries.yaml (k3s config for containerd registry override) } `yaml:"registries,omitempty" 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 `yaml:"name" json:"name,omitempty"` ID string `yaml:"id" json:"id"` // may be the same as name, but e.g. docker only differentiates by random ID, not by name External bool `yaml:"external" json:"isExternal,omitempty"` IPAM IPAM `yaml:"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 `yaml:"nodeHooks,omitempty" json:"nodeHooks,omitempty"` EnvironmentInfo *EnvironmentInfo Intent Intent }
ClusterStartOpts describe a set of options one can set when (re-)starting a cluster
type EnvironmentInfo ¶
type EnvironmentInfo struct { HostGateway net.IP RuntimeInfo runtimeTypes.RuntimeInfo }
type ExposureOpts ¶
type ExposureOpts struct { nat.PortMapping // filled automatically (reference to normal portmapping) Host string `yaml:"host,omitempty" json:"host,omitempty"` }
ExposureOpts describes settings that the user can set for accessing the Kubernetes API
type ExternalDatastore ¶
type ExternalDatastore struct { Endpoint string `yaml:"endpoint" json:"endpoint,omitempty"` CAFile string `yaml:"caFile" json:"caFile,omitempty"` CertFile string `yaml:"certFile" json:"certFile,omitempty"` KeyFile string `yaml:"keyFile" json:"keyFile,omitempty"` Network string `yaml:"network" json:"network,omitempty"` }
ExternalDatastore describes an external datastore used for HA/multi-server clusters
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 ¶ added in v5.2.0
type ImportMode string
LoadMode describes how images are loaded into the cluster
const ( ImportModeAutoDetect ImportMode = "auto" ImportModeDirect ImportMode = "direct" ImportModeToolsNode ImportMode = "tools-node" )
type InternalRole ¶ added in v5.0.2
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 Loadbalancer ¶
type Loadbalancer struct { Node *Node `mapstructure:",squash" yaml:",inline"` // the underlying node Config *LoadbalancerConfig `mapstructure:"config" yaml:"config"` // its configuration }
func NewLoadbalancer ¶
func NewLoadbalancer() *Loadbalancer
type LoadbalancerConfig ¶
type LoadbalancerConfig struct { Ports map[string][]string `yaml:"ports"` Settings LoadBalancerSettings `yaml:"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 NetworkMember ¶
type Node ¶
type Node struct { Name string `yaml:"name" json:"name,omitempty"` Role Role `yaml:"role" json:"role,omitempty"` Image string `yaml:"image" json:"image,omitempty"` Volumes []string `yaml:"volumes" json:"volumes,omitempty"` Env []string `yaml:"env" json:"env,omitempty"` Cmd []string // filled automatically based on role Args []string `yaml:"extraArgs" json:"extraArgs,omitempty"` Ports nat.PortMap `yaml:"portMappings" json:"portMappings,omitempty"` Restart bool `yaml:"restart" json:"restart,omitempty"` Created string `yaml:"created" json:"created,omitempty"` RuntimeLabels map[string]string `yaml:"runtimeLabels" json:"runtimeLabels,omitempty"` K3sNodeLabels map[string]string `yaml:"k3sNodeLabels" json:"k3sNodeLabels,omitempty"` Networks []string // filled automatically ExtraHosts []string // filled automatically ServerOpts ServerOpts `yaml:"serverOpts" json:"serverOpts,omitempty"` AgentOpts AgentOpts `yaml:"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 `yaml:"hooks" json:"hooks,omitempty"` }
Node describes a k3d node
func (*Node) FillRuntimeLabels ¶
func (node *Node) FillRuntimeLabels()
type NodeCreateOpts ¶
type NodeCreateOpts struct { Wait bool Timeout time.Duration NodeHooks []NodeHook `yaml:"nodeHooks,omitempty" 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 `yaml:"stage,omitempty" json:"stage,omitempty"` Action NodeHookAction `yaml:"action,omitempty" 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 NodeStartOpts ¶
type NodeStartOpts struct { Wait bool Timeout time.Duration NodeHooks []NodeHook `yaml:"nodeHooks,omitempty" json:"nodeHooks,omitempty"` ReadyLogMessage string EnvironmentInfo *EnvironmentInfo Intent Intent }
NodeStartOpts describes a set of options one can set when (re-)starting a node
type Registry ¶
type Registry struct { ClusterRef string // filled automatically -> if created with a cluster Protocol string `yaml:"protocol,omitempty" json:"protocol,omitempty"` // default: http Host string `yaml:"host" json:"host"` Image string `yaml:"image,omitempty" json:"image,omitempty"` Network string `yaml:"Network,omitempty" json:"Network,omitempty"` ExposureOpts ExposureOpts `yaml:"expose" json:"expose"` Options struct { ConfigFile string `yaml:"configFile,omitempty" json:"configFile,omitempty"` Proxy struct { RemoteURL string `yaml:"remoteURL" json:"remoteURL"` Username string `yaml:"username,omitempty" json:"username,omitempty"` Password string `yaml:"password,omitempty" json:"password,omitempty"` } `yaml:"proxy,omitempty" json:"proxy,omitempty"` } `yaml:"options,omitempty" json:"options,omitempty"` }
Registry describes a k3d-managed registry
type RegistryExternal ¶
type RegistryExternal struct { Protocol string `yaml:"protocol,omitempty" json:"protocol,omitempty"` // default: http Host string `yaml:"host" json:"host"` Port string `yaml:"port" 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 ServerOpts ¶
type ServerOpts struct { IsInit bool `yaml:"isInitializingServer" json:"isInitializingServer,omitempty"` KubeAPI *ExposureOpts `yaml:"kubeAPI" json:"kubeAPI"` }
ServerOpts describes some additional server role specific opts