eks

package
v0.64.0 Latest Latest
Warning

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

Go to latest
Published: Sep 3, 2021 License: Apache-2.0 Imports: 83 Imported by: 36

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ClusterSupportsFargate

func ClusterSupportsFargate(cluster *awseks.Cluster) (bool, error)

ClusterSupportsFargate reports whether an existing cluster supports Fargate.

func ClusterSupportsManagedNodes

func ClusterSupportsManagedNodes(cluster *awseks.Cluster) (bool, error)

ClusterSupportsManagedNodes reports whether the EKS cluster supports managed nodes

func DoCreateFargateProfiles

func DoCreateFargateProfiles(config *api.ClusterConfig, fargateClient FargateClient) error

DoCreateFargateProfiles creates fargate profiles as specified in the config

func LoadConfigFromFile

func LoadConfigFromFile(configFile string) (*api.ClusterConfig, error)

LoadConfigFromFile loads ClusterConfig from configFile

func LogWindowsCompatibility

func LogWindowsCompatibility(nodeGroups []KubeNodeGroup, clusterMeta *api.ClusterMeta)

LogWindowsCompatibility logs Windows compatibility messages

func ParseConfig added in v0.44.0

func ParseConfig(data []byte) (*api.ClusterConfig, error)

ParseConfig parses data into a ClusterConfig

func PlatformVersion

func PlatformVersion(platformVersion string) (int, error)

PlatformVersion extracts the digit X in the provided platform version eks.X

func ResolveAMI

func ResolveAMI(provider api.ClusterProvider, version string, np api.NodePool) error

ResolveAMI ensures that the node AMI is set and is available

func ScheduleCoreDNSOnFargateIfRelevant

func ScheduleCoreDNSOnFargateIfRelevant(config *api.ClusterConfig, ctl *ClusterProvider, clientSet kubernetes.Interface) error

func SelectInstanceType added in v0.56.0

func SelectInstanceType(np api.NodePool) string

SelectInstanceType determines which instanceType is relevant for selecting an AMI If the nodegroup has mixed instances it will prefer a GPU instance type over a general class one This is to make sure that the AMI that is selected later is valid for all the types

func SupportsWindowsWorkloads

func SupportsWindowsWorkloads(nodeGroups []KubeNodeGroup) bool

SupportsWindowsWorkloads reports whether nodeGroups can support running Windows workloads

func ValidateBottlerocketSupport

func ValidateBottlerocketSupport(controlPlaneVersion string, kubeNodeGroups []KubeNodeGroup) error

ValidateBottlerocketSupport validates support for Bottlerocket nodegroups

func ValidateFeatureCompatibility

func ValidateFeatureCompatibility(clusterConfig *api.ClusterConfig, kubeNodeGroups []KubeNodeGroup) error

ValidateFeatureCompatibility validates whether the cluster version supports the features specified in the ClusterConfig. Support for Managed Nodegroups or Windows requires the EKS cluster version to be 1.14 and above. Bottlerocket nodegroups are only supported on EKS version 1.15 and above If the version requirement isn't met, an error is returned

func ValidateKMSSupport added in v0.39.0

func ValidateKMSSupport(clusterConfig *api.ClusterConfig, eksVersion string) error

ValidateKMSSupport validates support for KMS encryption

func ValidateManagedNodesSupport

func ValidateManagedNodesSupport(clusterConfig *api.ClusterConfig) error

ValidateManagedNodesSupport validates support for Managed Nodegroups

func ValidateWindowsCompatibility

func ValidateWindowsCompatibility(kubeNodeGroups []KubeNodeGroup, controlPlaneVersion string) error

ValidateWindowsCompatibility validates Windows compatibility

func VersionSupportsManagedNodes

func VersionSupportsManagedNodes(controlPlaneVersion string) (bool, error)

VersionSupportsManagedNodes reports whether the control plane version can support Managed Nodes

Types

type Client

type Client struct {
	Config *clientcmdapi.Config
	// contains filtered or unexported fields
}

Client stores information about the client config

func (*Client) NewClientSet

func (c *Client) NewClientSet() (*kubernetes.Clientset, error)

NewClientSet creates a new API client

type ClusterInfo

type ClusterInfo struct {
	Cluster *awseks.Cluster
	// contains filtered or unexported fields
}

type ClusterProvider

type ClusterProvider struct {
	// core fields used for config and AWS APIs
	Provider api.ClusterProvider
	// informative fields, i.e. used as outputs
	Status *ProviderStatus
}

ClusterProvider stores information about the cluster

func New

func New(spec *api.ProviderConfig, clusterSpec *api.ClusterConfig) (*ClusterProvider, error)

New creates a new setup of the used AWS APIs

func (*ClusterProvider) CanDelete

func (c *ClusterProvider) CanDelete(spec *api.ClusterConfig) (bool, error)

CanDelete return true when a cluster can be deleted, otherwise it returns false along with an error explaining the reason

func (*ClusterProvider) CanOperate

func (c *ClusterProvider) CanOperate(spec *api.ClusterConfig) (bool, error)

CanOperate returns true when a cluster can be operated, otherwise it returns false along with an error explaining the reason

func (*ClusterProvider) CanUpdate

func (c *ClusterProvider) CanUpdate(spec *api.ClusterConfig) (bool, error)

CanUpdate return true when a cluster or add-ons can be updated, otherwise it returns false along with an error explaining the reason

func (*ClusterProvider) ClusterTasksForNodeGroups

func (c *ClusterProvider) ClusterTasksForNodeGroups(cfg *api.ClusterConfig, installNeuronDevicePluginParam, installNvidiaDevicePluginParam bool) *tasks.TaskTree

ClusterTasksForNodeGroups returns all tasks dependent on node groups

func (*ClusterProvider) ControlPlaneVPCInfo added in v0.40.0

func (c *ClusterProvider) ControlPlaneVPCInfo() awseks.VpcConfigResponse

ControlPlaneVPCInfo returns cached version (EKS API)

func (*ClusterProvider) ControlPlaneVersion

func (c *ClusterProvider) ControlPlaneVersion() string

ControlPlaneVersion returns cached version (EKS API)

func (*ClusterProvider) CreateExtraClusterConfigTasks

func (c *ClusterProvider) CreateExtraClusterConfigTasks(cfg *api.ClusterConfig, installVPCController bool) *tasks.TaskTree

CreateExtraClusterConfigTasks returns all tasks for updating cluster configuration not depending on the control plane availability

func (*ClusterProvider) DescribeControlPlane

func (c *ClusterProvider) DescribeControlPlane(meta *api.ClusterMeta) (*awseks.Cluster, error)

DescribeControlPlane describes the cluster control plane

func (*ClusterProvider) EnableKMSEncryption added in v0.39.0

func (c *ClusterProvider) EnableKMSEncryption(ctx context.Context, clusterConfig *api.ClusterConfig) error

EnableKMSEncryption enables KMS encryption for the specified cluster

func (*ClusterProvider) GetCluster

func (c *ClusterProvider) GetCluster(clusterName string) (*awseks.Cluster, error)

GetCluster display details of an EKS cluster in your account

func (*ClusterProvider) GetCredentialsEnv

func (c *ClusterProvider) GetCredentialsEnv() ([]string, error)

GetCredentialsEnv returns the AWS credentials for env usage

func (*ClusterProvider) GetCurrentClusterConfigForLogging

func (c *ClusterProvider) GetCurrentClusterConfigForLogging(spec *api.ClusterConfig) (sets.String, sets.String, error)

GetCurrentClusterConfigForLogging fetches current cluster logging configuration as two sets - enabled and disabled types

func (*ClusterProvider) GetCurrentClusterVPCConfig

func (c *ClusterProvider) GetCurrentClusterVPCConfig(spec *api.ClusterConfig) (*ClusterVPCConfig, error)

GetCurrentClusterVPCConfig fetches current cluster endpoint configuration for public and private access types

func (*ClusterProvider) GetNodeGroupIAM

func (c *ClusterProvider) GetNodeGroupIAM(stackManager manager.StackManager, ng *api.NodeGroup) error

GetNodeGroupIAM retrieves the IAM configuration of the given nodegroup

func (*ClusterProvider) GetUsername

func (c *ClusterProvider) GetUsername() string

GetUsername extracts the username part from the IAM role ARN

func (*ClusterProvider) IsSupportedRegion

func (c *ClusterProvider) IsSupportedRegion() bool

IsSupportedRegion check if given region is supported

func (*ClusterProvider) ListClusters

func (c *ClusterProvider) ListClusters(chunkSize int, listAllRegions bool) ([]*api.ClusterConfig, error)

ListClusters returns a list of the EKS cluster in your account

func (*ClusterProvider) LoadClusterIntoSpecFromStack added in v0.40.0

func (c *ClusterProvider) LoadClusterIntoSpecFromStack(spec *api.ClusterConfig, stackManager manager.StackManager) error

LoadClusterIntoSpecFromStack uses stack information to load the cluster configuration into the spec At the moment VPC and KubernetesNetworkConfig are respected

func (*ClusterProvider) LoadClusterVPC

func (c *ClusterProvider) LoadClusterVPC(spec *api.ClusterConfig, stackManager manager.StackManager) error

LoadClusterVPC loads the VPC configuration

func (*ClusterProvider) NewClient

func (c *ClusterProvider) NewClient(spec *api.ClusterConfig) (*Client, error)

NewClient creates a new client config by embedding the STS token

func (*ClusterProvider) NewOpenIDConnectManager

func (c *ClusterProvider) NewOpenIDConnectManager(spec *api.ClusterConfig) (*iamoidc.OpenIDConnectManager, error)

NewOpenIDConnectManager returns OpenIDConnectManager

func (*ClusterProvider) NewRawClient

func (c *ClusterProvider) NewRawClient(spec *api.ClusterConfig) (*kubewrapper.RawClient, error)

NewRawClient creates a new raw REST client in one go with an embedded STS token

func (*ClusterProvider) NewStackManager

func (c *ClusterProvider) NewStackManager(spec *api.ClusterConfig) manager.StackManager

NewStackManager returns a new stack manager

func (*ClusterProvider) NewStdClientSet

func (c *ClusterProvider) NewStdClientSet(spec *api.ClusterConfig) (*kubernetes.Clientset, error)

NewStdClientSet creates a new API client in one go with an embedded STS token, this is most commonly used option

func (*ClusterProvider) RefreshClusterStatus

func (c *ClusterProvider) RefreshClusterStatus(spec *api.ClusterConfig) error

RefreshClusterStatus calls c.DescribeControlPlane and caches the results; it parses the credentials (endpoint, CA certificate) and stores them in ClusterConfig.Status, so that a Kubernetes client can be constructed; additionally it caches Kubernetes version (use ctl.ControlPlaneVersion to retrieve it) and other properties in c.Status.cachedClusterInfo

func (*ClusterProvider) ServerVersion added in v0.53.0

func (c *ClusterProvider) ServerVersion(rawClient *kubewrapper.RawClient) (string, error)

ServerVersion will use discovery API to fetch version of Kubernetes control plane

func (*ClusterProvider) SetAvailabilityZones

func (c *ClusterProvider) SetAvailabilityZones(spec *api.ClusterConfig, given []string) error

SetAvailabilityZones sets the given (or chooses) the availability zones

func (*ClusterProvider) SupportsFargate

func (c *ClusterProvider) SupportsFargate(clusterConfig *api.ClusterConfig) (bool, error)

SupportsFargate reports whether an existing cluster supports Fargate.

func (*ClusterProvider) SupportsManagedNodes

func (c *ClusterProvider) SupportsManagedNodes(clusterConfig *api.ClusterConfig) (bool, error)

SupportsManagedNodes reports whether an existing cluster supports Managed Nodes The minimum required control plane version and platform version are 1.14 and eks.3 respectively

func (*ClusterProvider) UpdateAuthConfigMap added in v0.53.0

func (c *ClusterProvider) UpdateAuthConfigMap(nodeGroups []*api.NodeGroup, clientSet kubernetes.Interface) error

UpdateAuthConfigMap creates or adds a nodegroup IAM role in the auth ConfigMap for the given nodegroup.

func (*ClusterProvider) UpdateClusterConfigForEndpoints

func (c *ClusterProvider) UpdateClusterConfigForEndpoints(cfg *api.ClusterConfig) error

UpdateClusterConfigForEndpoints calls eks.UpdateClusterConfig and updates access to API endpoints

func (*ClusterProvider) UpdateClusterConfigForLogging

func (c *ClusterProvider) UpdateClusterConfigForLogging(cfg *api.ClusterConfig) error

UpdateClusterConfigForLogging calls UpdateClusterConfig to enable logging

func (*ClusterProvider) UpdateClusterTags

func (c *ClusterProvider) UpdateClusterTags(cfg *api.ClusterConfig) error

UpdateClusterTags calls eks.TagResource and tags the cluster

func (*ClusterProvider) UpdateClusterVersion

func (c *ClusterProvider) UpdateClusterVersion(cfg *api.ClusterConfig) (*eks.Update, error)

UpdateClusterVersion calls eks.UpdateClusterVersion and updates to cfg.Metadata.Version, it will return update ID along with an error (if it occurs)

func (*ClusterProvider) UpdateClusterVersionBlocking

func (c *ClusterProvider) UpdateClusterVersionBlocking(cfg *api.ClusterConfig) error

UpdateClusterVersionBlocking calls UpdateClusterVersion and blocks until update operation is successful

func (*ClusterProvider) UpdatePublicAccessCIDRs

func (c *ClusterProvider) UpdatePublicAccessCIDRs(clusterConfig *api.ClusterConfig) error

UpdatePublicAccessCIDRs calls eks.UpdateClusterConfig and updates the CIDRs for public access

func (*ClusterProvider) ValidateClusterForCompatibility

func (c *ClusterProvider) ValidateClusterForCompatibility(cfg *api.ClusterConfig, stackManager manager.StackManager) error

ValidateClusterForCompatibility looks at the cluster stack and check if it's compatible with current nodegroup configuration, if it find issues it returns an error

func (*ClusterProvider) WaitForControlPlane

func (c *ClusterProvider) WaitForControlPlane(meta *api.ClusterMeta, clientSet *kubernetes.Clientset) error

WaitForControlPlane waits till the control plane is ready

func (*ClusterProvider) WaitForNodes

func (c *ClusterProvider) WaitForNodes(clientSet kubernetes.Interface, ng KubeNodeGroup) error

WaitForNodes waits till the nodes are ready

type ClusterVPCConfig

type ClusterVPCConfig struct {
	ClusterEndpoints  *api.ClusterEndpoints
	PublicAccessCIDRs []string
}

ClusterVPCConfig represents a cluster's VPC configuration

type FargateClient

type FargateClient interface {
	CreateProfile(profile *api.FargateProfile, waitForCreation bool) error
}

type InstanceSelector added in v0.45.0

type InstanceSelector interface {
	// Filter returns a set of instance types matching the specified instance selector filters
	Filter(selector.Filters) ([]string, error)
}

InstanceSelector selects a set of instance types matching the specified instance selector criteria

type KubeNodeGroup

type KubeNodeGroup interface {
	// NameString returns the name
	NameString() string
	// Size returns the number of the nodes (desired capacity)
	Size() int
	// ListOptions returns the selector for listing nodes in this nodegroup
	ListOptions() metav1.ListOptions
	// GetAMIFamily returns the AMI family
	GetAMIFamily() string
}

KubeNodeGroup defines a set of Kubernetes Nodes

type KubeProvider added in v0.53.0

type KubeProvider interface {
	NewRawClient(spec *api.ClusterConfig) (*kubewrapper.RawClient, error)
	ServerVersion(rawClient *kubernetes.RawClient) (string, error)
	LoadClusterIntoSpecFromStack(spec *api.ClusterConfig, stackManager manager.StackManager) error
	SupportsManagedNodes(clusterConfig *api.ClusterConfig) (bool, error)
	ValidateClusterForCompatibility(cfg *api.ClusterConfig, stackManager manager.StackManager) error
	UpdateAuthConfigMap(nodeGroups []*api.NodeGroup, clientSet kubernetes.Interface) error
	WaitForNodes(clientSet kubernetes.Interface, ng KubeNodeGroup) error
}

KubeProvider is an interface with helper funcs for k8s and EKS that are part of ClusterProvider

type LoggingRetryer

type LoggingRetryer struct {
	client.DefaultRetryer
	// contains filtered or unexported fields
}

LoggingRetryer adds some logging when we are retrying, so we have some idea what is happening Right now it is very basic - e.g. it only logs when we retry (so doesn't log when we fail due to too many retries) It was copied from k8s.io/kops/upup/pkg/fi/cloudup/awsup/logging_retryer.go; the original version used glog, and didn't export the constructor

func (LoggingRetryer) RetryRules

func (l LoggingRetryer) RetryRules(r *request.Request) time.Duration

RetryRules extends on DefaultRetryer.RetryRules

func (LoggingRetryer) ShouldRetry added in v0.39.0

func (l LoggingRetryer) ShouldRetry(r *request.Request) bool

ShouldRetry uses DefaultRetryer.ShouldRetry but also checks for non-retryable EC2MetadataError (see #2564)

type NodeGroupInitialiser added in v0.53.0

type NodeGroupInitialiser interface {
	Normalize(nodePools []api.NodePool, clusterMeta *api.ClusterMeta) error
	ExpandInstanceSelectorOptions(nodePools []api.NodePool, clusterAZs []string) error
	NewAWSSelectorSession(provider api.ClusterProvider)
	ValidateLegacySubnetsForNodeGroups(spec *api.ClusterConfig, provider api.ClusterProvider) error
	DoesAWSNodeUseIRSA(provider api.ClusterProvider, clientSet kubernetes.Interface) (bool, error)
	DoAllNodegroupStackTasks(taskTree *tasks.TaskTree, region, name string) error
	ValidateExistingNodeGroupsForCompatibility(cfg *api.ClusterConfig, stackManager manager.StackManager) error
}

NodeGroupInitialiser is an interface that provides helpers for nodegroup creation.

type NodeGroupService

type NodeGroupService struct {
	Provider api.ClusterProvider
	// contains filtered or unexported fields
}

A NodeGroupService provides helpers for nodegroup creation

func NewNodeGroupService

func NewNodeGroupService(provider api.ClusterProvider, instanceSelector InstanceSelector) *NodeGroupService

NewNodeGroupService creates a new NodeGroupService

func (*NodeGroupService) DoAllNodegroupStackTasks added in v0.53.0

func (m *NodeGroupService) DoAllNodegroupStackTasks(taskTree *tasks.TaskTree, region, name string) error

DoAllNodegroupStackTasks iterates over nodegroup tasks and returns any errors.

func (*NodeGroupService) DoesAWSNodeUseIRSA added in v0.53.0

func (n *NodeGroupService) DoesAWSNodeUseIRSA(provider api.ClusterProvider, clientSet kubernetes.Interface) (bool, error)

DoesAWSNodeUseIRSA evaluates whether an aws-node uses IRSA

func (*NodeGroupService) ExpandInstanceSelectorOptions added in v0.44.0

func (m *NodeGroupService) ExpandInstanceSelectorOptions(nodePools []api.NodePool, clusterAZs []string) error

ExpandInstanceSelectorOptions sets instance types to instances matched by the instance selector criteria

func (*NodeGroupService) NewAWSSelectorSession added in v0.53.0

func (m *NodeGroupService) NewAWSSelectorSession(provider api.ClusterProvider)

NewAWSSelectorSession returns a new instance of Selector provided an aws session

func (*NodeGroupService) Normalize

func (m *NodeGroupService) Normalize(nodePools []api.NodePool, clusterMeta *api.ClusterMeta) error

Normalize normalizes nodegroups

func (*NodeGroupService) ValidateExistingNodeGroupsForCompatibility added in v0.53.0

func (m *NodeGroupService) ValidateExistingNodeGroupsForCompatibility(cfg *api.ClusterConfig, stackManager manager.StackManager) error

ValidateExistingNodeGroupsForCompatibility looks at each of the existing nodegroups and validates configuration, if it find issues it logs messages

func (*NodeGroupService) ValidateLegacySubnetsForNodeGroups added in v0.53.0

func (m *NodeGroupService) ValidateLegacySubnetsForNodeGroups(spec *api.ClusterConfig, provider api.ClusterProvider) error

type ProviderServices

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

ProviderServices stores the used APIs

func (ProviderServices) ASG added in v0.39.0

ASG returns a representation of the AutoScaling API

func (ProviderServices) CloudFormation

CloudFormation returns a representation of the CloudFormation API

func (ProviderServices) CloudFormationDisableRollback

func (p ProviderServices) CloudFormationDisableRollback() bool

CloudFormationDisableRollback returns whether stacks should not rollback on failure

func (ProviderServices) CloudFormationRoleARN

func (p ProviderServices) CloudFormationRoleARN() string

CloudFormationRoleARN returns, if any, a service role used by CloudFormation to call AWS API on your behalf

func (ProviderServices) CloudTrail

CloudTrail returns a representation of the CloudTrail API

func (ProviderServices) ConfigProvider added in v0.39.0

func (p ProviderServices) ConfigProvider() client.ConfigProvider

func (ProviderServices) EC2

EC2 returns a representation of the EC2 API

func (ProviderServices) EKS

EKS returns a representation of the EKS API

func (ProviderServices) ELB

ELB returns a representation of the ELB API

func (ProviderServices) ELBV2

ELBV2 returns a representation of the ELBV2 API

func (ProviderServices) IAM

IAM returns a representation of the IAM API

func (ProviderServices) Profile

func (p ProviderServices) Profile() string

Profile returns provider-level profile name

func (ProviderServices) Region

func (p ProviderServices) Region() string

Region returns provider-level region setting

func (ProviderServices) SSM

SSM returns a representation of the STS API

func (ProviderServices) STS

STS returns a representation of the STS API

func (ProviderServices) Session added in v0.45.0

func (p ProviderServices) Session() *session.Session

func (ProviderServices) WaitTimeout

func (p ProviderServices) WaitTimeout() time.Duration

WaitTimeout returns provider-level duration after which any wait operation has to timeout

type ProviderStatus

type ProviderStatus struct {
	ClusterInfo *ClusterInfo
	// contains filtered or unexported fields
}

ProviderStatus stores information about the used IAM role and the resulting session

type UnsupportedOIDCError

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

UnsupportedOIDCError represents an unsupported OIDC error

func (*UnsupportedOIDCError) Error

func (u *UnsupportedOIDCError) Error() string

type VPCControllerTask

type VPCControllerTask struct {
	Info            string
	ClusterProvider *ClusterProvider
	ClusterConfig   *api.ClusterConfig
	PlanMode        bool
}

VPCControllerTask represents a task to install the VPC controller

func (*VPCControllerTask) Describe

func (v *VPCControllerTask) Describe() string

Describe implements Task

func (*VPCControllerTask) Do

func (v *VPCControllerTask) Do(errCh chan error) error

Do implements Task

Directories

Path Synopsis
Code generated by counterfeiter.
Code generated by counterfeiter.

Jump to

Keyboard shortcuts

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