엔터프라이즈 GCP 배포 가이드 - Energent.ai

Energent.ai는 엔터프라이즈 사용자를 위한 복잡한 다중 애플리케이션 워크플로를 자동화하는 AI 기반 가상 데스크톱 에이전트를 제공합니다. 이 가이드는 GKE, 멀티 테넌트 디자인 및 엔터프라이즈급 보안 제어를 포함한 현대적인 클라우드 네이티브 아키텍처를 사용하여 Google Cloud Platform 배포 사양을 포괄적으로 제공합니다.

  • 문서 분류: 공개
  • 버전: 3.0
  • 최종 업데이트: 2025-05-28
  • 아키텍처: GCP GKE + 서버리스 하이브리드
  • 컴플라이언스: SOC 2, Google Cloud 보안 모범 사례

목차

  1. 아키텍처 개요
  2. GCP 인프라 요구 사항
  3. GKE 클러스터 사양
  4. 데이터 계층 아키텍처
  5. 서버리스 구성 요소
  6. 보안 및 컴플라이언스
  7. 네트워크 아키텍처
  8. CI/CD 파이프라인
  9. 모니터링 및 가시성
  10. 배포 프로세스
  11. 운영 및 유지보수
  12. 지원 및 문제 해결

1. 아키텍처 개요

1.1 클라우드 네이티브 멀티 테넌트 아키텍처

Energent.ai는 Google Cloud Platform에서 Kubernetes 오케스트레이션과 서버리스 구성 요소를 결합하여 최적의 성능과 비용 효율성을 제공하는 현대적이고 확장 가능한 아키텍처를 배포합니다.

┌──────────────────────────────────────────────────────────────────┐
│                        GCP 클라우드 환경                        │
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐   │
│  │   GKE 클러스터  │  │   서버리스      │  │   데이터 계층    │   │
│  │                 │  │                 │  │                 │   │
│  │ • 멀티 테넌트   │  │ • Functions 인증│  │ • Firestore     │   │
│  │ • n2-standard-4 │  │ • Functions 청구│  │ • Cloud Storage │   │
│  │ • 자동 확장     │  │ • API Gateway   │  │ • Filestore     │   │
│  │ • Flux GitOps   │  │ • Pub/Sub       │  │ • Secret Mgr    │   │
│  └─────────────────┘  └─────────────────┘  └─────────────────┘   │
│           │                     │                    │           │
│           └─────────────────────┼────────────────────┘           │
│                                 │                                │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │                    VPC 보안 경계                           │ │
│  │  • 프라이빗 서브넷 • Cloud NAT    • 방화벽 규칙            │ │
│  │  • IAP 터널       • VPC 엔드포인트 • 로드 밸런서          │ │
│  └─────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘

1.2 배포 모델

모델설명사용 사례SLA
멀티 테넌트 GKE네임스페이스 격리가 있는 공유 클러스터표준 엔터프라이즈 배포99.9%
전용 GKE단일 테넌트 클러스터높은 보안, 규제 준수99.95%
하이브리드 배포GKE + 고객 온프레미스 통합레거시 시스템 통합99.9%

2. GCP 인프라 요구 사항

2.1 최소 인프라 사양

구성 요소사양목적
GKE 클러스터 버전1.30+Kubernetes 오케스트레이션
노드 풀 인스턴스 유형n2-standard-4 (4 vCPU, 16 GB RAM)컴퓨팅 최적화 워크로드
최소 노드 구성테넌트당 1 vCPU, 2 GB RAM리소스 할당
영구 디스크100 GB SSD, 암호화됨Pod 영구 스토리지
Filestore기본, 암호화됨공유 파일 시스템
Cloud Storage표준, 버전 관리 활성화객체 스토리지
Firestore네이티브 모드, 정지 시 암호화메타데이터 및 구성

2.2 GCP 서비스 종속성

서비스목적구성
Google GKEKubernetes 오케스트레이션프라이빗 클러스터, 로깅 활성화
Compute Engine동적 노드 확장자동 확장, 선점 가능한 인스턴스
Cloud Load Balancing트래픽 분배SSL 종료, Cloud Armor
Cloud Functions서버리스 함수런타임: Python 3.11, VPC 커넥터
API GatewayAPI 관리속도 제한, 인증
Cloud Monitoring모니터링 및 로깅GKE 모니터링, 사용자 정의 메트릭
Secret Manager비밀 관리자동 회전, 암호화
Cloud KMS키 관리고객 관리 키, 자동 회전

3. GKE 클러스터 사양

3.1 클러스터 구성

# GKE 클러스터 Terraform 구성
resource "google_container_cluster" "energent_cluster" {
name     = "energent-production"
location = var.gcp_region

remove_default_node_pool = true
initial_node_count       = 1

network    = google_compute_network.vpc.name
subnetwork = google_compute_subnetwork.subnet.name

networking_mode = "VPC_NATIVE"
ip_allocation_policy {
cluster_secondary_range_name  = "k8s-pod-range"
services_secondary_range_name = "k8s-service-range"
}

private_cluster_config {
enable_private_nodes    = true
enable_private_endpoint = false
master_ipv4_cidr_block  = "172.16.0.0/28"
}

master_auth {
client_certificate_config {
issue_client_certificate = false
}
}

workload_identity_config {
workload_pool = "${var.project_id}.svc.id.goog"
}

addons_config {
gcp_filestore_csi_driver_config {
enabled = true
}

network_policy_config {
disabled = false
}
}

cluster_telemetry {
type = "ENABLED"
}

logging_config {
enable_components = [
"SYSTEM_COMPONENTS",
"WORKLOADS",
"API_SERVER"
]
}

monitoring_config {
enable_components = [
"SYSTEM_COMPONENTS",
"WORKLOADS"
]
}
}

3.2 노드 풀 구성

# 기본 노드 풀
resource "google_container_node_pool" "energent_nodes" {
name       = "energent-node-pool"
location   = var.gcp_region
cluster    = google_container_cluster.energent_cluster.name
node_count = 3

autoscaling {
min_node_count = 2
max_node_count = 20
}

node_config {
preemptible  = false
machine_type = "n2-standard-4"
disk_size_gb = 100
disk_type    = "pd-ssd"

service_account = google_service_account.gke_service_account.email
oauth_scopes = [
"https://www.googleapis.com/auth/logging.write",
"https://www.googleapis.com/auth/monitoring",
"https://www.googleapis.com/auth/cloud-platform"
]

workload_metadata_config {
mode = "GKE_METADATA"
}

labels = {
env = "production"
app = "energent-ai"
}

taint {
key    = "workload"
value  = "energent-ai"
effect = "NO_SCHEDULE"
}
}

management {
auto_repair  = true
auto_upgrade = true
}
}

3.3 멀티 테넌트 리소스 할당

테넌트 등급CPU 제한메모리 제한스토리지동시 워크플로
기본1 vCPU2 GB10 GB1
표준2 vCPU4 GB25 GB2
프리미엄4 vCPU8 GB50 GB4
엔터프라이즈8 vCPU16 GB100 GB8

4. 데이터 계층 아키텍처

4.1 스토리지 아키텍처

4.1.1 Cloud Storage 구성


# 클라우드 스토리지 버킷 객체 스토리지
resource "google_storage_bucket" "energent_storage" {
  name     = "energent-${var.environment}-storage-${random_id.bucket_suffix.hex}"
  location = var.gcp_region

  uniform_bucket_level_access = true

  versioning {
    enabled = true
  }

  encryption {
    default_kms_key_name = google_kms_crypto_key.storage_key.id
  }

  lifecycle_rule {
    condition {
      age = 90
    }
    action {
      type          = "SetStorageClass"
      storage_class = "NEARLINE"
    }
  }

  retention_policy {
    retention_period = 2592000  # 30일
  }

  labels = {
    environment = var.environment
    purpose     = "energent-object-storage"
  }
}

resource "google_storage_bucket_iam_member" "storage_admin" {
  bucket = google_storage_bucket.energent_storage.name
  role   = "roles/storage.admin"
  member = "serviceAccount:${google_service_account.gke_service_account.email}"
}

4.1.2 Firestore 구성

# 메타데이터 및 구성용 Firestore 데이터베이스
resource "google_firestore_database" "energent_metadata" {
  project     = var.project_id
  name        = "energent-metadata-${var.environment}"
  location_id = var.gcp_region
  type        = "FIRESTORE_NATIVE"

  concurrency_mode = "OPTIMISTIC"
  app_engine_integration_mode = "DISABLED"

  point_in_time_recovery_enablement = "POINT_IN_TIME_RECOVERY_ENABLED"
  delete_protection_state = "DELETE_PROTECTION_ENABLED"
}

# Firestore 보안 규칙
resource "google_firestore_database" "security_rules" {
  depends_on = [google_firestore_database.energent_metadata]

  # 보안 규칙 내용은 여기에 정의됩니다
  # 테넌트 분리 및 액세스 제어 구현
}

4.1.3 Filestore 공유 스토리지

# 공유 파일 시스템용 Filestore
resource "google_filestore_instance" "energent_shared" {
name     = "energent-shared-${var.environment}"
location = var.gcp_zone
tier     = "BASIC_HDD"

file_shares {
capacity_gb = 1024
name        = "energent-share"
}

networks {
network = google_compute_network.vpc.name
modes   = ["MODE_IPV4"]
}

labels = {
environment = var.environment
purpose     = "shared-storage"
}
}

5. 서버리스 구성 요소

5.1 클라우드 함수

5.1.1 인증 서비스

# 인증용 클라우드 함수
resource "google_cloudfunctions2_function" "auth_service" {
name     = "energent-auth-${var.environment}"
location = var.gcp_region

build_config {
runtime     = "python311"
entry_point = "auth_handler"
source {
storage_source {
bucket = google_storage_bucket.functions_source.name
object = google_storage_bucket_object.auth_source.name
}
}
}

service_config {
max_instance_count = 100
min_instance_count = 1
available_memory   = "512Mi"
timeout_seconds    = 60

environment_variables = {
FIRESTORE_PROJECT = var.project_id
SECRET_MANAGER_PROJECT = var.project_id
ENVIRONMENT = var.environment
}

vpc_connector = google_vpc_access_connector.connector.id
vpc_connector_egress_settings = "ALL_TRAFFIC"

service_account_email = google_service_account.functions_service_account.email
}

event_trigger {
trigger_region = var.gcp_region
event_type     = "google.cloud.pubsub.topic.v1.messagePublished"
pubsub_topic   = google_pubsub_topic.auth_events.id
}

labels = {
environment = var.environment
service     = "authentication"
}
}

5.1.2 청구 서비스

# 청구용 클라우드 함수
resource "google_cloudfunctions2_function" "billing_service" {
name     = "energent-billing-${var.environment}"
location = var.gcp_region

build_config {
runtime     = "python311"
entry_point = "billing_handler"
source {
storage_source {
bucket = google_storage_bucket.functions_source.name
object = google_storage_bucket_object.billing_source.name
}
}
}

service_config {
max_instance_count = 50
min_instance_count = 0
available_memory   = "1Gi"
timeout_seconds    = 300

environment_variables = {
FIRESTORE_PROJECT = var.project_id
STORAGE_BUCKET = google_storage_bucket.energent_storage.name
}

service_account_email = google_service_account.functions_service_account.email
}
}

5.2 API 게이트웨이 구성

# 서버리스 함수용 API 게이트웨이
resource "google_api_gateway_api" "energent_api" {
provider = google-beta
api_id   = "energent-api-${var.environment}"
project  = var.project_id

labels = {
environment = var.environment
service     = "api-gateway"
}
}

resource "google_api_gateway_api_config" "energent_api_config" {
provider      = google-beta
api           = google_api_gateway_api.energent_api.api_id
api_config_id = "energent-config-${var.environment}"
project       = var.project_id

openapi_documents {
document {
path     = "spec.yaml"
contents = base64encode(templatefile("${path.module}/api-spec.yaml", {
project_id = var.project_id
region     = var.gcp_region
}))
}
}

lifecycle {
create_before_destroy = true
}
}

resource "google_api_gateway_gateway" "energent_gateway" {
provider   = google-beta
gateway_id = "energent-gateway-${var.environment}"
api_config = google_api_gateway_api_config.energent_api_config.id
location   = var.gcp_region
project    = var.project_id

labels = {
environment = var.environment
service     = "api-gateway"
}
}

6. 보안 및 준수

6.1 네트워크 보안

6.1.1 VPC 구성

# VPC 네트워크 및 방화벽 규칙
resource "google_compute_network" "vpc" {
name                    = "energent-vpc-${var.environment}"
auto_create_subnetworks = false
mtu                     = 1460
}

resource "google_compute_subnetwork" "subnet" {
name          = "energent-subnet-${var.environment}"
ip_cidr_range = "10.0.0.0/16"
region        = var.gcp_region
network       = google_compute_network.vpc.id

secondary_ip_range {
range_name    = "k8s-pod-range"
ip_cidr_range = "10.1.0.0/16"
}

secondary_ip_range {
range_name    = "k8s-service-range"
ip_cidr_range = "10.2.0.0/16"
}

private_ip_google_access = true
}

resource "google_compute_firewall" "allow_internal" {
name    = "energent-allow-internal"
network = google_compute_network.vpc.name

allow {
protocol = "tcp"
ports    = ["0-65535"]
}

allow {
protocol = "udp"
ports    = ["0-65535"]
}

allow {
protocol = "icmp"
}

source_ranges = ["10.0.0.0/8"]
}

resource "google_compute_firewall" "allow_https" {
name    = "energent-allow-https"
network = google_compute_network.vpc.name

allow {
protocol = "tcp"
ports    = ["443"]
}

source_ranges = ["0.0.0.0/0"]
target_tags   = ["https-server"]
}

6.1.2 방화벽 규칙

방향프로토콜포트 범위출처/대상목적
인바운드HTTPS4430.0.0.0/0API 액세스
인바운드TCP1024-6553510.0.0.0/8내부 트래픽
아웃바운드HTTPS4430.0.0.0/0외부 API 호출
아웃바운드TCP530.0.0.0/0DNS 해상

6.2 암호화 표준

데이터 상태암호화 방법키 관리준수
휴지 상태AES-256-GCM자동 회전이 포함된 Cloud KMSSOC 2, FIPS 140-2 Level 3
전송 중TLS 1.3Google 관리 인증서SOC 2, PCI DSS
메모리 내애플리케이션 수준하드웨어 보안 모듈SOC 2
백업AES-256지역 간 Cloud KMSSOC 2, GDPR

6.3 IAM 및 서비스 계정

6.3.1 GKE 서비스 계정

# GKE 서비스 계정
resource "google_service_account" "gke_service_account" {
  account_id   = "energent-gke-${var.environment}"
  display_name = "Energent GKE Service Account"
  project      = var.project_id
}

resource "google_project_iam_member" "gke_permissions" {
  for_each = toset([
    "roles/logging.logWriter",
    "roles/monitoring.metricWriter",
    "roles/monitoring.viewer",
    "roles/storage.objectViewer"
  ])

  project = var.project_id
  role    = each.value
  member  = "serviceAccount:${google_service_account.gke_service_account.email}"
}

# 워크로드 아이덴티티 바인딩
resource "google_service_account_iam_member" "workload_identity" {
  service_account_id = google_service_account.gke_service_account.name
  role               = "roles/iam.workloadIdentityUser"
  member             = "serviceAccount:${var.project_id}.svc.id.goog[energent-ai/energent-platform]"
}

7. 네트워크 아키텍처

7.1 VPC 디자인

┌─────────────────────────────────────────────────────────────────┐
│                         VPC (10.0.0.0/16)                       │
│                                                                 │
│  ┌─────────────────┐    ┌─────────────────┐    ┌─────────────┐  │
│  │  Public Subnet  │    │  Public Subnet  │    │ Public Sub  │  │
│  │   (10.0.1.0/24) │    │   (10.0.2.0/24) │    │(10.0.3.0/24)│  │
│  │                 │    │                 │    │             │  │
│  │   Cloud NAT     │    │   Cloud NAT     │    │ Cloud NAT   │  │
│  │   Load Balancer │    │   Load Balancer │    │Load Balancer│  │
│  └─────────────────┘    └─────────────────┘    └─────────────┘  │
│           │                       │                     │       │
│  ┌─────────────────┐    ┌─────────────────┐    ┌─────────────┐  │
│  │ Private Subnet  │    │ Private Subnet  │    │Private Sub  │  │
│  │  (10.1.0.0/16)  │    │  (10.1.0.0/16)  │    │(10.1.0.0/16)│  │
│  │                 │    │                 │    │             │  │
│  │  GKE Nodes      │    │  GKE Nodes      │    │ GKE Nodes   │  │
│  │  Functions VPC  │    │  Functions VPC  │    │ Functions   │  │
│  └─────────────────┘    └─────────────────┘    └─────────────┘  │
│           │                       │                     │       │
│  ┌─────────────────┐    ┌─────────────────┐    ┌─────────────┐  │
│  │ Services Subnet │    │ Services Subnet │    │Services Sub │  │
│  │  (10.2.0.0/16)  │    │  (10.2.0.0/16)  │    │(10.2.0.0/16)│  │
│  │                 │    │                 │    │             │  │
│  │   Firestore     │    │   Firestore     │    │ Firestore   │  │
│  │   Cloud Storage │    │   Cloud Storage │    │Cloud Storage│  │
│  └─────────────────┘    └─────────────────┘    └─────────────┘  │
└─────────────────────────────────────────────────────────────────┘

7.2 프라이빗 서비스 연결

서비스유형목적
Cloud Storage프라이빗 엔드포인트객체 스토리지 액세스
Firestore프라이빗 엔드포인트메타데이터 액세스
GKE프라이빗 클러스터클러스터 API 액세스
Container Registry프라이빗 엔드포인트컨테이너 레지스트리
Cloud Monitoring프라이빗 엔드포인트모니터링 및 로깅
Secret Manager프라이빗 엔드포인트비밀 액세스

8. CI/CD 파이프라인

8.1 코드형 인프라 (Terraform)

8.1.1 Terraform 구조

terraform/
├── environments/
│   ├── dev/
│   ├── staging/
│   └── production/
├── modules/
│   ├── gke/
│   ├── networking/
│   ├── security/
│   └── storage/
├── shared/
│   └── backend.tf
└── global/
    └── iam.tf

8.1.2 Terraform 파이프라인 (Cloud Build)

# cloudbuild.yaml
steps:
  # Terraform Init
  - name: 'hashicorp/terraform:1.6.0'
    entrypoint: 'sh'
    args:
      - '-c'
      - |
        cd terraform/environments/${_ENVIRONMENT}
        terraform init -backend-config="bucket=${_TF_STATE_BUCKET}"

  # Terraform Plan
  - name: 'hashicorp/terraform:1.6.0'
    entrypoint: 'sh'
    args:
      - '-c'
      - |
        cd terraform/environments/${_ENVIRONMENT}
        terraform plan -var-file="${_ENVIRONMENT}.tfvars" -out=tfplan

  # Terraform Apply (only on main branch)
  - name: 'hashicorp/terraform:1.6.0'
    entrypoint: 'sh'
    args:
      - '-c'
      - |
        if [ "${BRANCH_NAME}" = "main" ]; then
          cd terraform/environments/${_ENVIRONMENT}
          terraform apply -auto-approve tfplan
        else
          echo "Skipping apply for non-main branch"
        fi

substitutions:
  _ENVIRONMENT: 'production'
  _TF_STATE_BUCKET: 'energent-terraform-state'

options:
  logging: CLOUD_LOGGING_ONLY
  machineType: 'E2_HIGHCPU_8'

timeout: 1200s

8.2 Kubernetes GitOps (Flux)

8.2.1 Flux 구성

# flux-system/gotk-sync.yaml
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: GitRepository
metadata:
  name: energent-k8s
  namespace: flux-system
spec:
  interval: 1m
  ref:
    branch: main
  url: https://github.com/energent-ai/k8s-manifests
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
  name: energent-apps
  namespace: flux-system
spec:
  interval: 10m
  path: './apps'
  prune: true
  sourceRef:
    kind: GitRepository
    name: energent-k8s
  validation: client

8.3 서버리스 배포 (Cloud Build)

8.3.1 함수 배포 구성

# cloudbuild-functions.yaml
steps:
  # Deploy Auth Function
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:latest'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        cd functions/auth
        gcloud functions deploy energent-auth-${_ENVIRONMENT} \
          --runtime python311 \
          --trigger-http \
          --entry-point auth_handler \
          --memory 512MB \
          --timeout 60s \
          --region ${_REGION} \
          --vpc-connector ${_VPC_CONNECTOR} \
          --set-env-vars ENVIRONMENT=${_ENVIRONMENT}

  # Deploy Billing Function
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:latest'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        cd functions/billing
        gcloud functions deploy energent-billing-${_ENVIRONMENT} \
          --runtime python311 \
          --trigger-topic billing-events \
          --entry-point billing_handler \
          --memory 1024MB \
          --timeout 300s \
          --region ${_REGION}

substitutions:
  _ENVIRONMENT: 'production'
  _REGION: 'us-central1'
  _VPC_CONNECTOR: 'energent-vpc-connector'

options:
  logging: CLOUD_LOGGING_ONLY

9. 모니터링 및 관찰 가능성

9.1 Cloud Monitoring 구성

9.1.1 GKE 모니터링

# Cloud Monitoring for GKE
resource "google_monitoring_dashboard" "gke_dashboard" {
  dashboard_json = jsonencode({
    displayName = "Energent GKE Dashboard"
    mosaicLayout = {
      tiles = [
        {
          width = 6
          height = 4
          widget = {
            title = "GKE Cluster CPU Utilization"
            xyChart = {
              dataSets = [{
                timeSeriesQuery = {
                  timeSeriesFilter = {
                    filter = "resource.type=\"k8s_cluster\" AND metric.type=\"kubernetes.io/container/cpu/core_usage_time\""
                  }
                }
              }]
            }
          }
        }
      ]
    }
  })
}

# Log-based Metrics
resource "google_logging_metric" "error_rate" {
  name   = "energent_error_rate"
  filter = "resource.type=\"k8s_container\" AND resource.labels.namespace_name=\"energent-ai\" AND severity=\"ERROR\""

  metric_descriptor {
    metric_kind = "GAUGE"
    value_type  = "INT64"
    display_name = "Energent Error Rate"
  }
}

9.2 애플리케이션 메트릭

메트릭 카테고리메트릭목표경고 임계값
가용성Uptime, Health Checks99.9%< 99.5%
성능Response Time, Throughput< 2s, > 1000 RPS> 5s, < 500 RPS
리소스 사용량CPU, Memory, Storage< 80%> 90%
오류율4xx, 5xx errors< 1%> 5%

9.3 감사 로그

# Cloud Audit Logs Configuration
resource "google_project_iam_audit_config" "project_audit" {
  project = var.project_id
  service = "allServices"

  audit_log_config {
    log_type = "ADMIN_READ"
  }

  audit_log_config {
    log_type = "DATA_READ"
  }

  audit_log_config {
    log_type = "DATA_WRITE"
  }
}

# Log Sink for Security Events
resource "google_logging_project_sink" "security_sink" {
  name        = "energent-security-sink"
  destination = "storage.googleapis.com/${google_storage_bucket.audit_logs.name}"

  filter = "protoPayload.serviceName=\"container.googleapis.com\" OR protoPayload.serviceName=\"iam.googleapis.com\""

  unique_writer_identity = true
}

10. 배포 프로세스

10.1 배포 일정

단계기간활동이해관계자
사전 배포2-3일인프라 계획, 보안 검토고객 IT, 보안, Energent 솔루션
인프라1-2일Terraform 배포, VPC 설정고객 DevOps, Energent 플랫폼
GKE 클러스터0.5일클러스터 프로비저닝, 노드 풀고객 DevOps, Energent 플랫폼
애플리케이션0.5일Flux 배포, 애플리케이션 롤아웃Energent 플랫폼 팀
통합1-2일IAM, 모니터링, 테스트고객 IT, Energent 지원
운영 시작0.5일프로덕션 전환, 검증모든 이해관계자

10.2 배포 명령어

10.2.1 인프라 배포

# Infrastructure Deployment with Terraform
cd terraform/environments/production
terraform init -backend-config="bucket=energent-terraform-state"
terraform plan -var-file="production.tfvars"
terraform apply -auto-approve

# Verify GKE cluster
gcloud container clusters get-credentials energent-production --region us-central1
kubectl get nodes

10.2.2 애플리케이션 배포

# Install Flux GitOps
flux bootstrap github \
  --owner=energent-ai \
  --repository=k8s-manifests \
  --branch=main \
  --path=./clusters/production

# Deploy serverless components
gcloud builds submit --config cloudbuild-functions.yaml \
  --substitutions _ENVIRONMENT=production,_REGION=us-central1

# 배포 확인
kubectl get pods -n energent-ai
kubectl get ingress -n energent-ai

10.3 배포 검증

# 상태 확인 엔드포인트
curl -k https://api.energent.example.com/health
curl -k https://api.energent.example.com/metrics

# Kubernetes 검증
kubectl top nodes
kubectl get hpa -n energent-ai
kubectl logs -n energent-ai -l app=energent-platform

11. 운영 및 유지보수

11.1 백업 및 재해 복구

11.1.1 백업 전략

구성 요소빈도보존 기간RTORPO
GKE 클러스터 상태매일30일< 4시간< 24시간
애플리케이션 데이터실시간90일< 1시간< 15분
구성변경 시1년< 30분0
감사 로그실시간7년< 24시간0

11.1.2 재해 복구 절차

# Velero를 사용한 GKE 클러스터 백업
velero backup create energent-cluster-backup \
  --include-namespaces energent-ai \
  --storage-location gcp

# Firestore 시점 복구
gcloud firestore databases restore \
  --source-database=energent-metadata-production \
  --destination-database=energent-metadata-restored \
  --backup-time=2025-05-28T10:00:00Z

11.2 확장 및 성능

11.2.1 자동 확장 구성

# 수평 포드 자동 확장기
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: energent-platform-hpa
  namespace: energent-ai
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: energent-platform
  minReplicas: 3
  maxReplicas: 50
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 80

11.3 업데이트 및 유지보수

11.3.1 롤링 업데이트

# GKE 클러스터 업데이트
gcloud container clusters upgrade energent-production \
  --master \
  --cluster-version 1.30 \
  --region us-central1

# Flux를 사용한 애플리케이션 롤링 업데이트
git commit -am "Update energent-platform to v2.1.0"
git push origin main
# Flux가 자동으로 변경 사항을 감지하고 적용

12. 지원 및 에스컬레이션

12.1 지원 티어

티어응답 시간채널범위
L1 - 기본< 4시간이메일, 포털일반 질문, 문서
L2 - 표준< 2시간전화, 이메일, 미팅기술 문제, 통합 지원
L3 - 프리미엄< 1시간전화, 미팅, 화상복잡한 기술 문제, 아키텍처
L4 - 긴급< 30분전화, SMS, 에스컬레이션프로덕션 장애, 보안 사건

12.2 24/7 지원 범위

엔터프라이즈 지원:

긴급 에스컬레이션:

12.3 서비스 수준 계약

서비스SLA페널티
플랫폼 가용성99.9% 업타임0.1% 부족 시 월간 크레딧 10%
응답 시간 (P95)< 2초5초 초과 시 월간 크레딧 5%
지원 응답위 티어 기준다음 티어로 에스컬레이션
데이터 복구RTO < 4시간초과 시 월간 크레딧 25%

부록

부록 A: GCP 서비스 비용

서비스예상 월간 비용확장 요인
GKE 클러스터$75클러스터당 고정
Compute Engine (3x n2-standard-4)$850노드당 선형
영구 디스크 (300GB)$60GB당 선형
클라우드 스토리지 (1TB)$20GB당 선형
Firestore$120사용량 기반
클라우드 함수$35요청 기반
총 기본 비용~$1,160/월100 테넌트 기준

부록 B: 보안 준수 체크리스트

  • 비공개 서브넷이 포함된 VPC 배포
  • 최소 권한 액세스가 적용된 방화벽 규칙
  • 모든 정지 데이터에 대해 Cloud KMS 암호화
  • 모든 전송 데이터에 대해 TLS 1.3 사용
  • 최소 권한이 적용된 IAM
  • Cloud 감사 로그 활성화
  • 보안 명령 센터 활성화
  • 조직 정책 제약 활성화
  • 모든 자격 증명에 대해 비밀 관리자 사용
  • 정기적인 보안 스캔 및 평가

부록 C: 문제 해결 가이드

일반적인 문제:

  1. GKE 노드가 클러스터에 참여하지 않음

    • 서비스 계정 권한 확인
    • 서브넷 라우팅 및 Cloud NAT 확인
  2. 애플리케이션 포드가 CrashLooping

    • 리소스 제한 및 요청 확인
    • 영구 볼륨 클레임 확인
  3. 네트워크 연결 문제

    • VPC 커넥터 구성 확인
    • 방화벽 규칙 확인

  • 문서 분류: 공개
  • 버전: 3.0
  • 최종 업데이트: 2025-05-28
  • 다음 검토: 2025-08-28
  • 문의: support@energent.ai