यह लेख 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_CONTROLLER | true | AWS Load Balancer Controller |
ENABLE_AWS_SERVICES | false | ElastiCache Redis + Amazon MQ RabbitMQ |
ENABLE_CNPG | false | CloudNativePG operator |
ENABLE_HA_SUPABASE_DB | false | HA PostgreSQL क्लस्टर (ENABLE_CNPG=true आवश्यक) |
ENABLE_SUPABASE | false | पूर्ण Supabase स्टैक (ENABLE_HA_SUPABASE_DB=true आवश्यक) |
ENABLE_SIGNOZ | false | SigNoz अवलोकन + 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 | द्वारा सक्षम | विवरण |
|---|
infrastructure | infrastructure | हमेशा | AWS Load Balancer Controller |
odin-services/odin-services | default | हमेशा | Web, FastAPI, Celery, Automator, Ingress |
aws-ebs-csi-driver (upstream) | kube-system | हमेशा | EBS स्थायी volume driver |
keda (upstream) | keda | हमेशा | Pod autoscaling |
cloudnative-pg | cnpg-system | ENABLE_CNPG | PostgreSQL operator |
ha-supabase-db | ha-supabase-db | ENABLE_HA_SUPABASE_DB | HA Postgres + PgBouncer + barman backups |
supabase-kubernetes-ha | supabase | ENABLE_SUPABASE | Kong, Auth, Storage, Studio, Realtime |
signoz | monitoring | ENABLE_SIGNOZ | वितरित tracing, मेट्रिक्स, लॉग्स |
k8s-infra (upstream) | monitoring | ENABLE_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 AKS | Stub | modules/aks |
| Google GKE | Stub | modules/gke |
| Bare metal | Stub | modules/baremetal |