Adding Support for a New Cloud Provider
Requirements
Cluster Specifications
Minimum Requirements:
CPU: 48 vCPUs
Memory: 192 GB
Recommended Node Size:
3 nodes of each of 16 vCPUs 64 GB RAM
Networking
Public Subnet
Storage Buckets
Create the following buckets:
private_container_name
public_container_name
dial_state_container_public
velero_private_container_name
Additional Requirements
Storage Account
Random String
Encryption String
JWT Tokens
RSA Keys
Steps to Add a New Cloud Provider
Step 1: Create a New Folder
Navigate to the
terraform
directory and create a folder for the new cloud provider. Example:terraform/gcp/
Step 2: Recommended Folder Structure
Organize the folder as follows:
terraform/<cloud_provider>/
βββ _common
β βββ kubernetescluster.hcl
β βββ keys.hcl
β βββ network.hcl
β βββ output-file.hcl
β βββ serviceaccount.hcl
β βββ storage.hcl
β βββ upload-files.hcl
βββ modules
β βββ kubernetescluster
β βββ keys
β βββ network
β βββ output-file
β βββ serviceaccount
β βββ storage
β βββ upload-files
βββ template/
βββ kubernetescluster
β βββ terragrunt.hcl
βββ create_tf_backend.sh
βββ global-values.yaml
βββ install.sh
βββ keys
β βββ terragrunt.hcl
βββ network
β βββ terragrunt.hcl
βββ output-file
β βββ terragrunt.hcl
βββ postman.env.json
βββ storage
β βββ terragrunt.hcl
βββ terragrunt.hcl
βββ upload-files
βββ terragrunt.hcl
Step 3: Copy Template Files
Copy the template files from the Azure configuration:
cp sunbird-ed-installer/terraform/azure/template/{global-values.yaml,install.sh} sunbird-ed-installer/terraform/gcp/template/
In global-values.yaml, add this variable:
cloud_provider: "REPLACE_ME" # for configuring GCP and AWS installations
Step 4: Structuring Output Files
This will become the input for Helm bundles:
global-cloud-values.yaml
global-values.yaml
Step 5: Helm Changes
In Helm charts, wherever cloud values are being referred to, use the following format:
{{- if eq .Values.global.cloud_storage_provider "aws" }}
# AWS Specific Values
{{- else if eq .Values.global.cloud_storage_provider "gcp" }}
# GCP Specific Values
{{- end }}
Example:
In Helm charts, using a direct reference for Azure:
container_name: "{{ .Values.global.public_container_name }}"
Using an if-else
condition for multiple cloud providers:
container_name:
{{- if eq .Values.global.cloud_storage_provider "aws" }}
"{{ .Values.global.public_container_name }}"
{{- else if eq .Values.global.cloud_storage_provider "gcp" }}
"{{ .Values.global.public_container_namee }}"
{{- else }}
"{{ .Values.telemetry_container_private }}"
{{- end }}
Step 6: Enable Service Account and Add Annotations
When using storage buckets, ensure the appropriate service account is enabled and annotated For example:
serviceAccount:
create: true
name: <created at step 2>
annotations:
iam.gke.io/gcp-service-account: <service-account-name>@<project-id>.iam.gserviceaccount.com
For Azure installation, please refer to the documentation:/sunbird-ed-installer/terraform/azure/README.md
For GCP installation, please refer to the documentation:/sunbird-ed-installer/
terraform/gcp/README.md
Last updated