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