diff --git a/main.tf b/main.tf index dea4501..291dceb 100644 --- a/main.tf +++ b/main.tf @@ -85,10 +85,11 @@ module "comet_eks" { enable_mpm_infra = var.enable_mpm_infra # Node Group Toggles - enable_admin_node_group = var.eks_enable_admin_node_group - enable_comet_node_group = var.eks_enable_comet_node_group - enable_druid_node_group = var.eks_enable_druid_node_group - enable_airflow_node_group = var.eks_enable_airflow_node_group + enable_admin_node_group = var.eks_enable_admin_node_group + enable_comet_node_group = var.eks_enable_comet_node_group + enable_druid_node_group = var.eks_enable_druid_node_group + enable_airflow_node_group = var.eks_enable_airflow_node_group + enable_clickhouse_node_group = var.eks_enable_clickhouse_node_group # Admin Node Group eks_admin_name = var.eks_admin_name @@ -118,6 +119,17 @@ module "comet_eks" { eks_airflow_max_size = var.eks_airflow_max_size eks_airflow_desired_size = var.eks_airflow_desired_size + # ClickHouse Node Group + eks_clickhouse_name = var.eks_clickhouse_name + eks_clickhouse_instance_types = var.eks_clickhouse_instance_types + eks_clickhouse_min_size = var.eks_clickhouse_min_size + eks_clickhouse_max_size = var.eks_clickhouse_max_size + eks_clickhouse_desired_size = var.eks_clickhouse_desired_size + eks_clickhouse_volume_size = var.eks_clickhouse_volume_size + eks_clickhouse_volume_type = var.eks_clickhouse_volume_type + eks_clickhouse_volume_encrypted = var.eks_clickhouse_volume_encrypted + eks_clickhouse_delete_on_termination = var.eks_clickhouse_delete_on_termination + # Additional custom node groups additional_node_groups = var.eks_additional_node_groups } diff --git a/modules/comet_eks/main.tf b/modules/comet_eks/main.tf index 12b4036..6b555c1 100644 --- a/modules/comet_eks/main.tf +++ b/modules/comet_eks/main.tf @@ -137,6 +137,34 @@ module "eks" { iam_role_additional_policies = var.s3_enabled ? { comet_s3_access = var.comet_ec2_s3_iam_policy } : {} } } : {}, + # ClickHouse Node Group + var.enable_clickhouse_node_group ? { + clickhouse = { + name = var.eks_clickhouse_name + instance_types = var.eks_clickhouse_instance_types + min_size = var.eks_clickhouse_min_size + max_size = var.eks_clickhouse_max_size + desired_size = var.eks_clickhouse_desired_size + block_device_mappings = { + xvda = { + device_name = "/dev/xvda" + ebs = { + volume_size = var.eks_clickhouse_volume_size + volume_type = var.eks_clickhouse_volume_type + encrypted = var.eks_clickhouse_volume_encrypted + delete_on_termination = var.eks_clickhouse_delete_on_termination + } + } + } + labels = { + nodegroup_name = "clickhouse" + } + tags = var.common_tags + tags_propagate_at_launch = true + launch_template_version = "$Latest" + iam_role_additional_policies = var.s3_enabled ? { comet_s3_access = var.comet_ec2_s3_iam_policy } : {} + } + } : {}, # Additional custom node groups var.additional_node_groups ) diff --git a/modules/comet_eks/variables.tf b/modules/comet_eks/variables.tf index 5ea1a2d..550db3e 100644 --- a/modules/comet_eks/variables.tf +++ b/modules/comet_eks/variables.tf @@ -231,8 +231,70 @@ variable "common_tags" { default = {} } +# ClickHouse Node Group Toggle +variable "enable_clickhouse_node_group" { + description = "Enable dedicated ClickHouse node group" + type = bool + default = false +} + +# ClickHouse Node Group Variables +variable "eks_clickhouse_name" { + description = "Name for the ClickHouse node group" + type = string + default = "clickhouse" +} + +variable "eks_clickhouse_instance_types" { + description = "Instance types for the ClickHouse node group" + type = list(string) + default = ["m7i.2xlarge"] +} + +variable "eks_clickhouse_min_size" { + description = "Minimum number of ClickHouse nodes" + type = number + default = 2 +} + +variable "eks_clickhouse_max_size" { + description = "Maximum number of ClickHouse nodes" + type = number + default = 3 +} + +variable "eks_clickhouse_desired_size" { + description = "Desired number of ClickHouse nodes" + type = number + default = 2 +} + +variable "eks_clickhouse_volume_size" { + description = "EBS volume size in GB for ClickHouse nodes" + type = number + default = 500 +} + +variable "eks_clickhouse_volume_type" { + description = "EBS volume type for ClickHouse nodes" + type = string + default = "gp3" +} + +variable "eks_clickhouse_volume_encrypted" { + description = "Enable EBS encryption for ClickHouse volumes" + type = bool + default = true +} + +variable "eks_clickhouse_delete_on_termination" { + description = "Delete EBS volumes on instance termination" + type = bool + default = true +} + variable "additional_node_groups" { - description = "Additional EKS managed node groups to create beyond the predefined ones (admin, comet, druid, airflow)" + description = "Additional EKS managed node groups to create beyond the predefined ones (admin, comet, druid, airflow, clickhouse)" type = any default = {} } diff --git a/variables.tf b/variables.tf index 3c50d62..80b174b 100644 --- a/variables.tf +++ b/variables.tf @@ -189,6 +189,12 @@ variable "eks_enable_airflow_node_group" { default = true } +variable "eks_enable_clickhouse_node_group" { + description = "Enable dedicated ClickHouse node group" + type = bool + default = false +} + # Admin Node Group Variables variable "eks_admin_name" { description = "Name for the admin node group" @@ -351,8 +357,63 @@ variable "eks_airflow_desired_size" { default = 2 } +# ClickHouse Node Group Variables +variable "eks_clickhouse_name" { + description = "Name for the ClickHouse node group" + type = string + default = "clickhouse" +} + +variable "eks_clickhouse_instance_types" { + description = "Instance types for the ClickHouse node group" + type = list(string) + default = ["r5.2xlarge"] +} + +variable "eks_clickhouse_min_size" { + description = "Minimum number of ClickHouse nodes" + type = number + default = 2 +} + +variable "eks_clickhouse_max_size" { + description = "Maximum number of ClickHouse nodes" + type = number + default = 3 +} + +variable "eks_clickhouse_desired_size" { + description = "Desired number of ClickHouse nodes" + type = number + default = 2 +} + +variable "eks_clickhouse_volume_size" { + description = "EBS volume size in GB for ClickHouse nodes" + type = number + default = 500 +} + +variable "eks_clickhouse_volume_type" { + description = "EBS volume type for ClickHouse nodes" + type = string + default = "gp3" +} + +variable "eks_clickhouse_volume_encrypted" { + description = "Enable EBS encryption for ClickHouse volumes" + type = bool + default = true +} + +variable "eks_clickhouse_delete_on_termination" { + description = "Delete EBS volumes on instance termination" + type = bool + default = true +} + variable "eks_additional_node_groups" { - description = "Additional EKS managed node groups to create beyond the predefined ones (admin, comet, druid, airflow)" + description = "Additional EKS managed node groups to create beyond the predefined ones (admin, comet, druid, airflow, clickhouse)" type = any default = {} }