Helm Values 및 환경 변수
Wave가 사용하는 모든 환경 변수와 Helm values에 대한 레퍼런스입니다.
핵심 설정 파라미터
필수 환경 변수
| Variable | Description | Default | Required |
|---|---|---|---|
WA_LICENSE | Wave 라이선스 키입니다. chart가 license Secret에서 값을 읽어 Core에 주입합니다. 직접 env var로 작성하지 말고 아래 license.key 또는 license.existingSecret Helm value로 설정하세요. | - | 예 (Helm value로 설정) |
WA_LOG_LEVEL | 로그 레벨 (info, debug, trace) | info | 아니요 |
WA_API_SERVER_HOST | API 서버 호스트 주소 | 0.0.0.0 | 아니요 |
WA_API_SERVER_PORT | API 서버 포트 | 3024 | 아니요 |
WA_KUBELET_METRICS_ENABLED | kubelet 메트릭 수집 활성화 여부 | true | 아니요 |
WA_CONFIG_MODE | 운영 모드입니다. console(기본값): web console로 설정합니다. crd: 운영 설정을 Custom Resource로 관리하며 콘솔은 읽기 전용이 됩니다. CRD Mode 참고. | console | 아니요 |
라이선스 및 레지스트리 자격 증명
라이선스와 이미지 pull 자격 증명은 환경 변수가 아니라 Helm values로 설정합니다.
| Value | Purpose | Default |
|---|---|---|
license.key | 인라인으로 넣는 Wave 라이선스 키입니다. | "" |
license.existingSecret | 라이선스를 담고 있는, 미리 만들어 둔 Secret 이름입니다(프로덕션에 권장하며 license.key보다 우선합니다). | "" |
license.existingSecretKey | existingSecret 안에서 라이선스를 담고 있는 key입니다. | WA_LICENSE |
ghcr.enabled / ghcr.dockerconfigjson | ghcr.io/stclab-inc/*용 이미지 pull Secret을 생성합니다(base64 dockerconfigjson). | false / "" |
redhat.enabled / redhat.dockerconfigjson | registry.connect.redhat.com용 이미지 pull Secret을 생성합니다(Red Hat 인증 이미지). | false / "" |
crds.install | chart와 함께 wavek8s.com CRD 14개를 설치합니다. 클러스터 admin이나 ArgoCD가 별도로 관리한다면 false로 설정하세요. | true |
데이터 관리
| Variable | Description | Default |
|---|---|---|
WA_DATA_SAVE_DAYS | 데이터 보관 기간(일) | 14 |
WA_NODE_SNAPSHOT_DATA_SAVE_DAYS | 노드 스냅샷 보관 기간(일) | 90 |
WA_DATA_REMOVE_CRON_EXPRESSION | 데이터 정리 스케줄 | 0 0 0 * * * |
WA_DB_DIRECTORY | 데이터베이스 디렉터리 경로 | data |
WA_METRICS_DIRECTORY | 메트릭 저장 경로 | data/metrics |
WA_LOGS_DIRECTORY | 로그 저장 경로 | data/logs |
Worker 주기
| Variable | Description | Default (seconds) |
|---|---|---|
WA_K8S_DEPLOYMENT_WORKER_INTERVAL_SECONDS | Deployment 동기화 주기 | 10 |
WA_K8S_STATEFULSET_WORKER_INTERVAL_SECONDS | StatefulSet 동기화 주기 | 10 |
WA_K8S_DAEMONSET_WORKER_INTERVAL_SECONDS | DaemonSet 동기화 주기 | 10 |
WA_AWS_ASG_WORKER_INTERVAL_SECONDS | AWS Auto Scaling Group 동기화 주기 | 10 |
WA_AWS_ECS_WORKER_INTERVAL_SECONDS | AWS ECS 동기화 주기 | 10 |
WA_OPENSTACK_IG_WORKER_INTERVAL_SECONDS | OpenStack instance group 동기화 주기 | 30 |
모니터링 및 메트릭
| Variable | Description | Default |
|---|---|---|
WA_STATS_CRON_EXPRESSION | 통계 수집 스케줄 | 0 0 * * * * |
WA_CLUSTER_STATUS_CRON_EXPRESSION | 클러스터 상태 점검 스케줄 | 0 */5 * * * * |
WA_K8S_WORKLOADS_DISABLED_CRON_EXPRESSION | 비활성화된 워크로드 점검 | 0 */5 * * * * |
WA_PROMETHEUS_EXPORTER_EXPIRY_CHECK_INTERVAL_SECONDS | Prometheus exporter 점검 | 0 0 * * * * |
WA_PROMETHEUS_EXPORTER_EXPIRATION_SECONDS | Prometheus 메트릭 만료 시간 | 10800 (3시간) |
예측 주기
| Variable | Description | Default |
|---|---|---|
WA_CLUSTER_STATUS_FORECAST_ENABLED | Cluster Resource Forecast 활성화 | true |
WA_CLUSTER_STATUS_FORECAST_HORIZON_DAYS | 클러스터 예측이 내다보는 기간(일) | 7 |
WA_CLUSTER_STATUS_FORECAST_INTERVAL_HOURS | 클러스터 예측 API 호출 주기(시간). Wave 3.4.5+. | 24 |
WA_PV_FORECAST_HORIZON_DAYS | PV capacity forecast가 내다보는 기간(일) | 7 |
WA_PV_CAPACITY_FORECAST_TASK_INTERVAL_MINUTES | PV capacity forecast 작업 실행 주기(분) | 1440 (24시간) |
Wave 3.4.5에서 예측 주기 두 개의 기본값이 바뀌었습니다. cluster-status cron은 5분마다 데이터를 수집하는데, 이전에는 매 tick마다 예측 API를 호출해서 intelligence 서비스를 포화시키고 Autopilot 예측을 타임아웃시킬 수 있었습니다. 이제 예측 호출은 WA_CLUSTER_STATUS_FORECAST_INTERVAL_HOURS(기본 24시간)로 제한되고, PV capacity forecast 작업 주기 기본값도 10분에서 1440분으로 올라갔습니다. 예측은 일 단위 기간을 내다보는 값이라 24시간 주기로도 정확도 손실이 없습니다. 특별한 이유와 intelligence 서비스의 여유가 있을 때만 낮추세요.
플랫폼 기능
| Variable | Description | Default |
|---|---|---|
WA_PLATFORM_K8S | Kubernetes 플랫폼 활성화 | true |
WA_PLATFORM_AWS | AWS 플랫폼 활성화 | true |
WA_PLATFORM_OPENSTACK | OpenStack 플랫폼 활성화 | true |
기능 토글
Wave 3.4.0+. 각 백그라운드 작업을 배포 시점에 끌 수 있습니다. 작업을 끄면 아예 시작되지 않으므로, Core가 해당 데이터를 수집하거나 감지기를 돌리지 않고 그 기능의 CPU, 메모리, 스토리지 사용량도 사라집니다.
| Variable | Description | Default |
|---|---|---|
WA_AUTOPILOT_ENABLED | Autopilot 스케일링 작업 | true |
WA_SMART_SIZING_ENABLED | Smart Sizing 작업 | true |
WA_WAVE_FLOW_ENABLED | Wave Flow(트래픽 보호) 작업 | true |
WA_NF_ENABLED | NetFUNNEL 연동 작업 | true |
WA_DIAGNOSIS_ENABLED | Wave Diagnosis 그룹 게이트. 이걸 끄면 아래 Diagnosis 하위 작업은 각자의 플래그와 무관하게 전부 꺼집니다. | true |
WA_MEMORY_ANOMALY_DETECTION_ENABLED | memory leak detection 및 OOM-kill 위험 감지 (Diagnosis 하위 작업) | true |
WA_POD_CONTAINER_FAILURES_ENABLED | Pod/Container Failures 감지 (Diagnosis 하위 작업) | true |
WA_POD_SCHEDULING_DELAY_ENABLED | Pod scheduling delay 감지 (Diagnosis 하위 작업) | true |
WA_IDLE_NODE_DETECTION_ENABLED | Idle node detection (Diagnosis 하위 작업) | true |
WA_PV_UNUSED_DETECTION_ENABLED | Unused PV detection (Diagnosis 하위 작업) | true |
WA_PV_FORECAST_ENABLED | PV capacity forecasting (Diagnosis 하위 작업) | true |
WA_PVC_AUTO_EXPANSION_ENABLED | PVC auto-expansion. 독립 게이트이며 WA_DIAGNOSIS_ENABLED에 묶이지 않습니다. | true |
WA_KARPENTER_ENABLED | Wave Karpenter 기능 | false |
WA_GPU_ENABLED | Wave GPU 그룹 게이트 | false |
WA_GPU_COST_TRACKING_ENABLED | GPU 비용 추적 (WA_GPU_ENABLED=true 필요) | false |
WA_GPU_WASTE_DETECTION_ENABLED | GPU 낭비 감지 (WA_GPU_ENABLED=true 필요) | false |
그룹 게이트는 하위 작업 플래그와 AND로 묶입니다. Diagnosis 하위 작업은 WA_DIAGNOSIS_ENABLED와 자기 플래그가 둘 다 true일 때만 동작합니다. GPU 그룹도 마찬가지입니다. WA_PVC_AUTO_EXPANSION_ENABLED만 예외인데, UI가 Diagnosis가 아니라 스토리지 PVC 탭에 있기 때문에 독립 게이트입니다.
꺼진 기능이 콘솔에서 보이는 모습. 메뉴 항목은 그대로 남아 있고, 페이지에는 어떤 환경 변수를 설정하면 다시 켜지는지 안내하는 패널이 표시됩니다. Wave Karpenter와 Wave GPU는 다릅니다. 꺼져 있으면 메뉴 항목 자체가 숨겨집니다.
WA_NF_ENABLED는 라이선스와 함께 적용됩니다. 라이선스가 NetFUNNEL을 허용하고 동시에 이 환경 변수가 true일 때만 사용할 수 있습니다. false로 두면 라이선스가 있는 클러스터에서도 NetFUNNEL이 꺼집니다.
고급 기능
| Variable | Description | Default |
|---|---|---|
WA_WAVE_SHAPER_MODULE_URL | Wave Shaper 모듈 이미지 | public.ecr.aws/wave-autoscale/wave-shaper:0.1.3 |
WA_EVENT_QUEUE_CHANNEL_CAPACITY | 이벤트 큐 용량 | 64 |
WA_METRIC_STORE_SAVE_BATCH_WORKER_CNT | 메트릭 배치 worker 수 | 50 |
WA_AWS_METERING_CRON_EXPRESSION | AWS metering 스케줄 | 0 59 * * * * |
WA_WATCH_DURATION_SECONDS | 업데이트 감시(watch) 기간 | 5 |
구성 요소 설정
Autopilot 설정
| Variable | Description | Default |
|---|---|---|
WA_AUTOPILOT_SERVER_HOST | Autopilot 서버 호스트 | localhost |
WA_AUTOPILOT_SERVER_PORT | Autopilot 서버 포트 | 3026 |
OpenStack 설정
| Variable | Description | Default |
|---|---|---|
WA_OPENSTACK_SERVER_HOST | OpenStack 서버 호스트 | localhost |
WA_OPENSTACK_SERVER_PORT | OpenStack 서버 포트 | 3027 |
Karpenter 설정
Karpenter 기능을 사용하려면 Karpenter가 설치된 Amazon EKS 클러스터가 필요합니다. webhook 설정은 Spot Workload Placement에만 필요합니다.
Karpenter 설정 항목
| Parameter | Description | Default |
|---|---|---|
karpenter.enabled | Karpenter ClusterRole과 Spot Placement MutatingWebhook 활성화 | false |
Webhook TLS 설정
| Variable / Parameter | Description | Default |
|---|---|---|
webhooks.tls.enabled (WA_K8S_WEBHOOK_TLS_ENABLED) | webhook TLS 활성화/비활성화 | false |
webhooks.tls.port (WA_WEBHOOK_PORT) | Webhook 서버 포트 | 9443 |
webhooks.tls.certFile (WA_K8S_WEBHOOK_TLS_CERT_FILE) | TLS 인증서 파일 경로 | /etc/tls/tls.crt |
webhooks.tls.keyFile (WA_K8S_WEBHOOK_TLS_KEY_FILE) | TLS 개인 키 파일 경로 | /etc/tls/tls.key |
webhooks.tls.certManager.enabled | cert-manager Issuer/Certificate 자동 생성 | true |
webhooks.tls.certManager.duration | 인증서 유효 기간 | 8760h (1년) |
webhooks.tls.certManager.renewBefore | 만료 전 인증서 갱신 시점 | 720h (30일) |
webhooks.tls.secretName | TLS 인증서용 Kubernetes secret 이름 | wave-autoscale-webhook-tls |
설정 예시
# Karpenter Integration (EKS only)
karpenter:
enabled: true
# Webhook TLS (required for Spot Workload Placement)
webhooks:
tls:
enabled: true
port: 9443
certManager:
enabled: true
duration: "8760h"
renewBefore: "720h"
secretName: "wave-autoscale-webhook-tls"자세한 설정 방법은 Karpenter Getting Started 가이드를 참고하세요.
스토리지 설정
Persistent Volume 설정
spec:
storageClassName: "gp3" # AWS EKS example
existingPvcName: "" # Use existing PVC or leave empty for auto-creation플랫폼별 StorageClass 예시
- AWS EKS:
gp3,gp2,io1 - GKE:
standard,standard-rwo,premium-rwo - Azure AKS:
managed-premium,azurefile - 온프레미스:
local-path,nfs,ceph-rbd
플랫폼별 설정
Red Hat OpenShift
openshift:
waveAutoscale:
scc:
create: true # Create custom SCC for core components
waveAutoscaleAgent:
scc:
create: true # Create custom SCC for agent DaemonSetFargate를 사용하는 AWS EKS
spec:
core:
nodeSelector:
eks.amazonaws.com/compute-type: fargate클러스터 권한
표준 설정
clusterRole:
readOnly: false # Full automation capabilities
istioAdmin: false # Set true for Istio service mesh integration읽기 전용 모드
clusterRole:
readOnly: true # Limited to monitoring only
istioAdmin: falseResource Sizing Guidelines
Wave의 resource 요구량은 클러스터 크기에 비례해 늘어납니다(전체 클러스터 용량의 약 1%).
| Cluster Size | Target Workloads | WA Core | Intelligence | Web Console | Total Resources | Storage |
|---|---|---|---|---|---|---|
| 2000 vCPUs | 200 workloads | 6 vCPU / 6GB | 9 vCPU / 9GB | 0.3 vCPU / 300MB | 15.3 vCPU / 15.3GB | 40GB |
| 1000 vCPUs | 100 workloads | 3 vCPU / 3GB | 6 vCPU / 6GB | 0.3 vCPU / 300MB | 9.3 vCPU / 9.3GB | 20GB |
| 500 vCPUs | 50 workloads | 2 vCPU / 2GB | 4 vCPU / 4GB | 0.3 vCPU / 300MB | 6.3 vCPU / 6.3GB | 10GB |
| 300 vCPUs | 30 workloads | 1.5 vCPU / 1GB | 2 vCPU / 2GB | 0.3 vCPU / 300MB | 3.8 vCPU / 3.3GB | 6GB |
참고: WA Metrics Agent는 노드당 0.1 vCPU / 50MB가 필요합니다(DaemonSet으로 배포됨).
전체 설정 예시
대부분의 설치는 라이선스, 이미지 pull 자격 증명, StorageClass만 있으면 됩니다. 공개된 chart가 이미 이미지 저장소, 태그, 기본 리소스를 설정해 두었기 때문입니다. 구성 요소별 값은 필요할 때만 override하세요.
# Image-pull secret for ghcr.io/stclab-inc/* (provided by the Wave team)
ghcr:
enabled: true
dockerconfigjson: "eyJhdXRocyI6eyJnaGNyLmlvIjp7...}}"
# License: inline, or reference a pre-created Secret via license.existingSecret
license:
key: "YOUR-LICENSE-KEY-HERE"
# Install the 14 wavek8s.com CRDs with the chart (default true)
crds:
install: true
# Cluster permissions
clusterRole:
readOnly: false
istioAdmin: true
# Per-component overrides (optional; the chart ships sensible defaults)
spec:
core:
image:
repository: ghcr.io/stclab-inc/wave-autoscale-core
tag: <version>
env:
- name: WA_LOG_LEVEL
value: "info"
- name: WA_DATA_SAVE_DAYS
value: "30"
resources:
requests:
cpu: "1500m"
memory: "3Gi"
limits:
cpu: "1500m"
memory: "3Gi"
webConsole:
image:
repository: ghcr.io/stclab-inc/wave-autoscale-web-console
tag: <version>
resources:
requests:
cpu: "100m"
memory: "100Mi"
intelligence:
image:
repository: ghcr.io/stclab-inc/wave-autoscale-intelligence
tag: <version>
resources:
requests:
cpu: "500m"
memory: "1Gi"
agent:
image:
repository: ghcr.io/stclab-inc/wave-autoscale-agent
tag: <version>
resources:
requests:
cpu: "100m"
memory: "50Mi"
cadvisor:
image:
repository: gcr.io/cadvisor/cadvisor
tag: v0.52.1
resources:
requests:
cpu: "100m"
memory: "200Mi"
# Storage configuration
storageClassName: "gp3"
existingPvcName: ""
# Platform-specific settings (uncomment as needed)
# openshift:
# waveAutoscale:
# scc:
# create: true
# waveAutoscaleAgent:
# scc:
# create: true검증 및 문제 해결
설치 전 체크리스트
- Kubernetes 버전 호환성을 확인합니다 (1.26 이상)
- 사이징 가이드라인에 따라 클러스터 리소스가 충분한지 확인합니다
- 라이선스 키가 유효한지 확인합니다
- StorageClass를 사용할 수 있는지 확인합니다
- 네트워크 정책이 구성 요소 간 통신을 허용하는지 확인합니다
자주 발생하는 설정 문제
라이선스 검증
kubectl logs -n wave-autoscale wave-autoscale-0 -c core | grep LICENSE메트릭 수집
# Verify agent is collecting metrics
kubectl logs -n wave-autoscale -l app=wave-autoscale-agent | grep metrics스토리지 문제
# Check PVC status
kubectl get pvc -n wave-autoscale성능 튜닝
고부하 클러스터 (1000 vCPU 초과)
WA_METRIC_STORE_SAVE_BATCH_WORKER_CNT를100으로 늘립니다WA_EVENT_QUEUE_CHANNEL_CAPACITY를128로 설정합니다- 워크로드 변동성에 맞춰 worker 주기를 조정합니다
리소스가 제한적인 환경
- 스토리지 요구량을 줄이려면
WA_DATA_SAVE_DAYS를7로 설정합니다 - CPU 사용량을 줄이려면 worker 주기를 늘립니다
- 모니터링 전용 배포라면 읽기 전용 모드를 고려하세요
보안 고려 사항
네트워크 정책
다음 통신을 허용하도록 네트워크 정책을 구성하세요:
- 포트 3024~3027에서 Core 구성 요소 간 통신
- Agent와 kubelet 간 통신 (포트 10250)
- 필요하다면 Web Console(포트 3025)에 대한 외부 접근
RBAC 설정
Wave는 다음과 같은 RBAC 권한이 필요합니다:
- 모든 Kubernetes 리소스에 대한 읽기 권한
- 워크로드 리소스(Deployment, StatefulSet 등)에 대한 쓰기 권한
- 노드와 pod로부터의 메트릭 수집
GPU Features (preview)
Wave의 GPU 기능은 프리뷰 기간 동안 feature flag로 제어됩니다. 아래 환경 변수로 활성화할 수 있습니다.
| Variable | Default | Description |
|---|---|---|
WA_GPU_ENABLED | false | Wave GPU 기능을 위한 마스터 플래그입니다. |
WA_GPU_COST_TRACKING_ENABLED | false | GPU 비용 추적 작업을 활성화합니다. |
WA_GPU_WASTE_DETECTION_ENABLED | false | GPU 낭비 탐지 작업을 활성화합니다. |
WA_GPU_COST_TRACKING_TASK_INTERVAL_MINUTES | 10 | 비용 추적 작업 주기(분)입니다. |
WA_GPU_WASTE_DETECTION_TASK_INTERVAL_MINUTES | 10 | 낭비 탐지 작업 주기(분)입니다. |
기능에 대한 자세한 내용은 Wave GPU 섹션을 참고하세요.