Skip to content

Smallt0wn/PitterPetter_Infra

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

27 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

PitterPetter Infrastructure

PitterPetter ํ”„๋กœ์ ํŠธ์˜ GCP ๊ธฐ๋ฐ˜ Kubernetes ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜๋ฅผ Terraform์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.
GitOps ๊ธฐ๋ฐ˜์˜ ํ˜„๋Œ€์ ์ธ CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”(ํ”„๋กœํ† ํƒ€์ž…)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        PitterPetter Infrastructure              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  ๐ŸŒ Internet                                                    โ”‚
โ”‚       โ”‚                                                         โ”‚
โ”‚       โ–ผ                                                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”‚
โ”‚  โ”‚              GCP Load Balancer                          โ”‚    โ”‚
โ”‚  โ”‚              (34.64.212.163)                           โ”‚    โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚
โ”‚       โ”‚                                                         โ”‚
โ”‚       โ–ผ                                                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”‚
โ”‚  โ”‚              Nginx Ingress Controller                   โ”‚    โ”‚
โ”‚  โ”‚              (ingress-nginx)                           โ”‚    โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚
โ”‚       โ”‚                                                         โ”‚
โ”‚       โ”œโ”€โ”€ argocd.pitterpetter.com โ”€โ”€โ–บ ArgoCD (GitOps)         โ”‚
โ”‚       โ”œโ”€โ”€ workflows.pitterpetter.com โ–บ Argo Workflows          โ”‚
โ”‚       โ”œโ”€โ”€ rollouts.pitterpetter.com โ–บ Argo Rollouts            โ”‚
โ”‚       โ””โ”€โ”€ api.loventure.us โ”€โ”€โ”€โ”€โ”€โ–บ Microservices                โ”‚
โ”‚           โ”œโ”€โ”€ /api/auth โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Auth Service                 โ”‚
โ”‚           โ”œโ”€โ”€ /api/course โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Course Service               โ”‚
โ”‚           โ””โ”€โ”€ /api/diaries โ”€โ”€โ”€โ”€โ”€โ–บ Content Service              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

PitterPetter_Infra/
โ”œโ”€โ”€ ๐Ÿ“‹ Core Infrastructure
โ”‚   โ”œโ”€โ”€ main.tf                    # ํ•ต์‹ฌ ์ธํ”„๋ผ (VPC, ์„œ๋ธŒ๋„ท, GKE ํด๋Ÿฌ์Šคํ„ฐ)
โ”‚   โ”œโ”€โ”€ gke.tf                    # GKE ๋…ธ๋“œ ํ’€ ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ ์„ธ๋ถ€ ์„ค์ •
โ”‚   โ”œโ”€โ”€ networking.tf              # ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ (๋ฐฉํ™”๋ฒฝ, NAT Gateway)
โ”‚   โ””โ”€โ”€ providers.tf              # Terraform Provider ์„ค์ •
โ”‚
โ”œโ”€โ”€ ๐ŸŒ Ingress & SSL
โ”‚   โ”œโ”€โ”€ ingress.tf                # Nginx Ingress Controller + API ๋ผ์šฐํŒ…
โ”‚   โ”œโ”€โ”€ swagger_ingress.tf        # Swagger UI Ingress ์„ค์ •
โ”‚   โ””โ”€โ”€ ssl_files/                # SSL ์ธ์ฆ์„œ ํŒŒ์ผ๋“ค
โ”‚
โ”œโ”€โ”€ ๐Ÿš€ GitOps & CI/CD
โ”‚   โ”œโ”€โ”€ argocd.tf                 # ArgoCD (GitOps ๋ฐฐํฌ)
โ”‚   โ”œโ”€โ”€ workflows.tf              # Argo Workflows (์›Œํฌํ”Œ๋กœ์šฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜)
โ”‚   โ””โ”€โ”€ rollouts.tf               # Argo Rollouts (๊ณ ๊ธ‰ ๋ฐฐํฌ ์ „๋žต)
โ”‚
โ”œโ”€โ”€ ๐Ÿ“Š Monitoring & Observability
โ”‚   โ”œโ”€โ”€ gmp.tf                    # Google Managed Prometheus ์„ค์ •
โ”‚   โ””โ”€โ”€ gmp_dashboard.tf          # GMP ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์„ฑ
โ”‚
โ”œโ”€โ”€ โš™๏ธ Configuration
โ”‚   โ”œโ”€โ”€ variables.tf              # ๋ชจ๋“  ๋ณ€์ˆ˜ ์ •์˜ (์ •๋ฆฌ๋จ)
โ”‚   โ”œโ”€โ”€ outputs.tf                # ์ถœ๋ ฅ๊ฐ’ ์ •์˜ (ํ–ฅ์ƒ๋จ)
โ”‚   โ””โ”€โ”€ backend.tf                # Terraform State ๋ฐฑ์—”๋“œ ์„ค์ •
โ”‚
โ”œโ”€โ”€ ๐ŸŒ Environment Configs
โ”‚   โ”œโ”€โ”€ env/
โ”‚   โ”‚   โ”œโ”€โ”€ dev.tfvars           # ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ค์ • (4-8๋…ธ๋“œ, e2-standard-2)
โ”‚   โ”‚   โ””โ”€โ”€ prod.tfvars          # ์šด์˜ํ™˜๊ฒฝ ์„ค์ • (4-8๋…ธ๋“œ, e2-standard-2)
โ”‚
โ”œโ”€โ”€ ๐Ÿ› ๏ธ Scripts & Tools
โ”‚   โ””โ”€โ”€ scripts/
โ”‚       โ””โ”€โ”€ cleanup.sh           # ์ธํ”„๋ผ ์ •๋ฆฌ ์Šคํฌ๋ฆฝํŠธ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“š Documentation
โ”‚   โ”œโ”€โ”€ docs/
โ”‚   โ”‚   โ”œโ”€โ”€ QUICKSTART.md        # 5๋ถ„ ๋น ๋ฅธ ์‹œ์ž‘ ๊ฐ€์ด๋“œ
โ”‚   โ”‚   โ”œโ”€โ”€ INGRESS_GUIDE.md     # Ingress Controller ์ƒ์„ธ ๊ฐ€์ด๋“œ
โ”‚   โ”‚   โ””โ”€โ”€ GMP_MONITORING_GUIDE.md # GMP ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ€์ด๋“œ
โ”‚   โ””โ”€โ”€ README.md               # ์ด ํŒŒ์ผ

๐Ÿ› ๏ธ ์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

ํ•„์ˆ˜ ๋„๊ตฌ ์„ค์น˜

# 1. Terraform ์„ค์น˜ (v1.5+)
# macOS
brew install terraform

# Linux
wget https://releases.hashicorp.com/terraform/1.6.0/terraform_1.6.0_linux_amd64.zip
unzip terraform_1.6.0_linux_amd64.zip
sudo mv terraform /usr/local/bin/

# 2. Google Cloud CLI ์„ค์น˜
# macOS
brew install google-cloud-sdk

# Linux
curl https://sdk.cloud.google.com | bash
exec -l $SHELL

# 3. kubectl ์„ค์น˜
# macOS
brew install kubectl

# Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# 4. Helm ์„ค์น˜
# macOS
brew install helm

# Linux
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

GCP ํ”„๋กœ์ ํŠธ ์„ค์ •

# 1. GCP ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™”
gcloud projects create pitterpetter --name="PitterPetter"
gcloud config set project pitterpetter

# 2. ํ•„์š”ํ•œ API ํ™œ์„ฑํ™”
gcloud services enable container.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable storage.googleapis.com
gcloud services enable iam.googleapis.com

# 3. GCP ์ธ์ฆ
gcloud auth login
gcloud auth application-default login

# 4. ์„œ๋น„์Šค ๊ณ„์ • ์ƒ์„ฑ (์„ ํƒ์‚ฌํ•ญ)
gcloud iam service-accounts create terraform-sa \
    --display-name="Terraform Service Account" \
    --description="Service account for Terraform operations"

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

1. ์ €์žฅ์†Œ ํด๋ก 

git clone <https://github.com/PitterPetter/PitterPetter_Infra.gitl>
cd PitterPetter_Infra

2. ์ธํ”„๋ผ ๋ฐฐํฌ

๊ฐœ๋ฐœํ™˜๊ฒฝ ๋ฐฐํฌ

terraform init
terraform plan -var-file="env/dev.tfvars"
terraform apply -var-file="env/dev.tfvars"

์šด์˜ํ™˜๊ฒฝ ๋ฐฐํฌ

terraform init
terraform plan -var-file="env/prod.tfvars"
terraform apply -var-file="env/prod.tfvars"

3. ์ธํ”„๋ผ ์ƒํƒœ ํ™•์ธ

# ์ „์ฒด ์ธํ”„๋ผ ์š”์•ฝ ์ •๋ณด
terraform output infrastructure_summary

# ๋น ๋ฅธ ์ ‘๊ทผ ๋ช…๋ น์–ด๋“ค
terraform output quick_access_commands

# ํŠน์ • ์„œ๋น„์Šค ์ •๋ณด
terraform output argocd_url
terraform output ssl_domain_name

4. ํด๋Ÿฌ์Šคํ„ฐ ์—ฐ๊ฒฐ

# GKE ํด๋Ÿฌ์Šคํ„ฐ ์ธ์ฆ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
gcloud container clusters get-credentials pitterpetter-dev-cluster \
    --region asia-northeast3 \
    --project pitterpetter

# ํด๋Ÿฌ์Šคํ„ฐ ์—ฐ๊ฒฐ ํ™•์ธ
kubectl get nodes
kubectl get namespaces

5. ์„œ๋น„์Šค ์ ‘์†

ArgoCD ์ ‘์†

# ํฌํŠธ ํฌ์›Œ๋”ฉ
kubectl port-forward svc/argocd-server -n argocd 8080:443

# ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ ‘์†
# https://localhost:8080
# ์‚ฌ์šฉ์ž๋ช…: admin
# ๋น„๋ฐ€๋ฒˆํ˜ธ: dev-admin123! (๊ฐœ๋ฐœํ™˜๊ฒฝ)

Argo Workflows ์ ‘์†

# ํฌํŠธ ํฌ์›Œ๋”ฉ
kubectl port-forward svc/argo-workflows-server -n argo 2746:2746

# ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ ‘์†
# https://localhost:2746

Argo Rollouts ์ ‘์†

# ํฌํŠธ ํฌ์›Œ๋”ฉ
kubectl port-forward svc/argo-rollouts-dashboard -n argo-rollouts 3100:3100

# ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ ‘์†
# https://localhost:3100

๐Ÿ—๏ธ ์ธํ”„๋ผ ๊ตฌ์„ฑ ์š”์†Œ

๐ŸŽฏ ํ•ต์‹ฌ ์ธํ”„๋ผ

  • Google Kubernetes Engine (GKE): ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
    • ํด๋Ÿฌ์Šคํ„ฐ: pitterpetter-dev-cluster (asia-northeast3-b)
    • ๋…ธ๋“œ ํ’€: pitterpetter-nodes (4๊ฐœ ๋…ธ๋“œ, e2-standard-2)
    • ์ž๋™ ์Šค์ผ€์ผ๋ง: 4-8๊ฐœ ๋…ธ๋“œ
  • Virtual Private Cloud (VPC): ๋„คํŠธ์›Œํฌ ๊ฒฉ๋ฆฌ ๋ฐ ๋ณด์•ˆ
    • VPC: pitterpetter-dev-vpc
    • ์„œ๋ธŒ๋„ท: pitterpetter-dev-subnet (10.0.0.0/24)
  • Cloud NAT: ์•„์›ƒ๋ฐ”์šด๋“œ ์ธํ„ฐ๋„ท ์ ‘๊ทผ
  • Load Balancer: ๊ณ ์ • IP (34.64.212.163)

๐Ÿš€ GitOps ๋ฐ CI/CD

  • ArgoCD: GitOps ๊ธฐ๋ฐ˜ ์ง€์†์  ๋ฐฐํฌ
    • ๋„ค์ž„์ŠคํŽ˜์ด์Šค: argocd
    • ์ ‘์†: https://34.64.212.163 (Host: argo.loventure.us)
  • Argo Workflows: ์›Œํฌํ”Œ๋กœ์šฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
    • ๋„ค์ž„์ŠคํŽ˜์ด์Šค: argo
    • ์ ‘์†: https://34.64.212.163 (Host: workflows.loventure.us)
  • Argo Rollouts: ๊ณ ๊ธ‰ ๋ฐฐํฌ ์ „๋žต (Blue-Green, Canary)
    • ๋„ค์ž„์ŠคํŽ˜์ด์Šค: argo-rollouts
    • ์ ‘์†: https://34.64.212.163 (Host: rollouts.loventure.us)

๐ŸŒ API ์„œ๋น„์Šค (๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค)

  • Auth Service: ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ด€๋ฆฌ
    • ์—”๋“œํฌ์ธํŠธ: https://api.loventure.us/api/auth/*
    • ํฌํŠธ: 8081
  • Course Service: ์ฝ”์Šค ๊ด€๋ฆฌ
    • ์—”๋“œํฌ์ธํŠธ: https://api.loventure.us/api/course/*
    • ํฌํŠธ: 8083
  • Content Service: ์ฝ˜ํ…์ธ  ๊ด€๋ฆฌ (์ผ๊ธฐ ๋“ฑ)
    • ์—”๋“œํฌ์ธํŠธ: https://api.loventure.us/api/diaries/*
    • ํฌํŠธ: 8082

๐Ÿ”’ ๋ณด์•ˆ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

  • SSL/TLS: GCP SSL ์ธ์ฆ์„œ (pitterpetter-ssl)
  • Nginx Ingress Controller: ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ๋ฐ SSL ์ข…๋ฃŒ
  • Cloud Logging: ์ค‘์•™ํ™”๋œ ๋กœ๊ทธ ๊ด€๋ฆฌ
  • Google Managed Prometheus (GMP): ์™„์ „ ๊ด€๋ฆฌํ˜• ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘
    • PodMonitoring: 8๊ฐœ ์„œ๋น„์Šค ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ + ELK)
    • Alert Rules: 10๊ฐœ ์•Œ๋ฆผ ๊ทœ์น™ (ํ•ต์‹ฌ ์„œ๋น„์Šค, ์ธํ”„๋ผ, ELK)
    • ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ๊ฐ„๊ฒฉ: 30์ดˆ
    • ๊ณตํ†ต ๋ผ๋ฒจ๋ง: cluster, environment, project, service, type
  • Firewall Rules: ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ ์ •์ฑ…

๐Ÿ“Š Google Managed Prometheus (GMP) ๋ชจ๋‹ˆํ„ฐ๋ง

๋ชจ๋‹ˆํ„ฐ๋ง ๊ตฌ์„ฑ

  • PodMonitoring ๋ฆฌ์†Œ์Šค: 5๊ฐœ (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค)
  • ๋Œ€์‹œ๋ณด๋“œ: Google Cloud Monitoring (5๊ฐœ ์œ„์ ฏ)
  • ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘: 30์ดˆ ๊ฐ„๊ฒฉ, HTTP ์Šคํ‚ค๋งˆ
  • ๋Œ€์ƒ ์„œ๋น„์Šค: Gateway, Auth, Content, Course, AI

๋Œ€์‹œ๋ณด๋“œ ์œ„์ ฏ

  • CPU ์‚ฌ์šฉ๋ฅ : kubernetes.io/container/cpu/core_usage_time
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ : kubernetes.io/container/memory/used_bytes
  • ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ: ์ˆ˜์‹ /์†ก์‹  ๋ฐ”์ดํŠธ ์นด์šดํŠธ
  • Container ์žฌ์‹œ์ž‘: kubernetes.io/container/restart_count

๐Ÿ’ก ์ž์„ธํ•œ ์„ค์ •: GMP_MONITORING_GUIDE.md ์ฐธ์กฐ

๐Ÿ”ง ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ

์ผ์ƒ์ ์ธ ๊ฐœ๋ฐœ ์ž‘์—…

# 1. ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ณ„ํš ํ™•์ธ
terraform plan -var-file="env/dev.tfvars"

# 2. ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ
terraform apply -var-file="env/dev.tfvars"

# 3. ์ƒํƒœ ํ™•์ธ
terraform show
terraform output

# 4. ์ธํ”„๋ผ ์š”์•ฝ ํ™•์ธ
terraform output infrastructure_summary

์ƒˆ๋กœ์šด ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ถ”๊ฐ€

  1. variables.tf์— ๋ณ€์ˆ˜ ์ •์˜ (๊ธฐ๋ณธ๊ฐ’ ์ œ๊ฑฐ ๊ถŒ์žฅ)
  2. env/dev.tfvars์— ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ฐ’ ์„ค์ •
  3. env/prod.tfvars์— ์šด์˜ํ™˜๊ฒฝ ๊ฐ’ ์„ค์ •
  4. ์ฝ”๋“œ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค ์ถ”๊ฐ€

  1. ์ ์ ˆํ•œ .tf ํŒŒ์ผ์— ๋ฆฌ์†Œ์Šค ์ •์˜
  2. outputs.tf์— ํ•„์š”ํ•œ ์ถœ๋ ฅ๊ฐ’ ์ถ”๊ฐ€
  3. terraform plan์œผ๋กœ ๊ณ„ํš ํ™•์ธ
  4. terraform apply๋กœ ์ ์šฉ

๐Ÿ†• ์ตœ๊ทผ ์—…๋ฐ์ดํŠธ (v2.1)

โœจ ์ฃผ์š” ๊ฐœ์„ ์‚ฌํ•ญ

  • ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๋ถ„๋ฆฌ: env/ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ํ™˜๊ฒฝ๋ณ„ ๋ณ€์ˆ˜ ๊ด€๋ฆฌ
  • ๋ณ€์ˆ˜ ์ •๋ฆฌ: ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์ œ๊ฑฐ ๋ฐ ์ตœ์ ํ™”
  • Output ํ–ฅ์ƒ: ์ธํ”„๋ผ ์š”์•ฝ ์ •๋ณด ๋ฐ ๋น ๋ฅธ ์ ‘๊ทผ ๋ช…๋ น์–ด ์ถ”๊ฐ€
  • ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ•ํ™”: GMP ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ์ƒ์„ธ ๋ชจ๋‹ˆํ„ฐ๋ง ์„ค์ •
  • Swagger UI: API ๋ฌธ์„œํ™”๋ฅผ ์œ„ํ•œ Swagger UI Ingress ์ถ”๊ฐ€
  • ์ธํ”„๋ผ ์•ˆ์ •์„ฑ: GKE ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ ๋„คํŠธ์›Œํ‚น ๊ตฌ์„ฑ ์ตœ์ ํ™”
  • ๋ณด์•ˆ ๊ฐ•ํ™”: ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ๋ฐ SSL ์ธ์ฆ์„œ ๊ด€๋ฆฌ ๊ฐœ์„ 

๐Ÿ”ง ์„ค์ • ๋ณ€๊ฒฝ์‚ฌํ•ญ

  • variables.tf: ๋ถˆํ•„์š”ํ•œ ๋ณ€์ˆ˜ ์ œ๊ฑฐ, ์ฝ”๋“œ ์ •๋ฆฌ
  • outputs.tf: infrastructure_summary, quick_access_commands ์ถ”๊ฐ€
  • env/: ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ํŒŒ์ผ ๋ถ„๋ฆฌ (dev.tfvars, prod.tfvars)
  • gmp_dashboard.tf: ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ ์ถ”๊ฐ€
  • gke.tf: GKE ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ • ์ตœ์ ํ™”
  • ingress.tf: Ingress Controller ๋ฐ ๋ผ์šฐํŒ… ๊ทœ์น™ ๊ฐœ์„ 
  • networking.tf: ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ ์ •์ฑ… ๊ฐ•ํ™”
  • argocd.tf: ArgoCD ๋ฐฐํฌ ์„ค์ • ๊ฐœ์„ 

๐ŸŒ ์„œ๋น„์Šค ์ ‘์† ๋ฐฉ๋ฒ•

๐Ÿš€ ArgoCD (GitOps ๋ฐฐํฌ ๊ด€๋ฆฌ)

์ ‘์† ์ •๋ณด:

  • URL: https://34.64.212.163 (Host: argo.loventure.us)
  • ์‚ฌ์šฉ์ž๋ช…: admin
  • ๋น„๋ฐ€๋ฒˆํ˜ธ: dev-admin123!

์ ‘์† ๋ฐฉ๋ฒ•:

  1. ๋ธŒ๋ผ์šฐ์ € ์ ‘์† (๊ถŒ์žฅ):
    # ๋ธŒ๋ผ์šฐ์ €์—์„œ https://34.64.212.163 ์ ‘์†
    # Host ํ—ค๋”๋ฅผ argo.loventure.us๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜
    # curl๋กœ ํ…Œ์ŠคํŠธ: curl -H "Host: argo.loventure.us" -k https://34.64.212.163
    • ๋ณด์•ˆ ๊ฒฝ๊ณ ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด "๊ณ ๊ธ‰" โ†’ "์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์‚ฌ์ดํŠธ๋กœ ์ด๋™" ํด๋ฆญ

๐Ÿ”„ Argo Workflows (์›Œํฌํ”Œ๋กœ์šฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜)

์ ‘์† ์ •๋ณด:

  • URL: https://34.64.212.163 (Host: workflows.loventure.us)
  • Port Forward: kubectl port-forward svc/argo-workflows-server -n argo 2746:2746

๐ŸŽฏ Argo Rollouts (๊ณ ๊ธ‰ ๋ฐฐํฌ ์ „๋žต)

์ ‘์† ์ •๋ณด:

  • URL: https://34.64.212.163 (Host: rollouts.loventure.us)
  • Port Forward: kubectl port-forward svc/argo-rollouts-dashboard -n argo-rollouts 3100:3100

๐ŸŒ API ์„œ๋น„์Šค (๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค)

๊ธฐ๋ณธ URL: https://api.loventure.us

์„œ๋น„์Šค๋ณ„ ์—”๋“œํฌ์ธํŠธ:

# Auth Service (์‚ฌ์šฉ์ž ์ธ์ฆ)
curl -k https://api.loventure.us/api/auth/health
curl -k https://api.loventure.us/oauth2/authorize

# Course Service (์ฝ”์Šค ๊ด€๋ฆฌ)
curl -k https://api.loventure.us/api/course/health
curl -k https://api.loventure.us/api/course/courses

# Content Service (์ผ๊ธฐ ๊ด€๋ฆฌ)
curl -k https://api.loventure.us/api/diaries/health
curl -k https://api.loventure.us/api/diaries/diaries

๐Ÿ“š Swagger UI (API ๋ฌธ์„œํ™”)

Swagger UI ์ ‘์†:

  • Auth Service: https://swagger-auth.loventure.us
  • Content Service (Diaries): https://swagger-diaries.loventure.us
  • Course Service: https://swagger-courses.loventure.us

Swagger UI ์ƒํƒœ ํ™•์ธ:

# ๋ชจ๋“  Swagger Ingress ํ™•์ธ
kubectl get ingress -n loventure-app | grep swagger

# ํŠน์ • Swagger UI ํ…Œ์ŠคํŠธ
curl -H "Host: swagger-auth.loventure.us" -k https://34.64.212.163

๐Ÿ” ์‹œ์Šคํ…œ ์ƒํƒœ ํ™•์ธ

# Ingress Controller ์ƒํƒœ
kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginx

# ๋ชจ๋“  Ingress ํ™•์ธ
kubectl get ingress -A

# ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
kubectl get pods -n loventure-app
kubectl get svc -n loventure-app

๐Ÿ“Š Google Managed Prometheus (GMP) ๋ชจ๋‹ˆํ„ฐ๋ง

Cloud Monitoring URL: https://console.cloud.google.com/monitoring

GMP ์ƒํƒœ ํ™•์ธ:

# GMP Operator ์ƒํƒœ
kubectl get pods -n gmp-system

# PodMonitoring ๋ฆฌ์†Œ์Šค ํ™•์ธ
kubectl get podmonitorings -A

# ๋Œ€์‹œ๋ณด๋“œ ํ™•์ธ
# Google Cloud Console > Monitoring > Dashboards > "PitterPetter GMP Dashboard"

# ClusterPodMonitoring ํ™•์ธ
kubectl get clusterpodmonitorings

๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ํ™•์ธ:

# ํŠน์ • ์„œ๋น„์Šค ๋ฉ”ํŠธ๋ฆญ ํ™•์ธ
kubectl describe podmonitoring gateway-podmonitoring

# ์•Œ๋ฆผ ์ •์ฑ… ํ™•์ธ
kubectl describe rules <rule-name>

Cloud Monitoring์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”ํŠธ๋ฆญ:

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฉ”ํŠธ๋ฆญ: CPU, ๋ฉ”๋ชจ๋ฆฌ, ์‘๋‹ต ์‹œ๊ฐ„, ์š”์ฒญ ์ˆ˜
  • ELK ์Šคํƒ ๋ฉ”ํŠธ๋ฆญ: Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ, ๋กœ๊ทธ ์ฒ˜๋ฆฌ๋Ÿ‰
  • ์ธํ”„๋ผ ๋ฉ”ํŠธ๋ฆญ: ๋…ธ๋“œ ์ƒํƒœ, ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰, ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ

๐Ÿงน ์ธํ”„๋ผ ์ •๋ฆฌ

์ž๋™ ์ •๋ฆฌ (๊ถŒ์žฅ)

# cleanup.sh ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
chmod +x scripts/cleanup.sh
./scripts/cleanup.sh

์ˆ˜๋™ ์ •๋ฆฌ

# 1. Kubernetes ๋ฆฌ์†Œ์Šค ์ •๋ฆฌ
kubectl delete namespace argocd --force --grace-period=0
kubectl delete namespace argo --force --grace-period=0
kubectl delete namespace argo-rollouts --force --grace-period=0

# 2. Terraform destroy
terraform destroy -var-file="env/dev.tfvars" -auto-approve

๐Ÿšจ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ

๐Ÿ”ง ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค

1. GCP ์ธ์ฆ ์˜ค๋ฅ˜

# ๋ฌธ์ œ: Authentication error
# ํ•ด๊ฒฐ: GCP ์ธ์ฆ ์žฌ์„ค์ •
gcloud auth login
gcloud auth application-default login
gcloud config set project pitterpetter

# ์ถ”๊ฐ€ ํ™•์ธ
gcloud auth list
gcloud config get-value project

2. Terraform Provider ์˜ค๋ฅ˜

# ๋ฌธ์ œ: Provider not found
# ํ•ด๊ฒฐ: Terraform ์ดˆ๊ธฐํ™”
terraform init -upgrade
terraform providers

# ๋ฐฑ์—”๋“œ ๋ฌธ์ œ ์‹œ
terraform init -reconfigure

3. Kubernetes ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์‚ญ์ œ ํƒ€์ž„์•„์›ƒ

# ๋ฌธ์ œ: Namespace stuck in Terminating state
# ํ•ด๊ฒฐ: ๊ฐ•์ œ ์‚ญ์ œ
kubectl delete namespace argocd --force --grace-period=0
kubectl delete namespace argo --force --grace-period=0
kubectl delete namespace argo-rollouts --force --grace-period=0
kubectl delete namespace loventure-app --force --grace-period=0

# Finalizers ์ œ๊ฑฐ (ํ•„์š”์‹œ)
kubectl patch namespace argocd -p '{"metadata":{"finalizers":null}}' --type=merge

4. GKE ํด๋Ÿฌ์Šคํ„ฐ ์‚ญ์ œ ์ง€์—ฐ

# ๋ฌธ์ œ: Cluster deletion timeout
# ํ•ด๊ฒฐ: ์ˆ˜๋™ ์‚ญ์ œ
gcloud container clusters delete pitterpetter-dev-cluster \
    --zone asia-northeast3-b \
    --project=pitterpetter --quiet

# Terraform State์—์„œ ์ œ๊ฑฐ
terraform state rm google_container_cluster.primary

5. Terraform State ๋ถˆ์ผ์น˜

# ๋ฌธ์ œ: State drift
# ํ•ด๊ฒฐ: State ์ƒˆ๋กœ๊ณ ์นจ
terraform refresh -var-file="env/dev.tfvars"
terraform plan -var-file="env/dev.tfvars"

# ํŠน์ • ๋ฆฌ์†Œ์Šค๋งŒ ์ƒˆ๋กœ๊ณ ์นจ
terraform refresh -target=google_container_cluster.primary

6. Ingress Controller ์ ‘์† ๋ถˆ๊ฐ€

# ๋ฌธ์ œ: 404 Not Found ๋˜๋Š” ์—ฐ๊ฒฐ ๋ถˆ๊ฐ€
# ํ•ด๊ฒฐ: Ingress Controller ์ƒํƒœ ํ™•์ธ
kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginx
kubectl describe pod -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx

# Ingress ๋ฆฌ์†Œ์Šค ํ™•์ธ
kubectl get ingress -A
kubectl describe ingress -n argocd argocd-ingress

7. ArgoCD ์ ‘์† ๋ถˆ๊ฐ€

# ๋ฌธ์ œ: ArgoCD ์›น UI ์ ‘์† ์•ˆ๋จ
# ํ•ด๊ฒฐ: ArgoCD ์ƒํƒœ ํ™•์ธ
kubectl get pods -n argocd
kubectl get svc -n argocd
kubectl logs -n argocd -l app.kubernetes.io/name=argocd-server

# ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d

8. API ์„œ๋น„์Šค 502/503 ์˜ค๋ฅ˜

# ๋ฌธ์ œ: API ์—”๋“œํฌ์ธํŠธ ์‘๋‹ต ์—†์Œ
# ํ•ด๊ฒฐ: ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
kubectl get pods -n loventure-app
kubectl get svc -n loventure-app
kubectl describe pod -n loventure-app -l app=auth-service

# ๋กœ๊ทธ ํ™•์ธ
kubectl logs -n loventure-app -l app=auth-service --tail=100

9. SSL ์ธ์ฆ์„œ ์˜ค๋ฅ˜

# ๋ฌธ์ œ: SSL ์ธ์ฆ์„œ ๊ด€๋ จ ์˜ค๋ฅ˜
# ํ•ด๊ฒฐ: ์ธ์ฆ์„œ ์ƒํƒœ ํ™•์ธ
gcloud compute ssl-certificates list
kubectl get secrets -n argocd | grep tls

# Ingress TLS ์„ค์ • ํ™•์ธ
kubectl describe ingress -n argocd argocd-ingress

10. CPU/๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์˜ค๋ฅ˜

# ๋ฌธ์ œ: Pod๊ฐ€ Pending ์ƒํƒœ ๋˜๋Š” OOMKilled
# ํ•ด๊ฒฐ: ๋ฆฌ์†Œ์Šค ํ™•์ธ ๋ฐ ์กฐ์ •
kubectl top nodes
kubectl top pods -A
kubectl describe node

# ๋…ธ๋“œ ์Šค์ผ€์ผ๋ง
kubectl scale deployment --replicas=1 -n argocd argocd-server

๋””๋ฒ„๊น… ๋ช…๋ น์–ด

# Terraform ์ƒํƒœ ํ™•์ธ
terraform show
terraform state list
terraform output

# GCP ๋ฆฌ์†Œ์Šค ํ™•์ธ
gcloud compute instances list
gcloud container clusters list
gcloud compute networks list

# Kubernetes ๋ฆฌ์†Œ์Šค ํ™•์ธ
kubectl get all --all-namespaces
kubectl describe nodes
kubectl logs -n argocd -l app.kubernetes.io/name=argocd

๐Ÿ’ฐ ๋น„์šฉ ์ตœ์ ํ™”

๐Ÿ’ก ํ˜„์žฌ ๋น„์šฉ ์ตœ์ ํ™” ์„ค์ •

๊ฐœ๋ฐœํ™˜๊ฒฝ (dev.tfvars):

  • ์„ ์ ํ˜• ์ธ์Šคํ„ด์Šค: node_preemptible = true (์ตœ๋Œ€ 80% ๋น„์šฉ ์ ˆ์•ฝ)
  • ๋จธ์‹  ํƒ€์ž…: e2-standard-2 (2 vCPU, 8GB RAM)
  • ๋…ธ๋“œ ์ˆ˜: 4๊ฐœ (์ž๋™ ์Šค์ผ€์ผ๋ง: 4-8๊ฐœ)
  • ์˜ˆ์ƒ ์›” ๋น„์šฉ: ~$50-80 (์„ ์ ํ˜• ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ ์‹œ)

์šด์˜ํ™˜๊ฒฝ (prod.tfvars):

  • ์ผ๋ฐ˜ ์ธ์Šคํ„ด์Šค: node_preemptible = false (์•ˆ์ •์„ฑ ์šฐ์„ )
  • ๋จธ์‹  ํƒ€์ž…: e2-standard-2 (2 vCPU, 8GB RAM)
  • ๋…ธ๋“œ ์ˆ˜: 4๊ฐœ (์ž๋™ ์Šค์ผ€์ผ๋ง: 4-6๊ฐœ)
  • ์˜ˆ์ƒ ์›” ๋น„์šฉ: ~$200-300

๐Ÿ“Š ๋น„์šฉ ๋ชจ๋‹ˆํ„ฐ๋ง

# GCP ๋น„์šฉ ํ™•์ธ
gcloud billing budgets list --billing-account=YOUR_BILLING_ACCOUNT

# ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
gcloud compute instances list --filter="status:RUNNING"
gcloud container clusters list

# ํŠน์ • ํ”„๋กœ์ ํŠธ ๋น„์šฉ ํ™•์ธ
gcloud billing accounts list
gcloud billing budgets list --billing-account=YOUR_BILLING_ACCOUNT_ID

๐Ÿš€ CI/CD ํ†ตํ•ฉ

GitHub Actions ์˜ˆ์‹œ

name: Deploy Infrastructure
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  terraform:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v2
      - name: Setup GCP
        uses: google-github-actions/setup-gcloud@v1
        with:
          service_account_key: ${{ secrets.GCP_SA_KEY }}
      - name: Terraform Init
        run: cd terraform && terraform init
      - name: Terraform Plan
        run: cd terraform && terraform plan -var-file="environments/dev.tfvars"
      - name: Terraform Apply
        if: github.ref == 'refs/heads/main'
        run: cd terraform && terraform apply -var-file="environments/dev.tfvars" -auto-approve

๐Ÿ“š ์ถ”๊ฐ€ ์ž๋ฃŒ

ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ

About

GCP, Terraform control

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • HCL 96.6%
  • Shell 3.4%