मुख्य सामग्री पर जाएं
यह लेख 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

संवेदनशील मान (पासवर्ड, 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