upgrade

package
v1.24.11 Latest Latest
Warning

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

Go to latest
Published: Feb 22, 2023 License: Apache-2.0 Imports: 43 Imported by: 32

Documentation

Index

Constants

View Source
const (
	// MaximumAllowedMinorVersionUpgradeSkew describes how many minor versions kubeadm can upgrade the control plane version in one go
	MaximumAllowedMinorVersionUpgradeSkew = 1

	// MaximumAllowedMinorVersionDowngradeSkew describes how many minor versions kubeadm can upgrade the control plane version in one go
	MaximumAllowedMinorVersionDowngradeSkew = 1

	// MaximumAllowedMinorVersionKubeletSkew describes how many minor versions the control plane version and the kubelet can skew in a kubeadm cluster
	MaximumAllowedMinorVersionKubeletSkew = 1
)
View Source
const (
	// UpgradeManifestTimeout is timeout of upgrading the static pod manifest
	UpgradeManifestTimeout = 5 * time.Minute
)

Variables

This section is empty.

Functions

func AddNewControlPlaneTaint added in v1.24.0

func AddNewControlPlaneTaint(client clientset.Interface) error

AddNewControlPlaneTaint finds all nodes with the new "control-plane" node-role label and adds the new "control-plane" taint to them. TODO: https://github.com/kubernetes/kubeadm/issues/2200

func CheckClusterHealth

func CheckClusterHealth(client clientset.Interface, cfg *kubeadmapi.ClusterConfiguration, ignoreChecksErrors sets.String) error

CheckClusterHealth makes sure: - the API /healthz endpoint is healthy - all control-plane Nodes are Ready - (if self-hosted) that there are DaemonSets with at least one Pod for all control plane components - (if static pod-hosted) that all required Static Pod manifests exist on disk

func DryRunStaticPodUpgrade added in v1.15.0

func DryRunStaticPodUpgrade(patchesDir string, internalcfg *kubeadmapi.InitConfiguration) error

DryRunStaticPodUpgrade fakes an upgrade of the control plane

func GetEtcdImageTagFromStaticPod added in v1.19.0

func GetEtcdImageTagFromStaticPod(manifestDir string) (string, error)

GetEtcdImageTagFromStaticPod returns the image tag of the local etcd static pod

func GetKubeletDir added in v1.15.0

func GetKubeletDir(dryRun bool) (string, error)

GetKubeletDir gets the kubelet directory based on whether the user is dry-running this command or not.

func PerformPostUpgradeTasks

func PerformPostUpgradeTasks(client clientset.Interface, cfg *kubeadmapi.InitConfiguration, dryRun bool) error

PerformPostUpgradeTasks runs nearly the same functions as 'kubeadm init' would do Note that the mark-control-plane phase is left out, not needed, and no token is created as that doesn't belong to the upgrade

func PerformStaticPodUpgrade added in v1.15.0

func PerformStaticPodUpgrade(client clientset.Interface, waiter apiclient.Waiter, internalcfg *kubeadmapi.InitConfiguration, etcdUpgrade, renewCerts bool, patchesDir string) error

PerformStaticPodUpgrade performs the upgrade of the control plane components for a static pod hosted cluster

func RemoveOldControlPlaneLabel added in v1.24.0

func RemoveOldControlPlaneLabel(client clientset.Interface) error

RemoveOldControlPlaneLabel finds all nodes with the legacy node-role label and removes it TODO: https://github.com/kubernetes/kubeadm/issues/2200

func RunCoreDNSMigrationCheck added in v1.16.0

func RunCoreDNSMigrationCheck(client clientset.Interface, ignorePreflightErrors sets.String) error

RunCoreDNSMigrationCheck initializes checks related to CoreDNS migration.

func StaticPodControlPlane

func StaticPodControlPlane(client clientset.Interface, waiter apiclient.Waiter, pathMgr StaticPodPathManager, cfg *kubeadmapi.InitConfiguration, etcdUpgrade, renewCerts bool, oldEtcdClient, newEtcdClient etcdutil.ClusterInterrogator) error

StaticPodControlPlane upgrades a static pod-hosted control plane

func UpdateKubeletDynamicEnvFileWithURLScheme added in v1.24.0

func UpdateKubeletDynamicEnvFileWithURLScheme(dryRun bool) error

UpdateKubeletDynamicEnvFileWithURLScheme reads the kubelet dynamic environment file from disk, ensure that the CRI endpoint flag has a scheme prefix and writes it back to disk. TODO: Temporary workaround. Remove in 1.25: https://github.com/kubernetes/kubeadm/issues/2426

Types

type ClusterState

type ClusterState struct {
	// KubeVersion describes the version of the Kubernetes API Server, Controller Manager, Scheduler and Proxy.
	KubeVersion string
	// DNSVersion describes the version of the DNS add-on.
	DNSVersion string
	// KubeadmVersion describes the version of the kubeadm CLI
	KubeadmVersion string
	// KubeletVersions is a map with a version number linked to the amount of kubelets running that version in the cluster
	KubeletVersions map[string]uint16
	// EtcdVersion represents the version of etcd used in the cluster
	EtcdVersion string
}

ClusterState describes the state of certain versions for a cluster

type CoreDNSCheck added in v1.16.0

type CoreDNSCheck struct {
	// contains filtered or unexported fields
}

CoreDNSCheck validates installed kubelet version

func (CoreDNSCheck) Check added in v1.16.0

func (c CoreDNSCheck) Check() (warnings, errors []error)

Check is part of the preflight.Checker interface

func (CoreDNSCheck) Name added in v1.16.0

func (c CoreDNSCheck) Name() string

Name is part of the preflight.Checker interface

type KubeStaticPodPathManager

type KubeStaticPodPathManager struct {
	// contains filtered or unexported fields
}

KubeStaticPodPathManager is a real implementation of StaticPodPathManager that is used when upgrading a static pod cluster

func (*KubeStaticPodPathManager) BackupEtcdDir added in v1.9.0

func (spm *KubeStaticPodPathManager) BackupEtcdDir() string

BackupEtcdDir should point to the backup directory used for backuping manifests during the transition

func (*KubeStaticPodPathManager) BackupManifestDir

func (spm *KubeStaticPodPathManager) BackupManifestDir() string

BackupManifestDir should point to the backup directory used for backuping manifests during the transition

func (*KubeStaticPodPathManager) BackupManifestPath

func (spm *KubeStaticPodPathManager) BackupManifestPath(component string) string

BackupManifestPath gets the file path for the component in the backup directory used for backuping manifests during the transition

func (*KubeStaticPodPathManager) CleanupDirs added in v1.11.0

func (spm *KubeStaticPodPathManager) CleanupDirs() error

CleanupDirs cleans up all temporary directories except those the user has requested to keep around

func (*KubeStaticPodPathManager) KubernetesDir added in v1.15.0

func (spm *KubeStaticPodPathManager) KubernetesDir() string

KubernetesDir should point to the directory Kubernetes owns for storing various configuration files

func (*KubeStaticPodPathManager) MoveFile

func (spm *KubeStaticPodPathManager) MoveFile(oldPath, newPath string) error

MoveFile should move a file from oldPath to newPath

func (*KubeStaticPodPathManager) PatchesDir added in v1.19.0

func (spm *KubeStaticPodPathManager) PatchesDir() string

PatchesDir should point to the folder where patches for components are stored

func (*KubeStaticPodPathManager) RealManifestDir

func (spm *KubeStaticPodPathManager) RealManifestDir() string

RealManifestDir should point to the static pod manifest directory used by the kubelet

func (*KubeStaticPodPathManager) RealManifestPath

func (spm *KubeStaticPodPathManager) RealManifestPath(component string) string

RealManifestPath gets the file path for the component in the "real" static pod manifest directory used by the kubelet

func (*KubeStaticPodPathManager) TempManifestDir

func (spm *KubeStaticPodPathManager) TempManifestDir() string

TempManifestDir should point to the temporary directory created for generating new manifests for the upgrade

func (*KubeStaticPodPathManager) TempManifestPath

func (spm *KubeStaticPodPathManager) TempManifestPath(component string) string

TempManifestPath gets the file path for the component in the temporary directory created for generating new manifests for the upgrade

type KubeVersionGetter

type KubeVersionGetter struct {
	// contains filtered or unexported fields
}

KubeVersionGetter handles the version-fetching mechanism from external sources

func (*KubeVersionGetter) ClusterVersion

func (g *KubeVersionGetter) ClusterVersion() (string, *versionutil.Version, error)

ClusterVersion gets API server version

func (*KubeVersionGetter) KubeadmVersion

func (g *KubeVersionGetter) KubeadmVersion() (string, *versionutil.Version, error)

KubeadmVersion gets kubeadm version

func (*KubeVersionGetter) KubeletVersions

func (g *KubeVersionGetter) KubeletVersions() (map[string]uint16, error)

KubeletVersions gets the versions of the kubelets in the cluster

func (*KubeVersionGetter) VersionFromCILabel

func (g *KubeVersionGetter) VersionFromCILabel(ciVersionLabel, description string) (string, *versionutil.Version, error)

VersionFromCILabel resolves a version label like "latest" or "stable" to an actual version using the public Kubernetes CI uploads

type OfflineVersionGetter added in v1.11.0

type OfflineVersionGetter struct {
	VersionGetter
	// contains filtered or unexported fields
}

OfflineVersionGetter will use the version provided or

func (*OfflineVersionGetter) VersionFromCILabel added in v1.11.0

func (o *OfflineVersionGetter) VersionFromCILabel(ciVersionLabel, description string) (string, *versionutil.Version, error)

VersionFromCILabel will return the version that was passed into the struct

type StaticPodPathManager

type StaticPodPathManager interface {
	// MoveFile should move a file from oldPath to newPath
	MoveFile(oldPath, newPath string) error
	// KubernetesDir is the directory Kubernetes owns for storing various configuration files
	KubernetesDir() string
	// PatchesDir should point to the folder where patches for components are stored
	PatchesDir() string
	// RealManifestPath gets the file path for the component in the "real" static pod manifest directory used by the kubelet
	RealManifestPath(component string) string
	// RealManifestDir should point to the static pod manifest directory used by the kubelet
	RealManifestDir() string
	// TempManifestPath gets the file path for the component in the temporary directory created for generating new manifests for the upgrade
	TempManifestPath(component string) string
	// TempManifestDir should point to the temporary directory created for generating new manifests for the upgrade
	TempManifestDir() string
	// BackupManifestPath gets the file path for the component in the backup directory used for backuping manifests during the transition
	BackupManifestPath(component string) string
	// BackupManifestDir should point to the backup directory used for backuping manifests during the transition
	BackupManifestDir() string
	// BackupEtcdDir should point to the backup directory used for backuping manifests during the transition
	BackupEtcdDir() string
	// CleanupDirs cleans up all temporary directories
	CleanupDirs() error
}

StaticPodPathManager is responsible for tracking the directories used in the static pod upgrade transition

func GetPathManagerForUpgrade added in v1.15.0

func GetPathManagerForUpgrade(kubernetesDir, patchesDir string, internalcfg *kubeadmapi.InitConfiguration, etcdUpgrade bool) (StaticPodPathManager, error)

GetPathManagerForUpgrade returns a path manager properly configured for the given InitConfiguration.

func NewKubeStaticPodPathManager

func NewKubeStaticPodPathManager(kubernetesDir, patchesDir, tempDir, backupDir, backupEtcdDir string, keepManifestDir, keepEtcdDir bool) StaticPodPathManager

NewKubeStaticPodPathManager creates a new instance of KubeStaticPodPathManager

func NewKubeStaticPodPathManagerUsingTempDirs

func NewKubeStaticPodPathManagerUsingTempDirs(kubernetesDir, patchesDir string, saveManifestsDir, saveEtcdDir bool) (StaticPodPathManager, error)

NewKubeStaticPodPathManagerUsingTempDirs creates a new instance of KubeStaticPodPathManager with temporary directories backing it

type Upgrade

type Upgrade struct {
	Description string
	Before      ClusterState
	After       ClusterState
}

Upgrade defines an upgrade possibility to upgrade from a current version to a new one

func GetAvailableUpgrades

func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesAllowed, rcUpgradesAllowed, externalEtcd bool, client clientset.Interface, manifestsDir string) ([]Upgrade, error)

GetAvailableUpgrades fetches all versions from the specified VersionGetter and computes which kinds of upgrades can be performed

func (*Upgrade) CanUpgradeEtcd added in v1.10.3

func (u *Upgrade) CanUpgradeEtcd() bool

CanUpgradeEtcd returns whether an upgrade of etcd is possible

func (*Upgrade) CanUpgradeKubelets

func (u *Upgrade) CanUpgradeKubelets() bool

CanUpgradeKubelets returns whether an upgrade of any kubelet in the cluster is possible

type VersionGetter

type VersionGetter interface {
	// ClusterVersion should return the version of the cluster i.e. the API Server version
	ClusterVersion() (string, *versionutil.Version, error)
	// KubeadmVersion should return the version of the kubeadm CLI
	KubeadmVersion() (string, *versionutil.Version, error)
	// VersionFromCILabel should resolve CI labels like `latest`, `stable`, `stable-1.8`, etc. to real versions
	VersionFromCILabel(string, string) (string, *versionutil.Version, error)
	// KubeletVersions should return a map with a version and a number that describes how many kubelets there are for that version
	KubeletVersions() (map[string]uint16, error)
}

VersionGetter defines an interface for fetching different versions. Easy to implement a fake variant of this interface for unit testing

func NewKubeVersionGetter

func NewKubeVersionGetter(client clientset.Interface) VersionGetter

NewKubeVersionGetter returns a new instance of KubeVersionGetter

func NewOfflineVersionGetter added in v1.11.0

func NewOfflineVersionGetter(versionGetter VersionGetter, version string) VersionGetter

NewOfflineVersionGetter wraps a VersionGetter and skips online communication if default information is supplied. Version can be "" and the behavior will be identical to the versionGetter passed in.

type VersionSkewPolicyErrors

type VersionSkewPolicyErrors struct {
	Mandatory []error
	Skippable []error
}

VersionSkewPolicyErrors describes version skew errors that might be seen during the validation process in EnforceVersionPolicies

func EnforceVersionPolicies

func EnforceVersionPolicies(versionGetter VersionGetter, newK8sVersionStr string, newK8sVersion *version.Version, allowExperimentalUpgrades, allowRCUpgrades bool) *VersionSkewPolicyErrors

EnforceVersionPolicies enforces that the proposed new version is compatible with all the different version skew policies

Jump to

Keyboard shortcuts

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