From fbf837991cd26585f98adaace82787b5195fb107 Mon Sep 17 00:00:00 2001 From: Zachary Blasczyk <77289967+zacharyblasczyk@users.noreply.github.com> Date: Thu, 6 Jun 2024 09:40:15 -0500 Subject: [PATCH 1/8] docs: Operator Upgrade Docs (#206) * docs: Operator Upgrade Docs * adding apply output * Egress --- README.md | 11 +- .../images/post-operator-apply.png | Bin 0 -> 25206 bytes .../images/post-operator-k8s.svg | 1 + .../images/pre-operator-infra.svg | 1 + .../images/pre-operator-k8s.svg | 1 + .../post-operator.tf.disabled | 113 ++++++++ docs/operator-migration/post-operator.tfvars | 12 + docs/operator-migration/pre-operator.tf | 112 ++++++++ docs/operator-migration/pre-operator.tfvars | 7 + docs/operator-migration/readme.md | 267 ++++++++++++++++++ docs/operator-migration/variables.tf | 145 ++++++++++ 11 files changed, 667 insertions(+), 3 deletions(-) create mode 100644 docs/operator-migration/images/post-operator-apply.png create mode 100644 docs/operator-migration/images/post-operator-k8s.svg create mode 100644 docs/operator-migration/images/pre-operator-infra.svg create mode 100644 docs/operator-migration/images/pre-operator-k8s.svg create mode 100644 docs/operator-migration/post-operator.tf.disabled create mode 100644 docs/operator-migration/post-operator.tfvars create mode 100644 docs/operator-migration/pre-operator.tf create mode 100644 docs/operator-migration/pre-operator.tfvars create mode 100644 docs/operator-migration/readme.md create mode 100644 docs/operator-migration/variables.tf diff --git a/README.md b/README.md index 0bc592c9..3f9de70e 100644 --- a/README.md +++ b/README.md @@ -102,13 +102,14 @@ resources that lack official modules. Users can update the EKS cluster version to the latest version offered by AWS. This can be done using the environment variable `eks_cluster_version`. Note that, cluster and nodegroup version updates can only be done in increments of one version at a time. For example, if your current cluster version is `1.21` and the latest version available is `1.25` - you'd need to: 1. update the cluster version in the app_eks module from `1.21` to `1.22` -2. run `terraform apply` +2. run `terraform apply` 3. update the cluster version to `1.23` 4. run `terraform apply` 5. update the cluster version to `1.24` -...and so on and so forth. + ...and so on and so forth. Upgrades must be executed in step-wise fashion from one version to the next. You cannot skip versions when upgrading EKS. + ### Notes on EKS Add-ons @@ -252,7 +253,11 @@ CLI and re-run the apply. Running pods will not be impacted. ## Migrations -#### Upgrading from 3.x -> 4.x +### Upgrading to Operator + +See our upgrade guide [here](./docs/operator-migration/readme.md) + +### Upgrading from 3.x -> 4.x - If egress access for retrieving the wandb/controller image is not available, Terraform apply may experience failures. - It's necessary to supply a license variable within the module, as shown: diff --git a/docs/operator-migration/images/post-operator-apply.png b/docs/operator-migration/images/post-operator-apply.png new file mode 100644 index 0000000000000000000000000000000000000000..9ac05b96f6cab9a8616bfb2728fc50fd9458bfe8 GIT binary patch literal 25206 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⩔+8F29d*f*xM=Tpw0x9x;q4}BjVjF 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 literal 0 HcmV?d00001 diff --git a/docs/operator-migration/images/post-operator-k8s.svg b/docs/operator-migration/images/post-operator-k8s.svg new file mode 100644 index 00000000..20ebd449 --- /dev/null +++ b/docs/operator-migration/images/post-operator-k8s.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/operator-migration/images/pre-operator-infra.svg b/docs/operator-migration/images/pre-operator-infra.svg new file mode 100644 index 00000000..c1b474ea --- /dev/null +++ b/docs/operator-migration/images/pre-operator-infra.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/operator-migration/images/pre-operator-k8s.svg b/docs/operator-migration/images/pre-operator-k8s.svg new file mode 100644 index 00000000..93719397 --- /dev/null +++ b/docs/operator-migration/images/pre-operator-k8s.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/operator-migration/post-operator.tf.disabled b/docs/operator-migration/post-operator.tf.disabled new file mode 100644 index 00000000..62ae09e3 --- /dev/null +++ b/docs/operator-migration/post-operator.tf.disabled @@ -0,0 +1,113 @@ +provider "aws" { + region = "us-west-2" + + default_tags { + tags = { + GithubRepo = "terraform-aws-wandb" + GithubOrg = "wandb" + Enviroment = "Example" + Example = "PublicDnsExternal" + } + } +} + +terraform { + required_version = "~> 1.0" + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 4.0" # Post-Operator + } + kubernetes = { + source = "hashicorp/kubernetes" + version = "~> 2.23" + } + } +} + +module "wandb_infra" { + source = "wandb/wandb/aws" + version = "4.7.2" + + namespace = var.namespace + public_access = true + external_dns = true + + enable_dummy_dns = var.enable_dummy_dns # Post-Operator + enable_operator_alb = var.enable_operator_alb # Post-Operator + deletion_protection = false + + database_instance_class = var.database_instance_class + database_engine_version = var.database_engine_version + database_snapshot_identifier = var.database_snapshot_identifier + database_sort_buffer_size = var.database_sort_buffer_size + + database_performance_insights_kms_key_arn = null + + allowed_inbound_cidr = var.allowed_inbound_cidr + allowed_inbound_ipv6_cidr = ["::/0"] + + eks_cluster_version = "1.25" + kubernetes_public_access = true + kubernetes_public_access_cidrs = ["0.0.0.0/0"] + + domain_name = var.domain_name + zone_id = var.zone_id + subdomain = var.subdomain + + # Add License Post-Operator + license = var.wandb_license + + # Use standard sizing Post-Operator + size = var.size + + # Set the External DNS Custom Domain Filter Post-Operator + custom_domain_filter = var.custom_domain_filter + + bucket_name = var.bucket_name + bucket_kms_key_arn = var.bucket_kms_key_arn + use_internal_queue = true + + aws_loadbalancer_controller_tags = var.aws_loadbalancer_controller_tags +} + +data "aws_eks_cluster" "app_cluster" { + name = module.wandb_infra.cluster_id +} + +data "aws_eks_cluster_auth" "app_cluster" { + name = module.wandb_infra.cluster_id +} + +provider "kubernetes" { + host = data.aws_eks_cluster.app_cluster.endpoint + cluster_ca_certificate = base64decode(data.aws_eks_cluster.app_cluster.certificate_authority[0].data) + token = data.aws_eks_cluster_auth.app_cluster.token + exec { + api_version = "client.authentication.k8s.io/v1beta1" + args = ["eks", "get-token", "--cluster-name", data.aws_eks_cluster.app_cluster.name] + command = "aws" + } +} + +# Enable the Helm provider +provider "helm" { + kubernetes { + host = data.aws_eks_cluster.app_cluster.endpoint + cluster_ca_certificate = base64decode(data.aws_eks_cluster.app_cluster.certificate_authority[0].data) + token = data.aws_eks_cluster_auth.app_cluster.token + exec { + api_version = "client.authentication.k8s.io/v1beta1" + args = ["eks", "get-token", "--cluster-name", data.aws_eks_cluster.app_cluster.name] + command = "aws" + } + } +} + +output "bucket_name" { + value = module.wandb_infra.bucket_name +} + +output "bucket_queue_name" { + value = module.wandb_infra.bucket_queue_name +} diff --git a/docs/operator-migration/post-operator.tfvars b/docs/operator-migration/post-operator.tfvars new file mode 100644 index 00000000..9c3ae571 --- /dev/null +++ b/docs/operator-migration/post-operator.tfvars @@ -0,0 +1,12 @@ +namespace = "operator-upgrade" +domain_name = "sandbox-aws.wandb.ml" +zone_id = "Z032246913CW32RVRY0WU" +subdomain = "operator-upgrade" +wandb_license = "eyJh" +# wandb_version = "0.51.2" Is now coming from the Release Channel or set in the User Spec. + +# Needed Operator Variables for Upgrade +size = "small" +enable_dummy_dns = true +enable_operator_alb = true +custom_domain_filter = "sandbox-aws.wandb.ml" \ No newline at end of file diff --git a/docs/operator-migration/pre-operator.tf b/docs/operator-migration/pre-operator.tf new file mode 100644 index 00000000..40bf5a2b --- /dev/null +++ b/docs/operator-migration/pre-operator.tf @@ -0,0 +1,112 @@ +provider "aws" { + region = "us-west-2" + + default_tags { + tags = { + GithubRepo = "terraform-aws-wandb" + GithubOrg = "wandb" + Enviroment = "Example" + Example = "PublicDnsExternal" + } + } +} + +terraform { + required_version = "~> 1.0" + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 3.6" # Pre-Operator + } + kubernetes = { + source = "hashicorp/kubernetes" + version = "~> 2.23" + } + } +} + +module "wandb_infra" { + source = "wandb/wandb/aws" + version = "1.16.10" + + namespace = var.namespace + public_access = true + external_dns = true + + deletion_protection = false + + database_instance_class = var.database_instance_class + database_engine_version = var.database_engine_version + database_snapshot_identifier = var.database_snapshot_identifier + database_sort_buffer_size = var.database_sort_buffer_size + + database_performance_insights_kms_key_arn = null + + allowed_inbound_cidr = var.allowed_inbound_cidr + allowed_inbound_ipv6_cidr = ["::/0"] + + eks_cluster_version = "1.25" + kubernetes_public_access = true + kubernetes_public_access_cidrs = ["0.0.0.0/0"] + + domain_name = var.domain_name + zone_id = var.zone_id + subdomain = var.subdomain + + bucket_name = var.bucket_name + bucket_kms_key_arn = var.bucket_kms_key_arn + use_internal_queue = true +} + +data "aws_eks_cluster" "app_cluster" { + name = module.wandb_infra.cluster_id +} + +data "aws_eks_cluster_auth" "app_cluster" { + name = module.wandb_infra.cluster_id +} + +provider "kubernetes" { + host = data.aws_eks_cluster.app_cluster.endpoint + cluster_ca_certificate = base64decode(data.aws_eks_cluster.app_cluster.certificate_authority[0].data) + token = data.aws_eks_cluster_auth.app_cluster.token + exec { + api_version = "client.authentication.k8s.io/v1beta1" + args = ["eks", "get-token", "--cluster-name", data.aws_eks_cluster.app_cluster.name] + command = "aws" + } +} + +module "wandb_app" { + source = "wandb/wandb/kubernetes" + version = "1.12.0" + + license = var.wandb_license + + host = module.wandb_infra.url + bucket = "s3://${module.wandb_infra.bucket_name}" + bucket_aws_region = module.wandb_infra.bucket_region + bucket_queue = "internal://" + bucket_kms_key_arn = module.wandb_infra.kms_key_arn + database_connection_string = "mysql://${module.wandb_infra.database_connection_string}" + redis_connection_string = "redis://${module.wandb_infra.elasticache_connection_string}?tls=true&ttlInSeconds=604800" + + wandb_image = var.wandb_image + wandb_version = var.wandb_version + + service_port = module.wandb_infra.internal_app_port + + depends_on = [module.wandb_infra] + + other_wandb_env = merge({ + "GORILLA_CUSTOMER_SECRET_STORE_SOURCE" = "aws-secretmanager://${var.namespace}?namespace=${var.namespace}" + }, var.other_wandb_env) +} + +output "bucket_name" { + value = module.wandb_infra.bucket_name +} + +output "bucket_queue_name" { + value = module.wandb_infra.bucket_queue_name +} diff --git a/docs/operator-migration/pre-operator.tfvars b/docs/operator-migration/pre-operator.tfvars new file mode 100644 index 00000000..7cfb15a1 --- /dev/null +++ b/docs/operator-migration/pre-operator.tfvars @@ -0,0 +1,7 @@ +namespace = "operator-upgrade" +domain_name = "sandbox-aws.wandb.ml" +zone_id = "Z032246913CW32RVRY0WU" +subdomain = "operator-upgrade" +wandb_license = "eyJh" +wandb_version = "0.51.2" +# size = "small" \ No newline at end of file diff --git a/docs/operator-migration/readme.md b/docs/operator-migration/readme.md new file mode 100644 index 00000000..10179d04 --- /dev/null +++ b/docs/operator-migration/readme.md @@ -0,0 +1,267 @@ +# Operator Migration + +This guide details the steps required to upgrade from **_pre-operator_** to **_post-operator_** environments using the [terraform-aws-wandb](https://registry.terraform.io/modules/wandb/wandb/aws/latest) module. + +## Introduction to Operator Shift + +The transition to a Kubernetes [operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) pattern is crucial for our architecture. This section explains the transition from **_pre_** to **_post_** architectures. + +### Reasons for the Architecture Shift + +Historically, the W&B application was deployed as a single Deployment and pod within a Kubernetes Cluster or Docker container. We have always recommended externalizing the Metadata Store and Object Store to decouple state from the application, especially in production environments. + +As the application grew, the need to evolve from a monolithic container to a distributed system became apparent. This change facilitates backend logic handling and seamlessly introduces **_in-kubernetes_** infrastructure capabilities. It also supports deploying new services essential for additional features that W&B relies on. + +Previously, any Kubernetes-related changes required updating the [terraform-kubernetes-wandb](https://github.com/wandb/terraform-kubernetes-wandb), ensuring compatibility across cloud providers, configuring necessary Terraform variables, and executing a terraform apply for each backend or Kubernetes-level change. This process was not scalable and placed a significant burden on our support staff to assist customers with upgrades. + +The solution was to implement an **_Operator_** that connects to a central [deploy.wandb.ai](https://deploy.wandb.ai) server with its `license` to request the latest specification changes for a given **_Release Channel_** and apply them. Helm was chosen as both the deployment mechanism for our operator and the means for the operator to handle all configuration templating of the W&B Kubernetes stack; Helmception. + +You can install the operator from [charts/operator](https://github.com/wandb/helm-charts/tree/main/charts/operator). This installation creates a deployment called `controller-manager` and utilizes a **_Custom Resource_** definition named `weightsandbiases.apps.wandb.com` (shortName: `wandb`), which takes a single `spec` and applies it to the cluster: + +```yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: weightsandbiases.apps.wandb.com +``` + +The `controller-manager` installs [charts/operator-wandb](https://github.com/wandb/helm-charts/tree/main/charts/operator-wandb) based on the spec of the **_Custom Resource_**, **_Release Channel_**, and a **_User Defined Config_** in the new **_System Console_**. This hierarchy allows for maximum configuration flexibility at the user end and enables W&B to release new images, configurations, features, and Helm updates without requiring Terraform reruns. + +## Before and After Architecture + +Previously, our architecture used: + +```hcl +module "wandb_infra" { + source = "wandb/wandb/aws" + version = "1.16.10" + ... +} +``` + +to control the infrastructure: + +![pre-operator-infra](./images/pre-operator-infra.svg) + +and this module to deploy the W&B application: + +```hcl +module "wandb_app" { + source = "wandb/wandb/kubernetes" + version = "1.12.0" +} +``` + +![pre-operator-k8s](./images/pre-operator-k8s.svg) + +Post-transition, the architecture uses: + +```hcl +module "wandb_infra" { + source = "wandb/wandb/aws" + version = "4.7.2" + ... +} +``` + +to manage both the installation of infrastructure and the W&B application to the Kubernetes cluster, thus eliminating the need for the `module "wandb_app"` in `post-operator.tf`. + +![post-operator-k8s](./images/post-operator-k8s.svg) + +This architectural shift facilitates the introduction of additional customer features (like OpenTelemetry, Prometheus, HPA's, Kafka, and image updates) without requiring manual Terraform operations by SRE/Infrastructure teams. + +### Specification Hierarchy + +In our operator model, configuration specifications follow a hierarchical model where higher-level specifications override lower-level ones. Here’s how it works: + +- **Release Channel Spec**: This base level configuration sets default values and configurations based on the **_Release Channel_** set by W&B for the deployment. +- **User Input Spec**: Users can override the default settings provided by the Release Channel Spec through the System Console. +- **Custom Resource Spec**: The highest level of specification, which comes from the Terraform configuration. Any values specified here will override both the User Input and Release Channel specifications. + +This hierarchical model ensures that configurations are flexible and customizable to meet varying needs while maintaining a manageable and systematic approach to upgrades and changes. + +## Migration + +To commence with a base installation of the W&B Pre-Operator, ensure that `post-operator.tf` has a `.disabled` file extension and `pre-operator.tf` is active (i.e., does not have a `.disabled` extension). + +### Prerequisites + +Before initiating the migration process, ensure the following prerequisites are met: + +- **Egress**: The deployment can't be airgapped. It needs access to [deploy.wandb.ai](deploy.wandb.ai) to get the latest spec for the **_Release Channel_**. +- **AWS Credentials**: Proper AWS credentials configured to interact with your AWS resources. +- **Terraform Installed**: The latest version of Terraform should be installed on your system. +- **Route53 Hosted Zone**: An existing Route53 hosted zone corresponding to the domain under which the application will be served. +- **Pre-Operator Terraform Files**: Ensure `pre-operator.tf` and associated variable files like `pre-operator.tfvars` are correctly set up. + +### Pre-Operator Setup + +Execute the following Terraform commands to initialize and apply the configuration for the Pre-Operator setup: + +```bash +terraform init -upgrade +terraform apply -var-file=./pre-operator.tfvars +``` + +`pre-operator.tf` should look something like this: + +```ini +namespace = "operator-upgrade" +domain_name = "sandbox-aws.wandb.ml" +zone_id = "Z032246913CW32RVRY0WU" +subdomain = "operator-upgrade" +wandb_license = "ey..." +wandb_version = "0.51.2" +``` + +The `pre-operator.tf` configuration calls two modules: + +```hcl +module "wandb_infra" { + source = "wandb/wandb/aws" + version = "1.16.10" + ... +} +``` + +This module spins up the infrastructure. + +```hcl +module "wandb_app" { + source = "wandb/wandb/kubernetes" + version = "1.12.0" +} +``` + +This module deploys the application. + +### Post-Operator Setup + +Make sure that `pre-operator.tf` has a `.disabled` extension, and `post-operator.tf` is active. + +The `post-operator.tfvars` includes additional variables: + +```ini +... +# wandb_version = "0.51.2" is now managed via the Release Channel or set in the User Spec. + +# Required Operator Variables for Upgrade: +size = "small" +enable_dummy_dns = true +enable_operator_alb = true +custom_domain_filter = "sandbox-aws.wandb.ml" +``` + +Run the following commands to initialize and apply the Post-Operator configuration: + +```bash +terraform init -upgrade +terraform apply -var-file=./post-operator.tfvars +``` + +The plan and apply steps will update the following resources: + +```yaml +actions: + create: + - aws_efs_backup_policy.storage_class + - aws_efs_file_system.storage_class + - aws_efs_mount_target.storage_class["0"] + - aws_efs_mount_target.storage_class["1"] + - aws_eks_addon.efs + - aws_iam_openid_connect_provider.eks + - aws_iam_policy.secrets_manager + - aws_iam_role_policy_attachment.ebs_csi + - aws_iam_role_policy_attachment.eks_efs + - aws_iam_role_policy_attachment.node_secrets_manager + - aws_security_group.storage_class_nfs + - aws_security_group_rule.nfs_ingress + - random_pet.efs + - aws_s3_bucket_acl.file_storage + - aws_s3_bucket_cors_configuration.file_storage + - aws_s3_bucket_ownership_controls.file_storage + - aws_s3_bucket_server_side_encryption_configuration.file_storage + - helm_release.operator + - helm_release.wandb + - aws_cloudwatch_log_group.this[0] + - aws_iam_policy.default + - aws_iam_role.default + - aws_iam_role_policy_attachment.default + - helm_release.external_dns + - aws_default_network_acl.this[0] + - aws_default_route_table.default[0] + - aws_iam_policy.default + - aws_iam_role.default + - aws_iam_role_policy_attachment.default + - helm_release.aws_load_balancer_controller + + update_in_place: + - aws_iam_policy.node_IMDSv2 + - aws_iam_policy.node_cloudwatch + - aws_iam_policy.node_kms + - aws_iam_policy.node_s3 + - aws_iam_policy.node_sqs + - aws_eks_cluster.this[0] + - aws_elasticache_replication_group.default + - aws_rds_cluster.this[0] + - aws_rds_cluster_instance.this["1"] + - aws_default_security_group.this[0] + - aws_subnet.private[0] + - aws_subnet.private[1] + - aws_subnet.public[0] + - aws_subnet.public[1] + - aws_launch_template.workers["primary"] + + destroy: + - kubernetes_config_map.config_map + - kubernetes_deployment.wandb + - kubernetes_priority_class.priority + - kubernetes_secret.secret + - kubernetes_service.prometheus + - kubernetes_service.service + - random_id.snapshot_identifier[0] + + replace: + - aws_autoscaling_attachment.autoscaling_attachment["primary"] + - aws_route53_record.alb + - aws_eks_node_group.workers["primary"] +``` + +You should see something like this: + +![post-operator-apply](./images/post-operator-apply.png) + +Note that in `post-operator.tf`, there is a single: + +```hcl +module "wandb_infra" { + source = "wandb/wandb/aws" + version = "4.7.2" + ... +} +``` + +#### Changes in the Post-Operator Configuration: + +1. **Update Required Providers**: Change `required_providers.aws.version` from `3.6` to `4.0` for provider compatibility. +2. **DNS and Load Balancer Configuration**: Integrate `enable_dummy_dns` and `enable_operator_alb` to manage DNS records and AWS Load Balancer setup through an Ingress. +3. **License and Size Configuration**: Transfer the `license` and `size` parameters directly to the `wandb_infra` module to match new operational requirements. +4. **Custom Domain Handling**: If necessary, use `custom_domain_filter` to troubleshoot DNS issues by checking the External DNS pod logs within the `kube-system` namespace. +5. **Helm Provider Configuration**: Enable and configure the Helm provider to manage Kubernetes resources effectively: + +```hcl +provider "helm" { + kubernetes { + host = data.aws_eks_cluster.app_cluster.endpoint + cluster_ca_certificate = base64decode(data.aws_eks_cluster.app_cluster.certificate_authority[0].data) + token = data.aws_eks_cluster_auth.app_cluster.token + exec { + api_version = "client.authentication.k8s.io/v1beta1" + args = ["eks", "get-token", "--cluster-name", data.aws_eks_cluster.app_cluster.name] + command = "aws" + } + } +} +``` + +This comprehensive setup ensures a smooth transition from the Pre-Operator to the Post-Operator configuration, leveraging new efficiencies and capabilities enabled by the operator model. diff --git a/docs/operator-migration/variables.tf b/docs/operator-migration/variables.tf new file mode 100644 index 00000000..f7c3bd7e --- /dev/null +++ b/docs/operator-migration/variables.tf @@ -0,0 +1,145 @@ +variable "namespace" { + type = string + description = "Name prefix used for resources" +} + +variable "domain_name" { + type = string + description = "Domain name used to access instance." +} + +variable "zone_id" { + type = string + description = "Id of Route53 zone" +} + +variable "size" { + default = "small" + description = "Deployment size" + nullable = true + type = string +} + +variable "subdomain" { + type = string + default = null + description = "Subdomain for accessing the Weights & Biases UI." +} + +variable "wandb_license" { + type = string +} + +variable "database_engine_version" { + description = "Version for MySQL Auora" + type = string + default = "8.0.mysql_aurora.3.03.0" +} + +variable "database_instance_class" { + description = "Instance type to use by database master instance." + type = string + default = "db.r5.large" +} + +variable "database_snapshot_identifier" { + description = "Specifies whether or not to create this cluster from a snapshot. You can use either the name or ARN when specifying a DB cluster snapshot, or the ARN when specifying a DB snapshot" + type = string + default = null +} + +variable "database_sort_buffer_size" { + description = "Specifies the sort_buffer_size value to set for the database" + type = number + default = 262144 +} + +variable "wandb_version" { + description = "The version of Weights & Biases local to deploy." + type = string + default = "latest" +} + +variable "wandb_image" { + description = "Docker repository of to pull the wandb image from." + type = string + default = "wandb/local" +} + +variable "bucket_name" { + type = string + default = "" +} + +variable "bucket_kms_key_arn" { + type = string + description = "The Amazon Resource Name of the KMS key with which S3 storage bucket objects will be encrypted." + default = "" +} + +variable "enable_dummy_dns" { + type = bool + default = false + description = "Boolean indicating whether or not to enable dummy DNS for the old alb" +} + +variable "enable_operator_alb" { + type = bool + default = false + description = "Boolean indicating whether to use operatore ALB (true) or not (false)." +} + +variable "custom_domain_filter" { + description = "A custom domain filter to be used by external-dns instead of the default FQDN. If not set, the local FQDN is used." + type = string + default = null +} + +variable "allowed_inbound_cidr" { + default = ["0.0.0.0/0"] + nullable = false + type = list(string) +} + + +variable "allowed_inbound_ipv6_cidr" { + default = ["::/0"] + nullable = false + type = list(string) +} + +variable "other_wandb_env" { + type = map(string) + description = "Extra environment variables for W&B" + default = {} +} + +variable "system_reserved_cpu_millicores" { + description = "(Optional) The amount of 'system-reserved' CPU millicores to pass to the kubelet. For example: 100. A value of -1 disables the flag." + type = number + default = -1 +} + +variable "system_reserved_memory_megabytes" { + description = "(Optional) The amount of 'system-reserved' memory in megabytes to pass to the kubelet. For example: 100. A value of -1 disables the flag." + type = number + default = -1 +} + +variable "system_reserved_ephemeral_megabytes" { + description = "(Optional) The amount of 'system-reserved' ephemeral storage in megabytes to pass to the kubelet. For example: 1000. A value of -1 disables the flag." + type = number + default = -1 +} + +variable "system_reserved_pid" { + description = "(Optional) The amount of 'system-reserved' process ids [pid] to pass to the kubelet. For example: 1000. A value of -1 disables the flag." + type = number + default = -1 +} + +variable "aws_loadbalancer_controller_tags" { + description = "(Optional) A map of AWS tags to apply to all resources managed by the load balancer controller" + type = map(string) + default = {} +} From 12e053d520f6998689d3bec0352b320a9105ba9e Mon Sep 17 00:00:00 2001 From: Aman Pruthi Date: Tue, 18 Jun 2024 00:16:31 +0530 Subject: [PATCH 2/8] feat: Added support yace (#218) * added yace and otel configs * fix * fixed --------- Co-authored-by: amanpruthi --- main.tf | 56 +++++++++++++++++++++++++++++++++++ modules/app_eks/outputs.tf | 4 +++ modules/iam_role/main.tf | 51 +++++++++++++++++++++++++++++++ modules/iam_role/outputs.tf | 3 ++ modules/iam_role/variables.tf | 8 +++++ variables.tf | 6 ++++ 6 files changed, 128 insertions(+) create mode 100644 modules/iam_role/main.tf create mode 100644 modules/iam_role/outputs.tf create mode 100644 modules/iam_role/variables.tf diff --git a/main.tf b/main.tf index 3b6fc78d..e551263e 100644 --- a/main.tf +++ b/main.tf @@ -222,6 +222,15 @@ locals { lb_name_truncated = "${substr(var.namespace, 0, local.max_lb_name_length)}-alb-k8s" } +data "aws_region" "current" {} + +module "iam_role" { + count = var.enable_yace ? 1 : 0 + source = "./modules/iam_role" + namespace = var.namespace + aws_iam_openid_connect_provider_url = module.app_eks.aws_iam_openid_connect_provider +} + module "wandb" { source = "wandb/wandb/helm" version = "1.2.0" @@ -300,6 +309,53 @@ module "wandb" { }, var.app_wandb_env) } + # To support otel rds and redis metrics need operator-wandb chart minimum version 0.13.8 ( yace subchart) + yace = var.enable_yace ? { + install = true + regions = [data.aws_region.current.name] + serviceAccount = { annotations = { "eks.amazonaws.com/role-arn" = module.iam_role[0].role_arn} } + } : { + install = false + regions = [] + serviceAccount = {} + } + + otel = { + daemonset = var.enable_yace ? { + config = { + receivers = { + prometheus = { + config = { + scrape_configs = [ + { job_name = "yace" + scheme = "http" + metrics_path = "/metrics" + dns_sd_configs = [ + { names = ["yace"] + type = "A" + port = 5000 + } + ] + } + ] + } + } + } + service = { + pipelines = { + metrics = { + receivers = ["hostmetrics", "k8s_cluster", "kubeletstats", "prometheus"] + } + } + } + } + } : { config = { + receivers = {} + service = {} + } + } + } + mysql = { install = false } redis = { install = false } diff --git a/modules/app_eks/outputs.tf b/modules/app_eks/outputs.tf index 304b51db..cc791455 100644 --- a/modules/app_eks/outputs.tf +++ b/modules/app_eks/outputs.tf @@ -17,3 +17,7 @@ output "node_role" { output "primary_workers_security_group_id" { value = aws_security_group.primary_workers.id } + +output "aws_iam_openid_connect_provider" { + value = aws_iam_openid_connect_provider.eks.url +} \ No newline at end of file diff --git a/modules/iam_role/main.tf b/modules/iam_role/main.tf new file mode 100644 index 00000000..5d982e56 --- /dev/null +++ b/modules/iam_role/main.tf @@ -0,0 +1,51 @@ +data "aws_caller_identity" "current" {} + +resource "aws_iam_role" "irsa" { + name = "${var.namespace}-yace-irsa-role" + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Sid = "" + Effect = "Allow" + Principal = { + Federated = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:oidc-provider/${var.aws_iam_openid_connect_provider_url}" + } + Action = ["sts:AssumeRoleWithWebIdentity"] + Condition = { + StringLike = { + "${var.aws_iam_openid_connect_provider_url}:sub" = "system:serviceaccount:*:yace" + "${var.aws_iam_openid_connect_provider_url}:aud" = "sts.amazonaws.com" + } + } + } + ] + }) +} + + +resource "aws_iam_policy" "irsa" { + name = "${var.namespace}-yace-irsa-policy" + description = "IRSA IAM Policy" + + policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Effect = "Allow" + Action = [ + "tag:GetResources", + "cloudwatch:GetMetricData", + "cloudwatch:GetMetricStatistics", + "cloudwatch:ListMetrics" + ] + Resource = "*" + } + ] + }) +} + +resource "aws_iam_role_policy_attachment" "default" { + role = aws_iam_role.irsa.name + policy_arn = aws_iam_policy.irsa.arn +} \ No newline at end of file diff --git a/modules/iam_role/outputs.tf b/modules/iam_role/outputs.tf new file mode 100644 index 00000000..989f8c0c --- /dev/null +++ b/modules/iam_role/outputs.tf @@ -0,0 +1,3 @@ +output "role_arn" { + value = aws_iam_role.irsa.arn +} \ No newline at end of file diff --git a/modules/iam_role/variables.tf b/modules/iam_role/variables.tf new file mode 100644 index 00000000..4cd10397 --- /dev/null +++ b/modules/iam_role/variables.tf @@ -0,0 +1,8 @@ +variable "namespace" { + type = string + description = "The name prefix for all resources created." +} + +variable "aws_iam_openid_connect_provider_url" { + type = string +} \ No newline at end of file diff --git a/variables.tf b/variables.tf index 067fd9f5..bf75219d 100644 --- a/variables.tf +++ b/variables.tf @@ -441,3 +441,9 @@ variable "parquet_wandb_env" { description = "Extra environment variables for W&B" default = {} } + +variable "enable_yace" { + type = bool + description = "deploy yet another cloudwatch exporter to fetch aws resources metrics" + default = true +} \ No newline at end of file From 6e2932ed1871e77a8469a1f96739e40f18bbec7a Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 17 Jun 2024 18:47:01 +0000 Subject: [PATCH 3/8] chore(release): version 4.12.0 [skip ci] ## [4.12.0](https://github.com/wandb/terraform-aws-wandb/compare/v4.11.0...v4.12.0) (2024-06-17) ### Features * Added support yace ([#218](https://github.com/wandb/terraform-aws-wandb/issues/218)) ([12e053d](https://github.com/wandb/terraform-aws-wandb/commit/12e053d520f6998689d3bec0352b320a9105ba9e)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index df212ea5..f68813fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. +## [4.12.0](https://github.com/wandb/terraform-aws-wandb/compare/v4.11.0...v4.12.0) (2024-06-17) + + +### Features + +* Added support yace ([#218](https://github.com/wandb/terraform-aws-wandb/issues/218)) ([12e053d](https://github.com/wandb/terraform-aws-wandb/commit/12e053d520f6998689d3bec0352b320a9105ba9e)) + ## [4.11.0](https://github.com/wandb/terraform-aws-wandb/compare/v4.10.2...v4.11.0) (2024-05-18) From be152e59e7ed8406fad8cb6ab0a9e6ec31497bd1 Mon Sep 17 00:00:00 2001 From: Aditya Choudhari <48932219+adityachoudhari26@users.noreply.github.com> Date: Mon, 17 Jun 2024 12:57:56 -0700 Subject: [PATCH 4/8] chore: Replace deprecated resolve conflicts field (#230) --- modules/app_eks/add-ons.tf | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/modules/app_eks/add-ons.tf b/modules/app_eks/add-ons.tf index 52d50e4a..b4a7456e 100644 --- a/modules/app_eks/add-ons.tf +++ b/modules/app_eks/add-ons.tf @@ -32,14 +32,15 @@ resource "aws_iam_role" "oidc" { ### add-ons resource "aws_eks_addon" "aws_efs_csi_driver" { - depends_on = [ - aws_eks_addon.vpc_cni - ] - cluster_name = var.namespace - addon_name = "aws-efs-csi-driver" - addon_version = "v1.7.7-eksbuild.1" - resolve_conflicts = "OVERWRITE" - } + depends_on = [ + aws_eks_addon.vpc_cni + ] + cluster_name = var.namespace + addon_name = "aws-efs-csi-driver" + addon_version = "v1.7.7-eksbuild.1" + resolve_conflicts_on_create = "OVERWRITE" + resolve_conflicts_on_update = "OVERWRITE" +} resource "aws_eks_addon" "aws_ebs_csi_driver" { depends_on = [ @@ -48,7 +49,8 @@ resource "aws_eks_addon" "aws_ebs_csi_driver" { cluster_name = var.namespace addon_name = "aws-ebs-csi-driver" addon_version = "v1.25.0-eksbuild.1" - resolve_conflicts = "OVERWRITE" + resolve_conflicts_on_create = "OVERWRITE" + resolve_conflicts_on_update = "OVERWRITE" } resource "aws_eks_addon" "coredns" { @@ -58,7 +60,8 @@ resource "aws_eks_addon" "coredns" { cluster_name = var.namespace addon_name = "coredns" addon_version = "v1.9.3-eksbuild.11" - resolve_conflicts = "OVERWRITE" + resolve_conflicts_on_create = "OVERWRITE" + resolve_conflicts_on_update = "OVERWRITE" } resource "aws_eks_addon" "kube_proxy" { @@ -68,13 +71,15 @@ resource "aws_eks_addon" "kube_proxy" { cluster_name = var.namespace addon_name = "kube-proxy" addon_version = "v1.25.14-eksbuild.2" - resolve_conflicts = "OVERWRITE" + resolve_conflicts_on_create = "OVERWRITE" + resolve_conflicts_on_update = "OVERWRITE" } resource "aws_eks_addon" "vpc_cni" { cluster_name = var.namespace addon_name = "vpc-cni" addon_version = "v1.18.0-eksbuild.1" - resolve_conflicts = "OVERWRITE" - service_account_role_arn = aws_iam_role.oidc.arn -} \ No newline at end of file + resolve_conflicts_on_create = "OVERWRITE" + resolve_conflicts_on_update = "OVERWRITE" + service_account_role_arn = aws_iam_role.oidc.arn +} From 974b4f3ec0d01b34cf6d83008c9fe2a0d3d8ee7a Mon Sep 17 00:00:00 2001 From: Aditya Choudhari <48932219+adityachoudhari26@users.noreply.github.com> Date: Mon, 17 Jun 2024 13:12:21 -0700 Subject: [PATCH 5/8] fix: Remove white space (#231) --- modules/app_eks/add-ons.tf | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/app_eks/add-ons.tf b/modules/app_eks/add-ons.tf index b4a7456e..69b2ff49 100644 --- a/modules/app_eks/add-ons.tf +++ b/modules/app_eks/add-ons.tf @@ -1,4 +1,3 @@ - ### IAM policy and role for vpc-cni data "aws_iam_policy_document" "oidc_assume_role" { statement { From 9dbd6125ffd51ed6219e1a02b1fddc3732971030 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 17 Jun 2024 20:12:52 +0000 Subject: [PATCH 6/8] chore(release): version 4.12.1 [skip ci] ### [4.12.1](https://github.com/wandb/terraform-aws-wandb/compare/v4.12.0...v4.12.1) (2024-06-17) ### Bug Fixes * Remove white space ([#231](https://github.com/wandb/terraform-aws-wandb/issues/231)) ([974b4f3](https://github.com/wandb/terraform-aws-wandb/commit/974b4f3ec0d01b34cf6d83008c9fe2a0d3d8ee7a)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f68813fb..0d50b62e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. +### [4.12.1](https://github.com/wandb/terraform-aws-wandb/compare/v4.12.0...v4.12.1) (2024-06-17) + + +### Bug Fixes + +* Remove white space ([#231](https://github.com/wandb/terraform-aws-wandb/issues/231)) ([974b4f3](https://github.com/wandb/terraform-aws-wandb/commit/974b4f3ec0d01b34cf6d83008c9fe2a0d3d8ee7a)) + ## [4.12.0](https://github.com/wandb/terraform-aws-wandb/compare/v4.11.0...v4.12.0) (2024-06-17) From 778f147aa9962fde6a74b7d35501ec7dd7abf2a9 Mon Sep 17 00:00:00 2001 From: Aditya Choudhari <48932219+adityachoudhari26@users.noreply.github.com> Date: Mon, 17 Jun 2024 15:01:37 -0700 Subject: [PATCH 7/8] fix: Revert resolve conflicts var (#233) --- modules/app_eks/add-ons.tf | 47 +++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/modules/app_eks/add-ons.tf b/modules/app_eks/add-ons.tf index 69b2ff49..41c9cc8f 100644 --- a/modules/app_eks/add-ons.tf +++ b/modules/app_eks/add-ons.tf @@ -34,51 +34,46 @@ resource "aws_eks_addon" "aws_efs_csi_driver" { depends_on = [ aws_eks_addon.vpc_cni ] - cluster_name = var.namespace - addon_name = "aws-efs-csi-driver" - addon_version = "v1.7.7-eksbuild.1" - resolve_conflicts_on_create = "OVERWRITE" - resolve_conflicts_on_update = "OVERWRITE" + cluster_name = var.namespace + addon_name = "aws-efs-csi-driver" + addon_version = "v1.7.7-eksbuild.1" + resolve_conflicts = "OVERWRITE" } resource "aws_eks_addon" "aws_ebs_csi_driver" { depends_on = [ aws_eks_addon.vpc_cni ] - cluster_name = var.namespace - addon_name = "aws-ebs-csi-driver" - addon_version = "v1.25.0-eksbuild.1" - resolve_conflicts_on_create = "OVERWRITE" - resolve_conflicts_on_update = "OVERWRITE" + cluster_name = var.namespace + addon_name = "aws-ebs-csi-driver" + addon_version = "v1.25.0-eksbuild.1" + resolve_conflicts = "OVERWRITE" } resource "aws_eks_addon" "coredns" { depends_on = [ aws_eks_addon.vpc_cni ] - cluster_name = var.namespace - addon_name = "coredns" - addon_version = "v1.9.3-eksbuild.11" - resolve_conflicts_on_create = "OVERWRITE" - resolve_conflicts_on_update = "OVERWRITE" + cluster_name = var.namespace + addon_name = "coredns" + addon_version = "v1.9.3-eksbuild.11" + resolve_conflicts = "OVERWRITE" } resource "aws_eks_addon" "kube_proxy" { depends_on = [ aws_eks_addon.vpc_cni ] - cluster_name = var.namespace - addon_name = "kube-proxy" - addon_version = "v1.25.14-eksbuild.2" - resolve_conflicts_on_create = "OVERWRITE" - resolve_conflicts_on_update = "OVERWRITE" + cluster_name = var.namespace + addon_name = "kube-proxy" + addon_version = "v1.25.14-eksbuild.2" + resolve_conflicts = "OVERWRITE" } resource "aws_eks_addon" "vpc_cni" { - cluster_name = var.namespace - addon_name = "vpc-cni" - addon_version = "v1.18.0-eksbuild.1" - resolve_conflicts_on_create = "OVERWRITE" - resolve_conflicts_on_update = "OVERWRITE" - service_account_role_arn = aws_iam_role.oidc.arn + cluster_name = var.namespace + addon_name = "vpc-cni" + addon_version = "v1.18.0-eksbuild.1" + resolve_conflicts = "OVERWRITE" + service_account_role_arn = aws_iam_role.oidc.arn } From 5f83533f17994f32fbe8a30172f23ba37ec6d5b4 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 17 Jun 2024 22:02:07 +0000 Subject: [PATCH 8/8] chore(release): version 4.12.2 [skip ci] ### [4.12.2](https://github.com/wandb/terraform-aws-wandb/compare/v4.12.1...v4.12.2) (2024-06-17) ### Bug Fixes * Revert resolve conflicts var ([#233](https://github.com/wandb/terraform-aws-wandb/issues/233)) ([778f147](https://github.com/wandb/terraform-aws-wandb/commit/778f147aa9962fde6a74b7d35501ec7dd7abf2a9)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d50b62e..9734eb7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. +### [4.12.2](https://github.com/wandb/terraform-aws-wandb/compare/v4.12.1...v4.12.2) (2024-06-17) + + +### Bug Fixes + +* Revert resolve conflicts var ([#233](https://github.com/wandb/terraform-aws-wandb/issues/233)) ([778f147](https://github.com/wandb/terraform-aws-wandb/commit/778f147aa9962fde6a74b7d35501ec7dd7abf2a9)) + ### [4.12.1](https://github.com/wandb/terraform-aws-wandb/compare/v4.12.0...v4.12.1) (2024-06-17)