Autopilot Scheduler
Autopilot Scheduler를 사용하면 cron 표현식으로 특정 시간에 서로 다른 Autopilot 설정(Autopilot Presets라고 부릅니다)을 적용할 수 있습니다. 영업시간, 프로모션 이벤트, 유지보수 기간처럼 트래픽 패턴을 미리 알 수 있는 경우에 사용하세요.
개요
Autopilot의 ML은 동적 스케일링을 처리하고, Scheduler는 다음을 가능하게 합니다:
- 예정된 시간에 서로 다른 Autopilot Preset으로 전환
- 알려진 트래픽 이벤트(세일, 런칭, 캠페인)에 대비
- 오프피크 시간대 비용 최적화
- 평일과 주말에 서로 다른 전략 적용
예시: 영업시간에는 "Optimize for Performance" preset을 실행하고, 야간에는 "Optimize for Cost" preset으로 전환합니다.
Scheduler 접근하기
- 사이드바에서 Deployments로 이동합니다
- 페이지 상단의 Schedules 탭을 클릭합니다
- 페이지에는 다음이 표시됩니다:
- 왼쪽: 예정된 이벤트를 모두 보여주는 월간 캘린더
- 오른쪽: 스케줄 목록과 사용 가능한 Autopilot Preset
핵심 개념
Schedules
특정 시간에 Autopilot Preset을 활성화하는 시간 기반 규칙입니다:
- Cron 표현식: 스케줄이 활성화되는 시점을 정의합니다(분, 시, 일, 월, 요일, 연도)
- Duration: preset이 활성 상태를 유지하는 시간(분)입니다
- Pre-execution: cron 시각보다 몇 분 먼저 활성화할지 설정하는 선택 항목입니다
- Multiple Presets: 하나의 schedule에서 배포마다 서로 다른 preset을 적용할 수 있습니다
예시: 하나의 schedule이 api-server에는 "Performance" preset을, worker 배포에는 "Cost" preset을 적용할 수 있습니다. 둘 다 월요일부터 금요일 오전 9시부터 오후 5시까지 실행됩니다.
Autopilot Presets
schedule에 할당할 수 있는 재사용 가능한 Autopilot 설정입니다:
- Autopilot Presets 카드에서 schedule과 별도로 생성합니다
- 전략, 임계값, min/max replica 등 모든 Autopilot 설정을 포함합니다
- 하나의 preset을 여러 schedule에서 사용할 수 있습니다
- 각 preset에는 설명이 담긴 제목이 필요합니다(예: "Business Hours Performance", "Weekend Cost Mode")
함께 동작하는 방식
- 서로 다른 설정으로 Autopilot Presets를 생성합니다
- cron 표현식으로 Schedule을 생성합니다
- schedule에 preset을 추가하고, 각 preset을 어떤 배포에 적용할지 선택합니다
- cron 시각이 되면 Wave가 지정된 배포에 preset을 적용합니다
- duration이 끝나면 배포는 기본 설정으로 돌아갑니다
첫 Schedule 만들기
1단계: 클러스터 선택
Schedules 탭 상단의 Cluster Selector 드롭다운에서 스케줄을 적용할 클러스터를 선택합니다.
2단계: Autopilot Preset 생성(필요한 경우)
schedule을 만들기 전에 Autopilot Preset이 필요합니다. 오른쪽 Autopilot Presets 카드에서:
- 카드 헤더의 "+" 버튼을 클릭합니다
- 모든 Autopilot 설정 옵션이 담긴 모달이 열립니다:
- Title: 설명이 담긴 이름을 입력합니다
- Strategy: Performance 또는 Cost
- Application Type: CPU Intensive 또는 Memory Intensive
- Thresholds: CPU%, Memory%, Network, Request 메트릭
- Min/Max Replicas: 스케일링 범위
- Cooldown Periods: stabilization 시간
- 그 외 다양한 옵션(자세한 내용은 Core Configuration 참고)
- Save를 클릭합니다
시나리오별로 여러 preset을 만들어 두세요(예: "Business Hours", "Off Hours", "Flash Sale").
3단계: Schedule 생성
오른쪽 Schedules 카드에서:
- 카드 헤더의 "+" 버튼을 클릭합니다
- 오른쪽에 schedule 입력 폼이 담긴 drawer가 열립니다
Basic Information
- Schedule Name: 설명이 담긴 이름(예: "Weekday Business Hours")
- Enabled: schedule을 활성화/비활성화하는 토글입니다(기본값: 활성화)
Cron Expression
6개의 개별 필드로 schedule이 활성화되는 시점을 정의합니다:
| Field | Values | Description | Example |
|---|---|---|---|
| Minutes | 0~59 | 시(hour) 내의 분 | 0 (정각) |
| Hours | 0~23 | 하루 중 시각(24시간제, UTC) | 9 (UTC 오전 9시) |
| Day of Month | 1~31 또는 * | 월 중 날짜 | * (매일) |
| Month | 1~12 또는 * | 연중 월 | * (매월) |
| Day of Week | 1~7 또는 * | 요일(1=일요일) | 2-6 (월~금) |
| Year | 4자리 또는 * | 특정 연도 | * (매년) |
자주 쓰는 패턴 (한국 시간 → UTC):
- 평일 오전 9시 KST:
0 0 * * 2-6 *(UTC 자정) - 매일 자정 KST:
0 15 * * * *(전날 UTC 오후 3시) - 매월 1일 오전 2시 KST:
0 17 1 * * *(전날 UTC 오후 5시) - 일요일 오전 3시 KST:
0 18 * * 7 *(토요일 UTC 오후 6시)
Minutes 필드에는 별표(asterisk)를 쓸 수 없습니다: Minutes 필드는 *가 아니라 반드시 특정 값(0~59)이어야 합니다. schedule이 매분 실행되는 것을 방지하기 위함입니다.
타임존 고려 사항: cron 표현식은 UTC 타임존을 기준으로 평가됩니다. 다른 타임존을 사용한다면 원하는 로컬 시각을 UTC로 변환해야 합니다.
한국(UTC+9) 기준:
- 한국 시간에서 9시간을 빼면 UTC가 됩니다
- 예시: KST 오전 9시 → UTC 0시(자정) → 시(hour)를
0으로 설정 - 예시: KST 오후 6시 → UTC 오전 9시 → 시(hour)를
9로 설정 - 예시: KST 오전 2시 → UTC 오후 5시(전날) → 시(hour)를
17로 설정
중요: KST 오전 9시 이전 시각은 UTC 기준 전날로 매핑됩니다. 이에 맞춰 day-of-week 필드도 조정하세요.
cron 필드 아래의 Future Executions 타임라인을 항상 확인하세요. 브라우저의 타임존 기준으로 예정된 실행 시각을 보여주므로 schedule이 올바른지 확인할 수 있습니다.
Timing Configuration
- Cron Pre-execution Minutes: cron 시각보다 몇 분 전에 preset을 시작할지 설정합니다(선택 항목, 기본값 0)
- 예시: cron이 오전 9시이고 pre-execution이 15분이면 preset은 오전 8시 45분에 활성화됩니다
- Duration (minutes): preset이 활성 상태를 유지하는 시간입니다(필수, 최소 1)
- 예시: Duration이 480이면 8시간입니다
활성 구간은 사전 실행 시간 + Duration이며, 사전 실행이 시작되는 시점부터 잽니다. cron이 오전 9시, 사전 실행 15분, Duration 480분이면 preset은 오전 8시 45분부터 오후 4시 45분까지, 총 495분 동안 활성 상태입니다.
Wave 3.4.1에서 수정되었습니다. 이전 버전은 구간의 끝을 사전 실행 시작이 아니라 cron 시각부터 계산해서, 미리보기에서는 사전 실행 + Duration 동안 유지되는 것처럼 보이지만 실제로는 Duration만큼만 유지됐습니다. 그래서 워크로드가 사전 실행 시간만큼 일찍 기본 설정으로 돌아갔습니다. 같은 수정으로, 이전에는 아예 활성화되지 않던 두 가지 경우도 함께 해결됐습니다. 사전 실행 시간이 cron 발생 간격보다 긴 경우와, 발생 시각의 정확히 그 초에 스케줄이 평가되는 경우입니다.
Add Autopilot Presets
이제 preset을 배포에 할당합니다:
- **"+ Add Autopilot Preset"**을 클릭합니다
- preset 카드가 나타나며 다음을 포함합니다:
- Config dropdown: 사용할 Autopilot Preset을 선택합니다
- Deployment selector: 트리 기반 transfer 컴포넌트로 다음을 보여줍니다:
- 왼쪽 패널: namespace → deployment 트리
- 오른쪽 패널: 선택된 deployment
- 트리에서 deployment를 선택해 오른쪽 패널로 옮깁니다
- 배포마다 다른 설정을 적용하려면 이 과정을 반복해 preset을 추가하세요
검증 규칙:
- 각 preset은 서로 다른 Autopilot Preset config를 사용해야 합니다(중복 불가)
- 하나의 schedule 안에서 각 deployment는 preset 하나에만 할당할 수 있습니다
- 동일한 deployment를 두 번 추가하려고 하면 오류가 표시됩니다
4단계: 저장 및 확인
- 오른쪽 하단의 Save를 클릭합니다
- schedule이 Schedules 목록에 다음과 함께 나타납니다:
- 색이 입혀진 왼쪽 테두리(schedule마다 고유한 색)
- schedule 제목
- cron 표현식과 duration을 보여주는 설명
- schedule은 왼쪽 캘린더에도 표시되어 실행 시점을 보여줍니다
Schedules 탭 이해하기
캘린더 뷰 (왼쪽)
월간 캘린더에 예정된 이벤트가 표시됩니다:
- 색상 점: schedule마다 고유한 색이 있습니다(ID로부터 생성)
- 이벤트 날짜: 각 schedule의 cron 표현식을 기준으로 실행 시점을 보여줍니다
- 탐색: 화살표로 다른 월을 확인할 수 있습니다
- 필터링: 캘린더는 현재 보이는 날짜 범위만 자동으로 필터링해 보여줍니다
Schedules 목록 (오른쪽 상단 카드)
선택한 클러스터의 모든 schedule입니다:
- 색상 테두리: 캘린더 이벤트와 매칭되는 시각적 표시입니다
- Title: schedule 이름
- Description: cron 표현식과 duration 요약
- Status: 비활성화된 schedule은 투명도가 낮게(30%) 표시됩니다
- Count: 하단에 전체 schedule 개수가 표시됩니다
- 클릭해서 편집: schedule을 클릭하면 drawer에서 열립니다
Autopilot Presets 목록 (오른쪽 하단 카드)
사용 가능한 모든 Autopilot Preset입니다:
- preset 설정 목록
- 클릭하면 preset 설정을 편집할 수 있습니다
- 이 preset들은 schedule에 할당할 수 있습니다
자주 쓰는 스케줄링 패턴
패턴 1: 영업시간 vs 비영업시간
활용 사례: 평일 트래픽이 있는 B2B SaaS
1단계: Preset 생성:
Autopilot Preset 3개를 생성합니다:
- "Business Hours Performance"
- Strategy: Optimize for Performance
- Min Replicas: 8, Max Replicas: 30
- "Off Hours Cost Savings"
- Strategy: Optimize for Cost
- Min Replicas: 2, Max Replicas: 10
- "Weekend Mode"
- Strategy: Optimize for Cost
- Min Replicas: 1, Max Replicas: 8
2단계: Schedule 생성:
Schedule 1: "Weekday Business Hours"
Cron: 0 0 * * 2-6 * (9 AM KST Monday-Friday = midnight UTC)
Duration: 540 minutes (9 hours, ends at 6 PM KST)
Preset: "Business Hours Performance" → api-server, web-appSchedule 2: "Weekday Nights"
Cron: 0 9 * * 2-6 * (6 PM KST Monday-Friday = 9 AM UTC)
Duration: 900 minutes (15 hours, ends at 9 AM KST next day)
Preset: "Off Hours Cost Savings" → api-server, web-appSchedule 3: "Weekends"
Cron: 0 15 * * 6,7 * (Midnight KST Sat & Sun = 3 PM UTC Fri & Sat)
Duration: 1440 minutes (24 hours)
Preset: "Weekend Mode" → api-server, web-app패턴 2: 플래시 세일 이벤트
활용 사례: 이커머스 프로모션 세일
Preset: "Black Friday Sale"
- Strategy: Optimize for Performance
- Min Replicas: 25, Max Replicas: 100
- Predictive Scaling: Enabled
Schedule: "Black Friday 2025"
Cron: 0 23 27 11 * 2025 (Nov 28, 2025 8 AM KST = Nov 27 11 PM UTC)
Pre-execution: 30 minutes (starts at 7:30 AM KST)
Duration: 720 minutes (12 hours, ends at 8 PM KST)
Preset: "Black Friday Sale" → checkout-service, product-api, payment-service이렇게 동작하는 이유:
- Pre-execution으로 30분 일찍 스케일링을 시작합니다
- 세일 시간 내내 높은 용량을 유지합니다
- 2025년의 특정 날짜로 지정해 일회성 이벤트로 만듭니다
패턴 3: 주간 유지보수 기간
활용 사례: 매주 일요일 아침 예정된 유지보수
Preset: "Maintenance Mode"
- Strategy: Optimize for Performance
- Min Replicas: 10, Max Replicas: 10 (고정)
- Gradual Scaling: 300초 (매우 보수적)
Schedule: "Sunday Maintenance"
Cron: 0 17 * * 7 * (2 AM KST Sunday = 5 PM UTC Saturday)
Duration: 120 minutes (2 hours)
Preset: "Maintenance Mode" → backend-api이유: 배포 중에도 replica 수(10)를 고정해 scale-up도 scale-down도 하지 않습니다.
패턴 4: 서비스별 계층형 스케일링
활용 사례: 피크 시간에 서비스마다 다른 설정이 필요한 경우
Presets:
- "Peak Performance" - Min: 20, Max: 80
- "Peak Moderate" - Min: 10, Max: 40
- "Peak Light" - Min: 5, Max: 20
Schedule: "Weekday Peak Hours"
Cron: 0 1 * * 2-6 * (10 AM KST weekdays = 1 AM UTC)
Duration: 420 minutes (7 hours, ends at 5 PM KST)
Preset Mappings:
- "Peak Performance" → checkout-api, payment-service (critical services)
- "Peak Moderate" → product-api, user-service (medium load)
- "Peak Light" → analytics-worker, email-service (background jobs)이유: 하나의 schedule로 서비스 계층마다 다른 설정을 적용합니다.
Schedule 동작 방식
실행 흐름
- Cron Trigger: cron 표현식이 현재 시각과 일치할 때
- Pre-execution(설정된 경우): cron 시각보다 먼저 활성화
- Preset Application: 각 preset이 할당된 deployment에 적용됨
- Active Duration: 설정된 시간(분) 동안 preset이 활성 상태 유지
- Return to Default: duration이 끝나면 deployment는 기본 설정을 사용
캘린더 표시
캘린더는 cron 표현식으로 계산된 모든 향후 실행 날짜를 보여줍니다:
- cron을 기반으로 동적으로 생성됩니다
- 대략 다음 10~20회의 실행을 보여줍니다
- 보이는 월을 변경하면 자동으로 업데이트됩니다
- 색상 점은 schedule 고유의 색과 일치합니다
Cron 표현식 팁
자주 쓰는 Cron 패턴 (한국 시간 → UTC):
Every weekday 9 AM KST: 0 0 * * 2-6 * (midnight UTC)
Every day midnight KST: 0 15 * * * * (3 PM UTC prev day)
Monday mornings 8 AM KST: 0 23 * * 1 * (11 PM UTC Sunday)
First of month 2 AM KST: 0 17 1 * * * (5 PM UTC prev day)
Every 6 hours from 0 KST: 0 15,21,3,9 * * * * (6-hour intervals in UTC)
Weekend mornings 10 AM KST: 0 1 * * 1,7 * (1 AM UTC Sat & Sun)
Specific date/time: 0 5 25 12 * 2025 (Dec 25, 2025 2 PM KST = 5 AM UTC)테스트: cron이 의도대로 동작하는지 항상 "Future Executions" 타임라인으로 확인하세요!
문제 해결
Schedule이 활성화되지 않나요?
- Schedule이 활성화(toggle on)되어 있는지 확인하세요
- cron 표현식이 유효한지 확인하세요(Future Executions 타임라인 확인)
- 드롭다운에서 올바른 클러스터를 선택했는지 확인하세요
- preset mapping에서 deployment가 제대로 선택되었는지 확인하세요
- deployment/namespace 이름에 오타가 없는지 확인하세요
Cron 표현식이 유효하지 않나요?
- Minutes는 0~59 사이여야 합니다(
*불가) - Day of week는 1~7 사이여야 합니다(1=일요일)
- 6개 필드 모두 필수입니다
- 값이 유효한 범위 내에 있어야 합니다
엉뚱한 설정이 적용되나요?
- schedule이 겹치지 않는지 확인하세요(캘린더 뷰)
- 올바른 preset이 선택되었는지 확인하세요
- TreeTransfer에서 deployment 선택을 확인하세요
- duration이 충분히 긴지 확인하세요
Preset을 사용할 수 없나요?
- 각 preset은 schedule마다 한 번만 사용할 수 있습니다
- preset이 삭제되었을 수 있습니다
캘린더가 비어 있나요?
- 올바른 클러스터가 선택되었는지 확인하세요
- schedule이 향후 월에 있는지 확인하세요
- schedule이 활성화되어 있는지 확인하세요
관련 문서
- Getting Started: 기본 Autopilot 설정과 기본값
- Core Configuration: Autopilot Preset에서 사용 가능한 전체 설정
- Predictive Scaling: schedule과 함께 사용하면 최적의 결과를 얻을 수 있습니다
- Timing Controls: 예정된 설정 간 전환을 구성합니다