/terraform-aws-eks-data-addons

Terraform Module: Deploy Data/ML Addons Helm Charts on EKS 🚀

Primary LanguageHCLApache License 2.0Apache-2.0

Terraform Module: 🚀 Data & AI/ML Kubernetes Add-ons ⚙️

This Terraform module contains commonly used Data & AI/ML related Kubernetes add-ons that are typically included in Data on EKS blueprints. The purpose of this module is to provide users with the flexibility to select and customize the add-ons they require while leveraging the Data on EKS blueprints.

⚠️ Important Note

Users can consume this Terraform module in their projects to deploy any of the available addons. We will continue to maintain and update the existing Data/ML add-ons. However, we kindly request that you refrain from submitting Pull Requests (PRs) to add new addons at the moment, unless there is a supported blueprint available in the Data on EKS repository. The Apache and CNCF communities offer numerous open-source Data and ML add-ons, and while we appreciate their value, supporting all of them poses challenges.

Your understanding and cooperation are highly appreciated. 🙏

Usage

Create Addon with the following example using Terraform registry. Checkout the complete example under test folder.

module "eks_data_addons" {
  source = "aws-ia/eks-data-addons/aws"
  version = "~> 1.0" # ensure to update this to the latest/desired version

  oidc_provider_arn = module.eks.oidc_provider_arn

  # Example to deploy AWS Neuron Device Plugin for Trainium and Inferentia instances
  enable_aws_efa_k8s_device_plugin = true

  # Example to deploy EFA K8s Device Plugin for GPU/Neuron instances
  enable_aws_efa_k8s_device_plugin = true

  # Example to deploy NVIDIA GPU Operator
  enable_nvidia_gpu_operator = true

  # Example to deploy Spark Operator Helm Chart
  enable_spark_opertor = true

  # Example to deploy Flink Operator Helm Chart
  enable_flink_operator = true

  # Example to deploy Apache YuniKorn Helm Chart
  enable_yunikorn = true

  # Example that uses ECR authentication for a particular registry ID
  enable_emr_spark_operator = var.enable_emr_spark_operator
  emr_spark_operator_helm_config = {
    repository_username = data.aws_ecr_authorization_token.token.user_name
    repository_password = data.aws_ecr_authorization_token.token.password
  }

  # Example to deploy Helm chart that uses IAM Role for ServiceAccounts. You can disable `create_irsa` and bring your own IAM role.
  enable_spark_history_server = var.enable_emr_spark_operator
  spark_history_server_helm_config = {
    create_irsa = true
    values = [
      templatefile("${path.module}/test/helm-values/spark-history-server-values.yaml", {
        s3_bucket_name   = module.s3_bucket.s3_bucket_id
        s3_bucket_prefix = aws_s3_object.this.key
      })
    ]
  }
}

Requirements

Name Version
terraform >= 1.0.0
aws >= 3.72
helm >= 2.4.1

Providers

Name Version
aws >= 3.72
helm >= 2.4.1

Modules

Name Source Version
spark_history_server_irsa ./irsa n/a

Resources

Name Type
helm_release.airflow resource
helm_release.aws_efa_k8s_device_plugin resource
helm_release.aws_neuron_device_plugin resource
helm_release.cnpg_operator resource
helm_release.dask_operator resource
helm_release.daskhub resource
helm_release.emr_spark_operator resource
helm_release.flink_operator resource
helm_release.jupyterhub resource
helm_release.kubecost resource
helm_release.kuberay_operator resource
helm_release.mlflow_tracking resource
helm_release.nvidia_gpu_operator resource
helm_release.spark_history_server resource
helm_release.spark_operator resource
helm_release.strimzi_kafka_operator resource
helm_release.volcano resource
helm_release.yunikorn resource
aws_partition.current data source
aws_region.current data source

Inputs

Name Description Type Default Required
airflow_helm_config Airflow Helm Chart config any {} no
aws_efa_k8s_device_plugin_helm_config EFA K8s Plugin add-on Helm Chart config any {} no
aws_neuron_device_plugin_helm_config AWS Neuron Device Plugin Helm Chart config any {} no
cnpg_operator_helm_config CloudNative PG Operator Helm Chart config any {} no
dask_operator_helm_config Dask Operator add-on configurations any {} no
daskhub_helm_config DaskHub add-on configurations any {} no
emr_spark_operator_helm_config Helm configuration for Spark Operator with EMR Runtime any {} no
enable_airflow Enable Airflow add-on bool false no
enable_aws_efa_k8s_device_plugin Enable EFA K8s Plugin add-on bool false no
enable_aws_neuron_device_plugin Enable AWS Neuron Device Plugin add-on bool false no
enable_cnpg_operator Enable CloudNative PG Operator add-on bool false no
enable_dask_operator Enable Dask Operator add-on bool false no
enable_daskhub Enable DaskHub bool false no
enable_emr_spark_operator Enable the Spark Operator to submit jobs with EMR Runtime bool false no
enable_flink_operator Enable Flink Operator add-on bool false no
enable_jupyterhub Enable Jupyterhub Add-On bool false no
enable_kubecost Enable Kubecost add-on bool false no
enable_kuberay_operator Enable Kuberay Operator add-on bool false no
enable_mlflow_tracking Enable MLflow Tracking add-on bool false no
enable_nvidia_gpu_operator Enable NVIDIA GPU Operator add-on bool false no
enable_spark_history_server Enable Spark History Server add-on bool false no
enable_spark_operator Enable Spark on K8s Operator add-on bool false no
enable_strimzi_kafka_operator Enable the Strimzi Kafka Operator bool false no
enable_volcano Enable volcano scheduler add-on bool false no
enable_yunikorn Enable Apache YuniKorn K8s scheduler add-on bool false no
flink_operator_helm_config Flink Operator Helm Chart config any {} no
jupyterhub_helm_config Helm configuration for JupyterHub any {} no
kubecost_helm_config Kubecost Helm Chart config any {} no
kuberay_operator_helm_config Helm configuration for Kuberay Operator any {} no
mlflow_tracking_helm_config MLflow Tracking add-on Helm Chart config any {} no
nvidia_gpu_operator_helm_config Helm configuration for NVIDIA GPU Operator any {} no
oidc_provider_arn The ARN of the cluster OIDC Provider string n/a yes
spark_history_server_helm_config Helm configuration for Spark History Server any {} no
spark_operator_helm_config Helm configuration for Spark K8s Operator any {} no
strimzi_kafka_operator_helm_config Helm configuration for Strimzi Kafka Operator any {} no
volcano_helm_config Volcano scheduler add-on configurations any {} no
yunikorn_helm_config Helm configuration for Apache YuniKorn any {} no

Outputs

Name Description
airflow Airflow Helm Chart metadata
aws_efa_k8s_device_plugin AWS EFA K8s Plugin Helm Chart metadata
aws_neuron_device_plugin AWS Neuron Device Plugin Helm Chart metadata
dask_hub Dask Hub Helm Chart metadata
dask_operator Dask Operator Helm Chart metadata
emr_spark_operator EMR Spark Operator Helm Chart metadata
flink_operator Flink Operator Helm Chart metadata
jupyterhub Jupyterhub Helm Chart metadata
kubecost Kubecost Helm Chart metadata
kuberay_operator Kuberay Operator Helm Chart metadata
nvidia_gpu_operator Nvidia GPU Operator Helm Chart metadata
spark_history_server Spark History Server Helm Chart metadata
spark_operator Spark Operator Helm Chart metadata
strimzi_kafka_operator Strimzi Kafka Operator Helm Chart metadata
volcano Volcano Batch Scheduler Helm Chart metadata
yunikorn Yunikorn Helm Chart metadata