मुख्य सामग्री पर जाएं

EKB Terraform अवसंरचना

यह लेख AWS EKS पर EKB प्लेटफ़ॉर्म प्रबंधन के लिए Terraform और Terragrunt infrastructure-as-code (IaC) शामिल करता है, जिसमें GKE, AKS और bare-metal Kubernetes के लिए समर्थन stubs शामिल हैं। इसमें सभी Helm chart deployments और वातावरण कॉन्फ़िगरेशन टेम्पलेट्स शामिल हैं।


दस्तावेज़ीकरण​

दस्तावेज़विवरण
Terragrunt तैनाती गाइडनया वातावरण बनाने और तैनात करने के लिए चरण-दर-चरण गाइड
AWS वास्तुकला अवलोकनवास्तुकला अवलोकन, घटक विवरण और डेटा प्रवाह
आपदा वसूली रणनीतिDR रणनीति, RTO/RPO लक्ष्य, बैकअप सिस्टम और वसूली प्रक्रियाएँ
पूर्व आवश्यकताएँ चेकलिस्टग्राहक के साथ पूर्ण करने के लिए पूर्व-तैनाती चेकलिस्ट

रिपॉज़िटरी संरचना​

ekb-terraform/
├── root.hcl # मूल Terragrunt कॉन्फ़िगरेशन (रिमोट स्टेट, provider जनरेशन)
│
├── modules/ # पुन: प्रयोग योग्य Terraform मॉड्यूल्स
│ ├── eks/ # AWS EKS क्लस्टर, VPC, Karpenter, IAM, Helm releases
│ ├── aws-services/ # ElastiCache Redis, Amazon MQ RabbitMQ
│ ├── helm/ # जेनेरिक Helm release मॉड्यूल
│ ├── state/ # S3 स्टेट bucket बूटस्ट्रैप
│ ├── aks/ # Azure AKS (stub)
│ ├── gke/ # Google GKE (stub)
│ └── baremetal/ # Bare-metal Kubernetes (stub)
│
├── terragrunt/
│ ├── .gitignore
│ └── environments/
│ ├── STATE_MANAGEMENT_README.md
│ └── env-template-folder/ # नए वातावरण के लिए टेम्पलेट — कॉपी करें और placeholders भरें
│ ├── terragrunt.hcl # मुख्य वातावरण कॉन्फ़िगरेशन (क्लस्टर, Helm releases, AWS सेवाएँ)
│ ├── state/
│ │ └── terragrunt.hcl # इस वातावरण के लिए स्टेट bucket बूटस्ट्रैप
│ └── values/ # प्रति-chart Helm values (प्रति chart एक फ़ाइल)
│ ├── infrastructure.yaml # AWS Load Balancer Controller
│ ├── aws-ebs-csi-driver.yaml # EBS CSI Driver
│ ├── karpenter.yaml # Karpenter NodePool
│ ├── karpenter-nodeclasses.yaml# Karpenter EC2NodeClass
│ ├── karpenter-values.yaml # Karpenter controller values
│ ├── keda.yaml # KEDA autoscaler
│ ├── odin-services.yaml # EKB एप्लिकेशन सेवाएँ
│ ├── cloudnative-pg.yaml # CloudNativePG operator (ENABLE_CNPG)
│ ├── ha-supabase-db.yaml # CNPG के माध्यम से HA Postgres क्लस्टर (ENABLE_HA_SUPABASE_DB)
│ ├── supabase.yaml # Supabase एप्लिकेशन स्टैक (ENABLE_SUPABASE)
│ ├── signoz.yaml # SigNoz अवलोकन प्लेटफ़ॉर्म (ENABLE_SIGNOZ)
│ └── signoz-k8s-infra.yaml # SigNoz k8s-infra मेट्रिक्स agent (ENABLE_SIGNOZ)
│
└── helm-deployment/ # Vendored / स्थानीय Helm charts
├── infrastructure/ # ALB Controller wrapper chart
├── odin-services/odin-services/ # EKB प्लेटफ़ॉर्म (Web, API, Celery, Automator, Ingress)
├── cloudnative-pg/ # CloudNativePG operator chart
├── ha-supabase-db/ # HA Supabase DB (CNPG Cluster + PgBouncer + barman backups)
├── supabase-kubernetes-ha/ # पूर्ण Supabase एप्लिकेशन स्टैक
├── signoz/ # SigNoz अवलोकन प्लेटफ़ॉर्म
└── k8s-infra/ # SigNoz k8s-infra क्लस्टर मेट्रिक्स agent

क्विक स्टार्ट​

1. आवश्यक उपकरण स्थापित करें​

Terraform

# macOS
brew install terraform

# Linux
sudo apt update && sudo apt install terraform

Terragrunt

# macOS
brew install terragrunt

# Linux / macOS (मैनुअल)
curl -Lo /usr/local/bin/terragrunt \
https://github.com/gruntwork-io/terragrunt/releases/latest/download/terragrunt_linux_amd64
chmod +x /usr/local/bin/terragrunt

kubectl और Helm

# macOS
brew install kubectl helm

# Linux
curl -LO "https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -m 0755 kubectl /usr/local/bin/kubectl
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

इंस्टॉलेशन सत्यापित करें

terraform --version
terragrunt --version
kubectl version --client
helm version
aws sts get-caller-identity

2. एक नया वातावरण बनाएँ​

नए वातावरण env-template-folder को कॉपी करके और placeholders भरकर बनाए जाते हैं।

पूर्ण चरण-दर-चरण प्रक्रिया के लिए Terragrunt तैनाती गाइड देखें। उच्च-स्तरीय प्रवाह है:

# 1. टेम्पलेट कॉपी करें
cp -r terragrunt/environments/env-template-folder terragrunt/environments/your-env-name

# 2. सभी <YOUR_*> placeholders भरें:
# - terragrunt/environments/your-env-name/terragrunt.hcl
# - terragrunt/environments/your-env-name/state/terragrunt.hcl
# - terragrunt/environments/your-env-name/values/*.yaml

# 3. स्टेट bucket बूटस्ट्रैप करें
cd terragrunt/environments/your-env-name/state
terragrunt apply

# 4. वातावरण चर सेट करें और तैनात करें
cd ../
export ENABLE_ALB_CONTROLLER=true
export WEB_DOMAIN="app.example.com"
export WEB_CERTIFICATE_ARN="arn:aws:acm:<region>:<account>:certificate/<id>"
# ... (पूर्ण चर सूची के लिए TERRAGRUNT_DEPLOYMENT_GUIDE.md देखें)

terragrunt apply

सेवा सक्षम/अक्षम फ़्लैग्स​

सभी वैकल्पिक सेवाएँ वातावरण चरों के माध्यम से टॉगल की जाती हैं। terragrunt apply चलाने से पहले इन्हें सेट करें।

चरडिफ़ॉल्टसेवा
ENABLE_ALB_CONTROLLERtrueAWS Load Balancer Controller
ENABLE_AWS_SERVICESfalseElastiCache Redis + Amazon MQ RabbitMQ
ENABLE_CNPGfalseCloudNativePG operator
ENABLE_HA_SUPABASE_DBfalseHA PostgreSQL क्लस्टर (ENABLE_CNPG=true आवश्यक)
ENABLE_SUPABASEfalseपूर्ण Supabase स्टैक (ENABLE_HA_SUPABASE_DB=true आवश्यक)
ENABLE_SIGNOZfalseSigNoz अवलोकन + k8s-infra agent
जानकारी

Supabase सेल्फ़-होस्टेड तैनाती क्रम

Supabase घटकों को क्रम में तैनात किया जाना चाहिए:

ENABLE_CNPG=true terragrunt apply --target='helm_release.local["cloudnative-pg"]'
ENABLE_HA_SUPABASE_DB=true terragrunt apply --target='helm_release.local["ha-supabase-db"]'
ENABLE_SUPABASE=true terragrunt apply --target='helm_release.local["supabase"]'

Helm Charts संदर्भ​

Chart (helm-deployment/ में)Namespaceद्वारा सक्षमविवरण
infrastructureinfrastructureहमेशाAWS Load Balancer Controller
odin-services/odin-servicesdefaultहमेशाWeb, FastAPI, Celery, Automator, Ingress
aws-ebs-csi-driver (upstream)kube-systemहमेशाEBS स्थायी volume driver
keda (upstream)kedaहमेशाPod autoscaling
cloudnative-pgcnpg-systemENABLE_CNPGPostgreSQL operator
ha-supabase-dbha-supabase-dbENABLE_HA_SUPABASE_DBHA Postgres + PgBouncer + barman backups
supabase-kubernetes-hasupabaseENABLE_SUPABASEKong, Auth, Storage, Studio, Realtime
signozmonitoringENABLE_SIGNOZवितरित tracing, मेट्रिक्स, लॉग्स
k8s-infra (upstream)monitoringENABLE_SIGNOZक्लस्टर मेट्रिक्स DaemonSet agent

मॉड्यूल्स संदर्भ​

modules/eks​

प्राथमिक मॉड्यूल। प्रोविज़न करता है:

  • 3 AZs में पब्लिक/प्राइवेट सबनेट्स के साथ VPC
  • EKS क्लस्टर (Kubernetes 1.33) और Karpenter के लिए managed node group
  • Karpenter controller + NodePool + EC2NodeClass
  • IAM भूमिकाएँ (क्लस्टर, node group, Karpenter, ALB controller, EBS CSI driver)
  • helm_releases इनपुट map के माध्यम से सभी Helm releases

modules/aws-services​

ElastiCache Redis और Amazon MQ RabbitMQ प्रोविज़न करता है। केवल ENABLE_AWS_SERVICES=true होने पर सक्रिय।

modules/state​

नए वातावरण के लिए S3 स्टेट bucket बूटस्ट्रैप करता है (वर्शनिंग, एन्क्रिप्शन, पब्लिक एक्सेस ब्लॉक)।

modules/helm​

पुन: प्रयोग योग्य Helm release मॉड्यूल जो upstream chart repositories और स्थानीय chart_path charts दोनों का समर्थन करता है।


वातावरण कॉन्फ़िगरेशन​

Placeholders​

env-template-folder में हर वातावरण-विशिष्ट मान <YOUR_*> placeholder का उपयोग करता है। तैनाती से पहले कुछ भी शेष न रहने की जाँच के लिए निम्नलिखित चलाएँ:

grep -r "<YOUR_" terragrunt/environments/your-env-name/

रिमोट स्टेट​

स्टेट प्रति वातावरण S3 में संग्रहीत है। bucket को state/terragrunt.hcl द्वारा बूटस्ट्रैप किया जाता है और root.hcl द्वारा संदर्भित किया जाता है। नामकरण पैटर्न ekb-terraform-state-<env-name> है।

Secrets​

warning

संवेदनशील मान (पासवर्ड, API keys, प्रमाणपत्र ARNs) कभी कमिट नहीं किए जाते। इन्हें वातावरण चरों के रूप में पास किया जाता है जिन्हें terragrunt.hcl में get_env() कॉल्स द्वारा उपभोग किया जाता है, या values फ़ाइलों में <YOUR_*> placeholders के रूप में जिन्हें तैनाती से पहले भरा जाना चाहिए।


समस्या निवारण​

AWS credentials सत्यापित करें

aws sts get-caller-identity

क्लस्टर पहुँच जाँचें

aws eks update-kubeconfig --region <region> --name <cluster-name>
kubectl get nodes
kubectl get pods -A

ALB Controller जाँचें

kubectl get pods -n infrastructure | grep aws-load-balancer-controller
kubectl get ingress -A

Karpenter जाँचें

kubectl get pods -n kube-system | grep karpenter
kubectl get nodepools
kubectl get nodeclaims

स्टेट लॉक जाँचें

# अटके हुए स्टेट को फ़ोर्स-अनलॉक करें (त्रुटि संदेश से lock ID का उपयोग करें)
cd terragrunt/environments/your-env-name
terragrunt force-unlock <lock-id>

शेष placeholders की जाँच करें

grep -r "<YOUR_" terragrunt/environments/your-env-name/

Helm release स्थिति जाँचें

helm list -A
helm status <release-name> -n <namespace>
helm get values <release-name> -n <namespace>

Multi-Cloud समर्थन (योजनाबद्ध)​

प्लेटफ़ॉर्मस्थितिमॉड्यूल
AWS EKSसक्रियmodules/eks
Azure AKSStubmodules/aks
Google GKEStubmodules/gke
Bare metalStubmodules/baremetal