eks

package
v0.0.0-...-ee2d30e Latest Latest
Warning

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

Go to latest
Published: Feb 15, 2023 License: Apache-2.0 Imports: 95 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckInstanceAvailability

func CheckInstanceAvailability(ctx context.Context, spec *api.ClusterConfig, ec2API awsapi.EC2) error

CheckInstanceAvailability verifies that if any instances are provided in any node groups that those instances are available in the selected AZs.

func DoAllNodegroupStackTasks

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

DoAllNodegroupStackTasks iterates over nodegroup tasks and returns any errors.

func DoCreateFargateProfiles

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

DoCreateFargateProfiles creates fargate profiles as specified in the config

func DoesAWSNodeUseIRSA

func DoesAWSNodeUseIRSA(ctx context.Context, provider api.ClusterProvider, clientSet kubernetes.Interface) (bool, error)

DoesAWSNodeUseIRSA evaluates whether an aws-node uses IRSA

func GetUsername

func GetUsername(roleArn string) string

GetUsername extracts the username part from the IAM role ARN

func LoadConfigFromFile

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

LoadConfigFromFile loads ClusterConfig from configFile

func LogEnabledFeatures

func LogEnabledFeatures(clusterConfig *api.ClusterConfig)

LogEnabledFeatures logs enabled features

func LogWindowsCompatibility

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

LogWindowsCompatibility logs Windows compatibility messages

func ParseConfig

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(ctx context.Context, 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 SetAvailabilityZones

func SetAvailabilityZones(ctx context.Context, spec *api.ClusterConfig, given []string, ec2API awsapi.EC2, region string) (bool, error)

SetAvailabilityZones sets the given (or chooses) the availability zones Returns whether azs were set randomly or provided by a user. CheckInstanceAvailability is only run if azs were provided by the user. Random selection already performs this check and makes sure AZs support all given instances.

func SupportsWindowsWorkloads

func SupportsWindowsWorkloads(nodeGroups []KubeNodeGroup) bool

SupportsWindowsWorkloads reports whether nodeGroups can support running Windows workloads

func UpdateAuthConfigMap

func UpdateAuthConfigMap(ctx context.Context, nodeGroups []*api.NodeGroup, clientSet kubernetes.Interface) error

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

func ValidateExistingNodeGroupsForCompatibility

func ValidateExistingNodeGroupsForCompatibility(ctx context.Context, 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 ValidateLocalZones

func ValidateLocalZones(ctx context.Context, ec2API awsapi.EC2, localZones []string, region string) error

ValidateLocalZones validates that the specified local zones exist.

func WaitForNodes

func WaitForNodes(ctx context.Context, clientSet kubernetes.Interface, ng KubeNodeGroup) error

WaitForNodes waits till the nodes are ready

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 *ekstypes.Cluster
}

ClusterInfo provides information about the cluster.

type ClusterProvider

type ClusterProvider struct {
	// KubeProvider offers helper methods to handle Kubernetes operations
	KubeProvider

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

ClusterProvider stores information about the cluster

func New

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

New creates a new setup of the used AWS APIs

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) CanOperateWithRefresh

func (c *ClusterProvider) CanOperateWithRefresh(ctx context.Context, spec *api.ClusterConfig) (bool, error)

CanOperateWithRefresh 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

func (c *ClusterProvider) ControlPlaneVPCInfo() ekstypes.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(ctx context.Context, cfg *api.ClusterConfig) *tasks.TaskTree

CreateExtraClusterConfigTasks returns all tasks for updating cluster configuration

func (*ClusterProvider) DescribeControlPlane

func (c *ClusterProvider) DescribeControlPlane(ctx context.Context, meta *api.ClusterMeta) (*ekstypes.Cluster, error)

DescribeControlPlane describes the cluster control plane

func (*ClusterProvider) EnableKMSEncryption

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(ctx context.Context, clusterName string) (*ekstypes.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(ctx context.Context, 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(ctx context.Context, spec *api.ClusterConfig) (*ClusterVPCConfig, error)

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

func (*ClusterProvider) GetNodeGroupIAM

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

GetNodeGroupIAM retrieves the IAM configuration of the given nodegroup

func (*ClusterProvider) IsSupportedRegion

func (c *ClusterProvider) IsSupportedRegion() bool

IsSupportedRegion check if given region is supported

func (*ClusterProvider) LoadClusterIntoSpecFromStack

func (c *ClusterProvider) LoadClusterIntoSpecFromStack(ctx context.Context, spec *api.ClusterConfig, stack *manager.Stack) 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(ctx context.Context, spec *api.ClusterConfig, stack *manager.Stack) error

LoadClusterVPC loads the VPC configuration.

func (*ClusterProvider) NewOpenIDConnectManager

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

NewOpenIDConnectManager returns OpenIDConnectManager

func (*ClusterProvider) NewStackManager

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

NewStackManager returns a new stack manager

func (*ClusterProvider) RefreshClusterStatus

func (c *ClusterProvider) RefreshClusterStatus(ctx context.Context, 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. It also updates ClusterConfig to reflect the current cluster state.

func (*ClusterProvider) RefreshClusterStatusIfStale

func (c *ClusterProvider) RefreshClusterStatusIfStale(ctx context.Context, spec *api.ClusterConfig) error

RefreshClusterStatusIfStale refreshes the cluster status if enough time has passed since the last refresh

func (*ClusterProvider) UpdateClusterConfigForEndpoints

func (c *ClusterProvider) UpdateClusterConfigForEndpoints(ctx context.Context, cfg *api.ClusterConfig) error

UpdateClusterConfigForEndpoints calls eks.UpdateClusterConfig and updates access to API endpoints

func (*ClusterProvider) UpdateClusterConfigForLogging

func (c *ClusterProvider) UpdateClusterConfigForLogging(ctx context.Context, cfg *api.ClusterConfig) error

UpdateClusterConfigForLogging calls UpdateClusterConfig to enable logging

func (*ClusterProvider) UpdateClusterVersion

func (c *ClusterProvider) UpdateClusterVersion(ctx context.Context, cfg *api.ClusterConfig) (*ekstypes.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(ctx context.Context, cfg *api.ClusterConfig) error

UpdateClusterVersionBlocking calls UpdateClusterVersion and blocks until update operation is successful

func (*ClusterProvider) UpdatePublicAccessCIDRs

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

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

func (*ClusterProvider) ValidateClusterForCompatibility

func (c *ClusterProvider) ValidateClusterForCompatibility(ctx context.Context, 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

type ClusterVPCConfig

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

ClusterVPCConfig represents a cluster's VPC configuration

type FargateClient

type FargateClient interface {
	CreateProfile(ctx context.Context, profile *api.FargateProfile, waitForCreation bool) error
	ListProfiles(ctx context.Context) ([]string, error)
}

type InstanceSelector

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

type KubeProvider interface {
	NewRawClient(clusterInfo kubeconfig.ClusterInfo) (*kubernetes.RawClient, error)
	NewStdClientSet(clusterInfo kubeconfig.ClusterInfo) (k8sclient.Interface, error)
	ServerVersion(rawClient *kubernetes.RawClient) (string, error)
	WaitForControlPlane(meta *api.ClusterMeta, clientSet *kubernetes.RawClient, waitTimeout time.Duration) error
}

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

type KubernetesProvider

type KubernetesProvider struct {
	WaitTimeout time.Duration
	RoleARN     string
	Signer      api.STSPresigner
}

KubernetesProvider provides helper methods to handle Kubernetes operations.

func (*KubernetesProvider) NewClient

func (c *KubernetesProvider) NewClient(clusterInfo kubeconfig.ClusterInfo) (*Client, error)

NewClient creates a new client config.

func (*KubernetesProvider) NewRawClient

func (c *KubernetesProvider) NewRawClient(clusterInfo kubeconfig.ClusterInfo) (*kubewrapper.RawClient, error)

NewRawClient creates a new raw REST client.

func (*KubernetesProvider) NewStdClientSet

func (c *KubernetesProvider) NewStdClientSet(clusterInfo kubeconfig.ClusterInfo) (kubernetes.Interface, error)

NewStdClientSet creates a new API client.

func (*KubernetesProvider) ServerVersion

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

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

func (*KubernetesProvider) WaitForControlPlane

func (c *KubernetesProvider) WaitForControlPlane(meta *api.ClusterMeta, clientSet *kubewrapper.RawClient, waitTimeout time.Duration) error

WaitForControlPlane waits till the control plane is ready

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

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

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

type NodeGroupService

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

A NodeGroupService provides helpers for nodegroup creation.

func NewNodeGroupService

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

NewNodeGroupService creates a new NodeGroupService.

func (*NodeGroupService) ExpandInstanceSelectorOptions

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

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

func (*NodeGroupService) Normalize

func (n *NodeGroupService) Normalize(ctx context.Context, nodePools []api.NodePool, clusterConfig *api.ClusterConfig) error

Normalize normalizes nodegroups.

type ProviderServices

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

ProviderServices stores the used APIs

func (ProviderServices) ASG

func (p ProviderServices) ASG() awsapi.ASG

ASG returns a representation of the AutoScaling 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

func (p ProviderServices) CloudTrail() awsapi.CloudTrail

CloudTrail returns a representation of the CloudTrail API

func (ProviderServices) CloudWatchLogs

func (p ProviderServices) CloudWatchLogs() awsapi.CloudWatchLogs

CloudWatchLogs returns a representation of the CloudWatchLogs API.

func (ProviderServices) ConfigProvider

func (p ProviderServices) ConfigProvider() client.ConfigProvider

func (ProviderServices) Profile

func (p ProviderServices) Profile() api.Profile

Profile returns the provider-level AWS profile.

func (ProviderServices) Region

func (p ProviderServices) Region() string

Region returns provider-level region setting

func (ProviderServices) Session

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 {
	IAMRoleARN   string
	ClusterInfo  *ClusterInfo
	SessionCreds SessionProvider
}

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

type RetryerV2

type RetryerV2 struct {
	aws.Retryer
}

RetryerV2 implements aws.Retryer

func NewRetryerV2

func NewRetryerV2() *RetryerV2

NewRetryerV2 returns a new *RetryerV2

func (*RetryerV2) IsErrorRetryable

func (r *RetryerV2) IsErrorRetryable(err error) bool

IsErrorRetryable implements aws.Retryer

type ServicesV2

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

ServicesV2 implements api.ServicesV2. The SDK clients are initialized lazily and guarded by a mutex.

func (*ServicesV2) CloudFormation

func (s *ServicesV2) CloudFormation() awsapi.CloudFormation

CloudFormation implements the AWS CloudFormation service.

func (*ServicesV2) EC2

func (s *ServicesV2) EC2() awsapi.EC2

EC2 implements the AWS EC2 service.

func (*ServicesV2) EKS

func (s *ServicesV2) EKS() awsapi.EKS

EKS returns the AWS EKS service.

func (*ServicesV2) ELB

func (s *ServicesV2) ELB() awsapi.ELB

ELB implements the AWS ELB service.

func (*ServicesV2) ELBV2

func (s *ServicesV2) ELBV2() awsapi.ELBV2

ELBV2 implements the ELBV2 service.

func (*ServicesV2) IAM

func (s *ServicesV2) IAM() awsapi.IAM

IAM implements the AWS IAM service.

func (*ServicesV2) Outposts

func (s *ServicesV2) Outposts() awsapi.Outposts

Outposts returns the AWS Outposts service.

func (*ServicesV2) SSM

func (s *ServicesV2) SSM() awsapi.SSM

SSM implements the AWS SSM service.

func (*ServicesV2) STS

func (s *ServicesV2) STS() awsapi.STS

STS implements the AWS STS service.

func (*ServicesV2) STSPresigner

func (s *ServicesV2) STSPresigner() api.STSPresigner

STSPresigner provides a signed STS client for calls to Kubernetes.

type SessionProvider

type SessionProvider interface {
	Get() (credentials.Value, error)
}

SessionProvider abstracts an aws credentials.Value provider.

type VPCControllerTask

type VPCControllerTask struct {
	Context         context.Context
	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

type WindowsIPAMTask

type WindowsIPAMTask struct {
	Info          string
	ClientsetFunc func() (kubernetes.Interface, error)
}

WindowsIPAMTask is a task for enabling Windows IPAM.

func (*WindowsIPAMTask) Describe

func (w *WindowsIPAMTask) Describe() string

Describe implements Task.

func (*WindowsIPAMTask) Do

func (w *WindowsIPAMTask) 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