api/v1alpha1/nodeconfig_types.go (77 lines of code) (raw):

package v1alpha1 import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" ) func init() { SchemeBuilder.Register(&NodeConfig{}, &NodeConfigList{}) } // +kubebuilder:object:root=true // +kubebuilder:resource:scope=Cluster // +kubebuilder:storageversion // NodeConfig is the primary configuration object for `nodeadm`. type NodeConfig struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec NodeConfigSpec `json:"spec,omitempty"` } // +kubebuilder:object:root=true type NodeConfigList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []NodeConfig `json:"items"` } type NodeConfigSpec struct { Cluster ClusterDetails `json:"cluster,omitempty"` Containerd ContainerdOptions `json:"containerd,omitempty"` Instance InstanceOptions `json:"instance,omitempty"` Kubelet KubeletOptions `json:"kubelet,omitempty"` Hybrid *HybridOptions `json:"hybrid,omitempty"` } // ClusterDetails contains the coordinates of your EKS cluster. // These details can be found using the [DescribeCluster API](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html). type ClusterDetails struct { // Name is the name of your EKS cluster Name string `json:"name,omitempty"` // Region is an AWS region (e.g. us-east-1) used to retrieve regional artifacts // as well as region where EKS cluster lives. Region string `json:"region,omitempty"` // APIServerEndpoint is the URL of your EKS cluster's kube-apiserver. APIServerEndpoint string `json:"apiServerEndpoint,omitempty"` // CertificateAuthority is a base64-encoded string of your cluster's certificate authority chain. CertificateAuthority []byte `json:"certificateAuthority,omitempty"` // CIDR is your cluster's Pod IP CIDR. This value is used to infer your cluster's DNS address. CIDR string `json:"cidr,omitempty"` // EnableOutpost determines how your node is configured when running on an AWS Outpost. EnableOutpost *bool `json:"enableOutpost,omitempty"` // ID is an identifier for your cluster; this is only used when your node is running on an AWS Outpost. ID string `json:"id,omitempty"` } // KubeletOptions are additional parameters passed to `kubelet`. type KubeletOptions struct { // Config is a [`KubeletConfiguration`](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/) // that will be merged with the defaults. Config map[string]runtime.RawExtension `json:"config,omitempty"` // Flags are [command-line `kubelet`` arguments](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/). // that will be appended to the defaults. Flags []string `json:"flags,omitempty"` } // ContainerdOptions are additional parameters passed to `containerd`. type ContainerdOptions struct { // Config is inline [`containerd` configuration TOML](https://github.com/containerd/containerd/blob/main/docs/man/containerd-config.toml.5.md) // that will be [imported](https://github.com/containerd/containerd/blob/32169d591dbc6133ef7411329b29d0c0433f8c4d/docs/man/containerd-config.toml.5.md?plain=1#L146-L154) // by the default configuration file. Config string `json:"config,omitempty"` } // InstanceOptions determines how the node's operating system and devices are configured. type InstanceOptions struct { LocalStorage LocalStorageOptions `json:"localStorage,omitempty"` } // LocalStorageOptions control how [EC2 instance stores](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) // are used when available. type LocalStorageOptions struct { Strategy LocalStorageStrategy `json:"strategy,omitempty"` } // LocalStorageStrategy specifies how to handle an instance's local storage devices. // +kubebuilder:validation:Enum={RAID0, Mount} type LocalStorageStrategy string const ( // LocalStorageRAID0 will create a single raid0 volume from any local disks LocalStorageRAID0 LocalStorageStrategy = "RAID0" // LocalStorageMount will mount each local disk individually LocalStorageMount LocalStorageStrategy = "Mount" ) // HybridOptions defines the options specific to hybrid node enrollment. type HybridOptions struct { // EnableCredentialsFile enables a shared credentials file on the host at /eks-hybrid/.aws/credentials // For SSM, this means that nodeadm will create a symlink from `/root/.aws/credentials` to `/eks-hybrid/.aws/credentials`. // For IAM Roles Anywhere, this means that nodeadm will set up a systemd service to write and refresh the credentials to `/eks-hybrid/.aws/credentials`. EnableCredentialsFile bool `json:"enableCredentialsFile,omitempty"` // IAMRolesAnywhere includes IAM Roles Anywhere specific configuration and is mutually exclusive // with SSM. IAMRolesAnywhere *IAMRolesAnywhere `json:"iamRolesAnywhere,omitempty"` // SSM includes Systems Manager specific configuration and is mutually exclusive with // IAMRolesAnywhere. SSM *SSM `json:"ssm,omitempty"` } // IsHybridNode returns true when the nc.Hybrid configuration is non-nil. func (nc NodeConfig) IsHybridNode() bool { return nc.Spec.Hybrid != nil } // IsOutpostNode returns true when Output configuration is non-nil. func (nc NodeConfig) IsOutpostNode() bool { enabled := nc.Spec.Cluster.EnableOutpost return enabled != nil && *enabled } // IAMRolesAnywhere defines IAM Roles Anywhere specific configuration. type IAMRolesAnywhere struct { // NodeName is the name the node will adopt. NodeName string `json:"nodeName,omitempty"` // TrustAnchorARN is the ARN of the trust anchor. TrustAnchorARN string `json:"trustAnchorArn,omitempty"` // ProfileARN is the ARN of the profile linked with the Hybrid IAM Role. ProfileARN string `json:"profileArn,omitempty"` // RoleARN is the role to IAM roles anywhere gets authorized as to get temporary credentials. RoleARN string `json:"roleArn,omitempty"` // AwsConfigPath is the path where the Aws config is stored for hybrid nodes. // This field is only used to init phase // +optional AwsConfigPath string `json:"awsConfigPath,omitempty"` // CertificatePath is the location on disk for the certificate used to authenticate with AWS. // +optional CertificatePath string `json:"certificatePath,omitempty"` // PrivateKeyPath is the location on disk for the certificate's private key. // +optional PrivateKeyPath string `json:"privateKeyPath,omitempty"` } // SSM defines Systems Manager specific configuration. // ActivationCode and ActivationID are generated on the aws console or cli during hybrid activations. // During activation an IAM role is chosen for the SSM agent to assume. This is not overridable from the agent. type SSM struct { // ActivationCode is the token generated when creating an SSM activation. ActivationCode string `json:"activationCode,omitempty"` // ActivationToken is the ID generated when creating an SSM activation. ActivationID string `json:"activationId,omitempty"` }