Home

Awesome

Terraform Module: :rocket: Data & AI/ML Kubernetes Add-ons :gear:

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.

:warning: 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. :pray:

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
      })
    ]
  }
}

Support & Feedback

[!IMPORTANT] EKS Blueprints for Terraform is maintained by AWS Solution Architects. It is not part of an AWS service and support is provided as a best-effort by the EKS Blueprints community. To provide feedback, please use the issues templates provided. If you are interested in contributing to EKS Blueprints, see the Contribution guide.

<!-- BEGIN_TF_DOCS -->

Requirements

NameVersion
<a name="requirement_terraform"></a> terraform>= 1.0.0
<a name="requirement_aws"></a> aws>= 3.72
<a name="requirement_helm"></a> helm>= 2.4.1

Providers

NameVersion
<a name="provider_aws"></a> aws>= 3.72
<a name="provider_helm"></a> helm>= 2.4.1

Modules

NameSourceVersion
<a name="module_spark_history_server_irsa"></a> spark_history_server_irsa./irsan/a

Resources

NameType
helm_release.airflowresource
helm_release.aws_efa_k8s_device_pluginresource
helm_release.aws_neuron_device_pluginresource
helm_release.cnpg_operatorresource
helm_release.dask_operatorresource
helm_release.daskhubresource
helm_release.emr_flink_operatorresource
helm_release.emr_spark_operatorresource
helm_release.flink_operatorresource
helm_release.jupyterhubresource
helm_release.karpenter_resourcesresource
helm_release.kubecostresource
helm_release.kuberay_operatorresource
helm_release.mlflow_trackingresource
helm_release.nvidia_device_pluginresource
helm_release.nvidia_gpu_operatorresource
helm_release.nvidia_triton_serverresource
helm_release.pinotresource
helm_release.qdrantresource
helm_release.spark_history_serverresource
helm_release.spark_operatorresource
helm_release.strimzi_kafka_operatorresource
helm_release.supersetresource
helm_release.trinoresource
helm_release.volcanoresource
helm_release.yunikornresource
aws_partition.currentdata source
aws_region.currentdata source

Inputs

NameDescriptionTypeDefaultRequired
<a name="input_airflow_helm_config"></a> airflow_helm_configAirflow Helm Chart configany{}no
<a name="input_aws_efa_k8s_device_plugin_helm_config"></a> aws_efa_k8s_device_plugin_helm_configEFA K8s Plugin add-on Helm Chart configany{}no
<a name="input_aws_neuron_device_plugin_helm_config"></a> aws_neuron_device_plugin_helm_configAWS Neuron Device Plugin Helm Chart configany{}no
<a name="input_cnpg_operator_helm_config"></a> cnpg_operator_helm_configCloudNative PG Operator Helm Chart configany{}no
<a name="input_dask_operator_helm_config"></a> dask_operator_helm_configDask Operator add-on configurationsany{}no
<a name="input_daskhub_helm_config"></a> daskhub_helm_configDaskHub add-on configurationsany{}no
<a name="input_emr_flink_operator_helm_config"></a> emr_flink_operator_helm_configHelm configuration for Flink Operator with EMR Runtimeany{}no
<a name="input_emr_spark_operator_helm_config"></a> emr_spark_operator_helm_configHelm configuration for Spark Operator with EMR Runtimeany{}no
<a name="input_enable_airflow"></a> enable_airflowEnable Airflow add-onboolfalseno
<a name="input_enable_aws_efa_k8s_device_plugin"></a> enable_aws_efa_k8s_device_pluginEnable EFA K8s Plugin add-onboolfalseno
<a name="input_enable_aws_neuron_device_plugin"></a> enable_aws_neuron_device_pluginEnable AWS Neuron Device Plugin add-onboolfalseno
<a name="input_enable_cnpg_operator"></a> enable_cnpg_operatorEnable CloudNative PG Operator add-onboolfalseno
<a name="input_enable_dask_operator"></a> enable_dask_operatorEnable Dask Operator add-onboolfalseno
<a name="input_enable_daskhub"></a> enable_daskhubEnable DaskHubboolfalseno
<a name="input_enable_emr_flink_operator"></a> enable_emr_flink_operatorEnable the Flink Operator to run Flink application with EMR Runtimeboolfalseno
<a name="input_enable_emr_spark_operator"></a> enable_emr_spark_operatorEnable the Spark Operator to submit jobs with EMR Runtimeboolfalseno
<a name="input_enable_flink_operator"></a> enable_flink_operatorEnable Flink Operator add-onboolfalseno
<a name="input_enable_jupyterhub"></a> enable_jupyterhubEnable Jupyterhub Add-Onboolfalseno
<a name="input_enable_karpenter_resources"></a> enable_karpenter_resourcesEnable Karpenter Resources (NodePool and EC2NodeClass)boolfalseno
<a name="input_enable_kubecost"></a> enable_kubecostEnable Kubecost add-onboolfalseno
<a name="input_enable_kuberay_operator"></a> enable_kuberay_operatorEnable Kuberay Operator add-onboolfalseno
<a name="input_enable_mlflow_tracking"></a> enable_mlflow_trackingEnable MLflow Tracking add-onboolfalseno
<a name="input_enable_nvidia_device_plugin"></a> enable_nvidia_device_pluginEnable NVIDIA Device Plugin add-onboolfalseno
<a name="input_enable_nvidia_gpu_operator"></a> enable_nvidia_gpu_operatorEnable NVIDIA GPU Operator add-onboolfalseno
<a name="input_enable_nvidia_triton_server"></a> enable_nvidia_triton_serverEnable NVIDIA Triton Server add-onboolfalseno
<a name="input_enable_pinot"></a> enable_pinotEnable Apache Pinot Add-Onboolfalseno
<a name="input_enable_qdrant"></a> enable_qdrantEnable Qdrant Vector Database add-onboolfalseno
<a name="input_enable_spark_history_server"></a> enable_spark_history_serverEnable Spark History Server add-onboolfalseno
<a name="input_enable_spark_operator"></a> enable_spark_operatorEnable Spark on K8s Operator add-onboolfalseno
<a name="input_enable_strimzi_kafka_operator"></a> enable_strimzi_kafka_operatorEnable the Strimzi Kafka Operatorboolfalseno
<a name="input_enable_superset"></a> enable_supersetEnable Apache Supeset add-onboolfalseno
<a name="input_enable_trino"></a> enable_trinoEnable Trino add-onboolfalseno
<a name="input_enable_volcano"></a> enable_volcanoEnable volcano scheduler add-onboolfalseno
<a name="input_enable_yunikorn"></a> enable_yunikornEnable Apache YuniKorn K8s scheduler add-onboolfalseno
<a name="input_flink_operator_helm_config"></a> flink_operator_helm_configFlink Operator Helm Chart configany{}no
<a name="input_jupyterhub_helm_config"></a> jupyterhub_helm_configHelm configuration for JupyterHubany{}no
<a name="input_karpenter_resources_helm_config"></a> karpenter_resources_helm_configKarpenter Resources Helm Chart configany{}no
<a name="input_kubecost_helm_config"></a> kubecost_helm_configKubecost Helm Chart configany{}no
<a name="input_kuberay_operator_helm_config"></a> kuberay_operator_helm_configHelm configuration for Kuberay Operatorany{}no
<a name="input_mlflow_tracking_helm_config"></a> mlflow_tracking_helm_configMLflow Tracking add-on Helm Chart configany{}no
<a name="input_nvidia_device_plugin_helm_config"></a> nvidia_device_plugin_helm_configNVIDIA Device Plugin Helm Chart configany{}no
<a name="input_nvidia_gpu_operator_helm_config"></a> nvidia_gpu_operator_helm_configHelm configuration for NVIDIA GPU Operatorany{}no
<a name="input_nvidia_triton_server_helm_config"></a> nvidia_triton_server_helm_configHelm configuration for NVIDIA Triton Serverany{}no
<a name="input_oidc_provider_arn"></a> oidc_provider_arnThe ARN of the cluster OIDC Providerstringn/ayes
<a name="input_pinot_helm_config"></a> pinot_helm_configApache Pinot Helm Chart configany{}no
<a name="input_qdrant_helm_config"></a> qdrant_helm_configHelm configuration for Qdrantany{}no
<a name="input_spark_history_server_helm_config"></a> spark_history_server_helm_configHelm configuration for Spark History Serverany{}no
<a name="input_spark_operator_helm_config"></a> spark_operator_helm_configHelm configuration for Spark K8s Operatorany{}no
<a name="input_strimzi_kafka_operator_helm_config"></a> strimzi_kafka_operator_helm_configHelm configuration for Strimzi Kafka Operatorany{}no
<a name="input_superset_helm_config"></a> superset_helm_configApache Supeset Helm Chart configany{}no
<a name="input_trino_helm_config"></a> trino_helm_configTrino Helm Chart configany{}no
<a name="input_volcano_helm_config"></a> volcano_helm_configVolcano scheduler add-on configurationsany{}no
<a name="input_yunikorn_helm_config"></a> yunikorn_helm_configHelm configuration for Apache YuniKornany{}no

Outputs

NameDescription
<a name="output_airflow"></a> airflowAirflow Helm Chart metadata
<a name="output_aws_efa_k8s_device_plugin"></a> aws_efa_k8s_device_pluginAWS EFA K8s Plugin Helm Chart metadata
<a name="output_aws_neuron_device_plugin"></a> aws_neuron_device_pluginAWS Neuron Device Plugin Helm Chart metadata
<a name="output_dask_hub"></a> dask_hubDask Hub Helm Chart metadata
<a name="output_dask_operator"></a> dask_operatorDask Operator Helm Chart metadata
<a name="output_emr_spark_operator"></a> emr_spark_operatorEMR Spark Operator Helm Chart metadata
<a name="output_flink_operator"></a> flink_operatorFlink Operator Helm Chart metadata
<a name="output_jupyterhub"></a> jupyterhubJupyterhub Helm Chart metadata
<a name="output_kubecost"></a> kubecostKubecost Helm Chart metadata
<a name="output_kuberay_operator"></a> kuberay_operatorKuberay Operator Helm Chart metadata
<a name="output_nvidia_gpu_operator"></a> nvidia_gpu_operatorNvidia GPU Operator Helm Chart metadata
<a name="output_pinot"></a> pinotApache Pinot Helm Chart metadata
<a name="output_spark_history_server"></a> spark_history_serverSpark History Server Helm Chart metadata
<a name="output_spark_operator"></a> spark_operatorSpark Operator Helm Chart metadata
<a name="output_strimzi_kafka_operator"></a> strimzi_kafka_operatorStrimzi Kafka Operator Helm Chart metadata
<a name="output_volcano"></a> volcanoVolcano Batch Scheduler Helm Chart metadata
<a name="output_yunikorn"></a> yunikornYunikorn Helm Chart metadata
<!-- END_TF_DOCS -->