k3s

package
v0.1.5 Latest Latest
Warning

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

Go to latest
Published: Dec 23, 2022 License: Apache-2.0 Imports: 30 Imported by: 0

Documentation

Index

Constants

View Source
const DefaultK3sConfigLocation = "/etc/rancher/k3s/config.yaml"
View Source
const (
	// KThreesControlPlaneControllerName defines the controller used when creating clients.
	KThreesControlPlaneControllerName = "kthrees-controlplane-controller"
)

Variables

View Source
var (
	ErrControlPlaneMinNodes = errors.New("cluster has fewer than 2 control plane nodes; removing an etcd member is not supported")
)
View Source
var Log = klogr.New()

Log is the global logger for the internal package.

Functions

func ControlPlaneLabelsForCluster

func ControlPlaneLabelsForCluster(clusterName string) map[string]string

ControlPlaneLabelsForCluster returns a set of labels to add to a control plane machine for this specific cluster.

func PickFewest

func PickFewest(failureDomains clusterv1.FailureDomains, machines FilterableMachineCollection) *string

PickFewest returns the failure domain with the fewest number of machines.

func PickMost

func PickMost(c *ControlPlane, machines FilterableMachineCollection) *string

PickMost returns a failure domain that is in machines and has most control-plane machines on.

Types

type ClusterStatus

type ClusterStatus struct {
	// Nodes are a total count of nodes
	Nodes int32
	// ReadyNodes are the count of nodes that are reporting ready
	ReadyNodes int32
}

ClusterStatus holds stats information about the cluster.

type ControlPlane

type ControlPlane struct {
	KCP      *controlplanev1.KThreesControlPlane
	Cluster  *clusterv1.Cluster
	Machines FilterableMachineCollection
	// contains filtered or unexported fields
}

ControlPlane holds business logic around control planes. It should never need to connect to a service, that responsibility lies outside of this struct. Going forward we should be trying to add more logic to here and reduce the amount of logic in the reconciler.

func NewControlPlane

func NewControlPlane(ctx context.Context, client client.Client, cluster *clusterv1.Cluster, kcp *controlplanev1.KThreesControlPlane, ownedMachines FilterableMachineCollection) (*ControlPlane, error)

NewControlPlane returns an instantiated ControlPlane.

func (*ControlPlane) AsOwnerReference

func (c *ControlPlane) AsOwnerReference() *metav1.OwnerReference

AsOwnerReference returns an owner reference to the KThreesControlPlane.

func (*ControlPlane) EtcdImageData

func (c *ControlPlane) EtcdImageData() (string, string)

EtcdImageData returns the etcd image data embedded in the ClusterConfiguration or empty strings if none are defined.

func (*ControlPlane) FailureDomainWithMostMachines

func (c *ControlPlane) FailureDomainWithMostMachines(machines FilterableMachineCollection) *string

FailureDomainWithMostMachines returns a fd which exists both in machines and control-plane machines and has the most control-plane machines on it.

func (*ControlPlane) FailureDomains

func (c *ControlPlane) FailureDomains() clusterv1.FailureDomains

FailureDomains returns a slice of failure domain objects synced from the infrastructure provider into Cluster.Status.

func (*ControlPlane) GenerateKThreesConfig

func (c *ControlPlane) GenerateKThreesConfig(spec *bootstrapv1.KThreesConfigSpec) *bootstrapv1.KThreesConfig

GenerateKThreesConfig generates a new KThreesConfig config for creating new control plane nodes.

func (*ControlPlane) HasDeletingMachine

func (c *ControlPlane) HasDeletingMachine() bool

HasDeletingMachine returns true if any machine in the control plane is in the process of being deleted.

func (*ControlPlane) HasUnhealthyMachine

func (c *ControlPlane) HasUnhealthyMachine() bool

HasUnhealthyMachine returns true if any machine in the control plane is marked as unhealthy by MHC.

func (*ControlPlane) HealthyMachines

func (c *ControlPlane) HealthyMachines() FilterableMachineCollection

HealthyMachines returns the list of control plane machines not marked as unhealthy by MHC.

func (*ControlPlane) InfrastructureTemplate

func (c *ControlPlane) InfrastructureTemplate() *corev1.ObjectReference

InfrastructureTemplate returns the KThreesControlPlane's infrastructure template.

func (*ControlPlane) InitialControlPlaneConfig

func (c *ControlPlane) InitialControlPlaneConfig() *bootstrapv1.KThreesConfigSpec

InitialControlPlaneConfig returns a new KThreesConfigSpec that is to be used for an initializing control plane.

func (*ControlPlane) IsEtcdManaged

func (c *ControlPlane) IsEtcdManaged() bool

IsEtcdManaged returns true if the control plane relies on a managed etcd.

func (*ControlPlane) JoinControlPlaneConfig

func (c *ControlPlane) JoinControlPlaneConfig() *bootstrapv1.KThreesConfigSpec

JoinControlPlaneConfig returns a new KThreesConfigSpec that is to be used for joining control planes.

func (*ControlPlane) Logger

func (c *ControlPlane) Logger() logr.Logger

Logger returns a logger with useful context.

func (*ControlPlane) MachineInFailureDomainWithMostMachines

func (c *ControlPlane) MachineInFailureDomainWithMostMachines(machines FilterableMachineCollection) (*clusterv1.Machine, error)

MachineInFailureDomainWithMostMachines returns the first matching failure domain with machines that has the most control-plane machines on it.

func (*ControlPlane) MachineWithDeleteAnnotation

func (c *ControlPlane) MachineWithDeleteAnnotation(machines FilterableMachineCollection) FilterableMachineCollection

MachineWithDeleteAnnotation returns a machine that has been annotated with DeleteMachineAnnotation key.

func (*ControlPlane) MachinesNeedingRollout

func (c *ControlPlane) MachinesNeedingRollout() FilterableMachineCollection

MachinesNeedingRollout return a list of machines that need to be rolled out.

func (*ControlPlane) NeedsReplacementNode

func (c *ControlPlane) NeedsReplacementNode() bool

NeedsReplacementNode determines if the control plane needs to create a replacement node during upgrade.

func (*ControlPlane) NewMachine

func (c *ControlPlane) NewMachine(infraRef, bootstrapRef *corev1.ObjectReference, failureDomain *string) *clusterv1.Machine

NewMachine returns a machine configured to be a part of the control plane.

func (*ControlPlane) NextFailureDomainForScaleUp

func (c *ControlPlane) NextFailureDomainForScaleUp() *string

NextFailureDomainForScaleUp returns the failure domain with the fewest number of up-to-date machines.

func (*ControlPlane) PatchMachines

func (c *ControlPlane) PatchMachines(ctx context.Context) error

func (*ControlPlane) UnhealthyMachines

func (c *ControlPlane) UnhealthyMachines() FilterableMachineCollection

UnhealthyMachines returns the list of control plane machines marked as unhealthy by MHC.

func (*ControlPlane) UpToDateMachines

func (c *ControlPlane) UpToDateMachines() FilterableMachineCollection

UpToDateMachines returns the machines that are up to date with the control plane's configuration and therefore do not require rollout.

func (*ControlPlane) Version

func (c *ControlPlane) Version() *string

Version returns the KThreesControlPlane's version.

type CoreDNSMigrator

type CoreDNSMigrator struct{}

func (*CoreDNSMigrator) Migrate

func (c *CoreDNSMigrator) Migrate(fromCoreDNSVersion, toCoreDNSVersion, corefile string, deprecations bool) (string, error)

type FilterableMachineCollection

type FilterableMachineCollection map[string]*clusterv1.Machine

FilterableMachineCollection is a set of Machines

func NewFilterableMachineCollection

func NewFilterableMachineCollection(machines ...*clusterv1.Machine) FilterableMachineCollection

NewFilterableMachineCollection creates a FilterableMachineCollection from a list of values.

func NewFilterableMachineCollectionFromMachineList

func NewFilterableMachineCollectionFromMachineList(machineList *clusterv1.MachineList) FilterableMachineCollection

NewFilterableMachineCollectionFromMachineList creates a FilterableMachineCollection from the given MachineList

func (FilterableMachineCollection) AnyFilter

AnyFilter returns a FilterableMachineCollection containing only the Machines that match any of the given MachineFilters

func (FilterableMachineCollection) ConditionGetters

func (s FilterableMachineCollection) ConditionGetters() []conditions.Getter

ConditionGetters returns the slice with machines converted into conditions.Getter.

func (FilterableMachineCollection) DeepCopy

DeepCopy returns a deep copy

func (FilterableMachineCollection) Difference

Difference returns a copy without machines that are in the given collection

func (FilterableMachineCollection) Filter

Filter returns a FilterableMachineCollection containing only the Machines that match all of the given MachineFilters

func (FilterableMachineCollection) Insert

func (s FilterableMachineCollection) Insert(machines ...*clusterv1.Machine)

Insert adds items to the set.

func (FilterableMachineCollection) Len

Len returns the size of the set.

func (FilterableMachineCollection) Names

func (s FilterableMachineCollection) Names() []string

Names returns a slice of the names of each machine in the collection. Useful for logging and test assertions.

func (FilterableMachineCollection) Newest

Newest returns the Machine with the most recent CreationTimestamp

func (FilterableMachineCollection) Oldest

Oldest returns the Machine with the oldest CreationTimestamp

func (FilterableMachineCollection) SortedByCreationTimestamp

func (s FilterableMachineCollection) SortedByCreationTimestamp() []*clusterv1.Machine

SortedByCreationTimestamp returns the machines sorted by creation timestamp

func (FilterableMachineCollection) UnsortedList

func (s FilterableMachineCollection) UnsortedList() []*clusterv1.Machine

UnsortedList returns the slice with contents in random order.

type K3sAgentConfig

type K3sAgentConfig struct {
	Token           string   `json:"token,omitempty"`
	Server          string   `json:"server,omitempty"`
	KubeletArgs     []string `json:"kubelet-arg,omitempty"`
	NodeLabels      []string `json:"node-labels,omitempty"`
	NodeTaints      []string `json:"node-taints,omitempty"`
	PrivateRegistry string   `json:"private-registry,omitempty"`
	KubeProxyArgs   []string `json:"kube-proxy-arg,omitempty"`
	NodeName        string   `json:"node-name,omitempty"`
}

func GenerateWorkerConfig

func GenerateWorkerConfig(serverUrl string, token string, agentConfig bootstrapv1.KThreesAgentConfig) K3sAgentConfig

type K3sServerConfig

type K3sServerConfig struct {
	DisableCloudController    bool     `json:"disable-cloud-controller,omitempty"`
	KubeAPIServerArgs         []string `json:"kube-apiserver-arg,omitempty"`
	KubeControllerManagerArgs []string `json:"kube-controller-manager-arg,omitempty"`
	TLSSan                    []string `json:"tls-san,omitempty"`
	BindAddress               string   `json:"bind-address,omitempty"`
	HttpsListenPort           string   `json:"https-listen-port,omitempty"`
	AdvertiseAddress          string   `json:"advertise-address,omitempty"`
	AdvertisePort             string   `json:"advertise-port,omitempty"`
	ClusterCidr               string   `json:"cluster-cidr,omitempty"`
	ServiceCidr               string   `json:"service-cidr,omitempty"`
	ClusterDNS                string   `json:"cluster-dns,omitempty"`
	ClusterDomain             string   `json:"cluster-domain,omitempty"`
	DisableComponents         []string `json:"disable,omitempty"`
	ClusterInit               bool     `json:"cluster-init,omitempty"`
	K3sAgentConfig            `json:",inline"`
}

func GenerateInitControlPlaneConfig

func GenerateInitControlPlaneConfig(controlPlaneEndpoint string, token string, serverConfig bootstrapv1.KThreesServerConfig, agentConfig bootstrapv1.KThreesAgentConfig) K3sServerConfig

func GenerateJoinControlPlaneConfig

func GenerateJoinControlPlaneConfig(serverUrl string, token string, controlplaneendpoint string, serverConfig bootstrapv1.KThreesServerConfig, agentConfig bootstrapv1.KThreesAgentConfig) K3sServerConfig

type Management

type Management struct {
	Client ctrlclient.Reader
}

Management holds operations on the management cluster.

func (*Management) Get

Get implements ctrlclient.Reader

func (*Management) GetMachinesForCluster

func (m *Management) GetMachinesForCluster(ctx context.Context, cluster client.ObjectKey, filters ...machinefilters.Func) (FilterableMachineCollection, error)

GetMachinesForCluster returns a list of machines that can be filtered or not. If no filter is supplied then all machines associated with the target cluster are returned.

func (*Management) GetWorkloadCluster

func (m *Management) GetWorkloadCluster(ctx context.Context, clusterKey client.ObjectKey) (WorkloadCluster, error)

GetWorkloadCluster builds a cluster object. The cluster comes with an etcd client generator to connect to any etcd pod living on a managed machine.

func (*Management) List

func (m *Management) List(ctx context.Context, list client.ObjectList, opts ...ctrlclient.ListOption) error

List implements ctrlclient.Reader

type ManagementCluster

type ManagementCluster interface {
	ctrlclient.Reader

	GetMachinesForCluster(ctx context.Context, cluster client.ObjectKey, filters ...machinefilters.Func) (FilterableMachineCollection, error)
	GetWorkloadCluster(ctx context.Context, clusterKey client.ObjectKey) (WorkloadCluster, error)
}

ManagementCluster defines all behaviors necessary for something to function as a management cluster.

type RemoteClusterConnectionError

type RemoteClusterConnectionError struct {
	Name string
	Err  error
}

RemoteClusterConnectionError represents a failure to connect to a remote cluster

func (*RemoteClusterConnectionError) Error

func (*RemoteClusterConnectionError) Unwrap

func (e *RemoteClusterConnectionError) Unwrap() error

type Workload

type Workload struct {
	Client          ctrlclient.Client
	CoreDNSMigrator coreDNSMigrator
}

Workload defines operations on workload clusters.

func (*Workload) ClusterStatus

func (w *Workload) ClusterStatus(ctx context.Context) (ClusterStatus, error)

ClusterStatus returns the status of the cluster.

func (*Workload) UpdateAgentConditions

func (w *Workload) UpdateAgentConditions(ctx context.Context, controlPlane *ControlPlane)

UpdateAgentConditions is responsible for updating machine conditions reflecting the status of all the control plane components. This operation is best effort, in the sense that in case of problems in retrieving the pod status, it sets the condition to Unknown state without returning any error.

func (*Workload) UpdateCoreDNS

func (w *Workload) UpdateCoreDNS(ctx context.Context, kcp *controlplanev1.KThreesControlPlane) error

UpdateCoreDNS updates the coredns corefile and coredns deployment.

func (*Workload) UpdateEtcdConditions

func (w *Workload) UpdateEtcdConditions(ctx context.Context, controlPlane *ControlPlane)

UpdateEtcdConditions is responsible for updating machine conditions reflecting the status of all the etcd members. This operation is best effort, in the sense that in case of problems in retrieving member status, it sets the condition to Unknown state without returning any error.

type WorkloadCluster

type WorkloadCluster interface {
	// Basic health and status checks.
	ClusterStatus(ctx context.Context) (ClusterStatus, error)
	UpdateAgentConditions(ctx context.Context, controlPlane *ControlPlane)
	UpdateEtcdConditions(ctx context.Context, controlPlane *ControlPlane)
}

WorkloadCluster defines all behaviors necessary to upgrade kubernetes on a workload cluster

TODO: Add a detailed description to each of these method definitions.

Jump to

Keyboard shortcuts

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