@kadi.build/deploy-ability 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +523 -0
- package/dist/constants.d.ts +82 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +82 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors/certificate-error.d.ts +95 -0
- package/dist/errors/certificate-error.d.ts.map +1 -0
- package/dist/errors/certificate-error.js +111 -0
- package/dist/errors/certificate-error.js.map +1 -0
- package/dist/errors/deployment-error.d.ts +122 -0
- package/dist/errors/deployment-error.d.ts.map +1 -0
- package/dist/errors/deployment-error.js +185 -0
- package/dist/errors/deployment-error.js.map +1 -0
- package/dist/errors/index.d.ts +13 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +18 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/profile-error.d.ts +106 -0
- package/dist/errors/profile-error.d.ts.map +1 -0
- package/dist/errors/profile-error.js +127 -0
- package/dist/errors/profile-error.js.map +1 -0
- package/dist/errors/provider-error.d.ts +104 -0
- package/dist/errors/provider-error.d.ts.map +1 -0
- package/dist/errors/provider-error.js +120 -0
- package/dist/errors/provider-error.js.map +1 -0
- package/dist/errors/wallet-error.d.ts +131 -0
- package/dist/errors/wallet-error.d.ts.map +1 -0
- package/dist/errors/wallet-error.js +154 -0
- package/dist/errors/wallet-error.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/targets/akash/bid-selectors.d.ts +251 -0
- package/dist/targets/akash/bid-selectors.d.ts.map +1 -0
- package/dist/targets/akash/bid-selectors.js +322 -0
- package/dist/targets/akash/bid-selectors.js.map +1 -0
- package/dist/targets/akash/bid-types.d.ts +297 -0
- package/dist/targets/akash/bid-types.d.ts.map +1 -0
- package/dist/targets/akash/bid-types.js +89 -0
- package/dist/targets/akash/bid-types.js.map +1 -0
- package/dist/targets/akash/blockchain-client.d.ts +577 -0
- package/dist/targets/akash/blockchain-client.d.ts.map +1 -0
- package/dist/targets/akash/blockchain-client.js +803 -0
- package/dist/targets/akash/blockchain-client.js.map +1 -0
- package/dist/targets/akash/certificate-manager.d.ts +228 -0
- package/dist/targets/akash/certificate-manager.d.ts.map +1 -0
- package/dist/targets/akash/certificate-manager.js +395 -0
- package/dist/targets/akash/certificate-manager.js.map +1 -0
- package/dist/targets/akash/constants.d.ts +231 -0
- package/dist/targets/akash/constants.d.ts.map +1 -0
- package/dist/targets/akash/constants.js +225 -0
- package/dist/targets/akash/constants.js.map +1 -0
- package/dist/targets/akash/deployer.d.ts +136 -0
- package/dist/targets/akash/deployer.d.ts.map +1 -0
- package/dist/targets/akash/deployer.js +599 -0
- package/dist/targets/akash/deployer.js.map +1 -0
- package/dist/targets/akash/environment.d.ts +241 -0
- package/dist/targets/akash/environment.d.ts.map +1 -0
- package/dist/targets/akash/environment.js +245 -0
- package/dist/targets/akash/environment.js.map +1 -0
- package/dist/targets/akash/index.d.ts +1113 -0
- package/dist/targets/akash/index.d.ts.map +1 -0
- package/dist/targets/akash/index.js +909 -0
- package/dist/targets/akash/index.js.map +1 -0
- package/dist/targets/akash/lease-monitor.d.ts +51 -0
- package/dist/targets/akash/lease-monitor.d.ts.map +1 -0
- package/dist/targets/akash/lease-monitor.js +110 -0
- package/dist/targets/akash/lease-monitor.js.map +1 -0
- package/dist/targets/akash/logs.d.ts +71 -0
- package/dist/targets/akash/logs.d.ts.map +1 -0
- package/dist/targets/akash/logs.js +311 -0
- package/dist/targets/akash/logs.js.map +1 -0
- package/dist/targets/akash/logs.types.d.ts +102 -0
- package/dist/targets/akash/logs.types.d.ts.map +1 -0
- package/dist/targets/akash/logs.types.js +9 -0
- package/dist/targets/akash/logs.types.js.map +1 -0
- package/dist/targets/akash/pricing.d.ts +247 -0
- package/dist/targets/akash/pricing.d.ts.map +1 -0
- package/dist/targets/akash/pricing.js +246 -0
- package/dist/targets/akash/pricing.js.map +1 -0
- package/dist/targets/akash/provider-client.d.ts +114 -0
- package/dist/targets/akash/provider-client.d.ts.map +1 -0
- package/dist/targets/akash/provider-client.js +318 -0
- package/dist/targets/akash/provider-client.js.map +1 -0
- package/dist/targets/akash/provider-metadata.d.ts +228 -0
- package/dist/targets/akash/provider-metadata.d.ts.map +1 -0
- package/dist/targets/akash/provider-metadata.js +14 -0
- package/dist/targets/akash/provider-metadata.js.map +1 -0
- package/dist/targets/akash/provider-service.d.ts +133 -0
- package/dist/targets/akash/provider-service.d.ts.map +1 -0
- package/dist/targets/akash/provider-service.js +391 -0
- package/dist/targets/akash/provider-service.js.map +1 -0
- package/dist/targets/akash/query-client.d.ts +125 -0
- package/dist/targets/akash/query-client.d.ts.map +1 -0
- package/dist/targets/akash/query-client.js +332 -0
- package/dist/targets/akash/query-client.js.map +1 -0
- package/dist/targets/akash/sdl-generator.d.ts +31 -0
- package/dist/targets/akash/sdl-generator.d.ts.map +1 -0
- package/dist/targets/akash/sdl-generator.js +279 -0
- package/dist/targets/akash/sdl-generator.js.map +1 -0
- package/dist/targets/akash/types.d.ts +285 -0
- package/dist/targets/akash/types.d.ts.map +1 -0
- package/dist/targets/akash/types.js +54 -0
- package/dist/targets/akash/types.js.map +1 -0
- package/dist/targets/akash/wallet-manager.d.ts +526 -0
- package/dist/targets/akash/wallet-manager.d.ts.map +1 -0
- package/dist/targets/akash/wallet-manager.js +953 -0
- package/dist/targets/akash/wallet-manager.js.map +1 -0
- package/dist/targets/local/compose-generator.d.ts +244 -0
- package/dist/targets/local/compose-generator.d.ts.map +1 -0
- package/dist/targets/local/compose-generator.js +324 -0
- package/dist/targets/local/compose-generator.js.map +1 -0
- package/dist/targets/local/deployer.d.ts +82 -0
- package/dist/targets/local/deployer.d.ts.map +1 -0
- package/dist/targets/local/deployer.js +367 -0
- package/dist/targets/local/deployer.js.map +1 -0
- package/dist/targets/local/engine-manager.d.ts +155 -0
- package/dist/targets/local/engine-manager.d.ts.map +1 -0
- package/dist/targets/local/engine-manager.js +250 -0
- package/dist/targets/local/engine-manager.js.map +1 -0
- package/dist/targets/local/index.d.ts +40 -0
- package/dist/targets/local/index.d.ts.map +1 -0
- package/dist/targets/local/index.js +43 -0
- package/dist/targets/local/index.js.map +1 -0
- package/dist/targets/local/network-manager.d.ts +160 -0
- package/dist/targets/local/network-manager.d.ts.map +1 -0
- package/dist/targets/local/network-manager.js +337 -0
- package/dist/targets/local/network-manager.js.map +1 -0
- package/dist/targets/local/types.d.ts +327 -0
- package/dist/targets/local/types.d.ts.map +1 -0
- package/dist/targets/local/types.js +9 -0
- package/dist/targets/local/types.js.map +1 -0
- package/dist/types/common.d.ts +585 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +13 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/options.d.ts +329 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/options.js +10 -0
- package/dist/types/options.js.map +1 -0
- package/dist/types/profiles.d.ts +329 -0
- package/dist/types/profiles.d.ts.map +1 -0
- package/dist/types/profiles.js +27 -0
- package/dist/types/profiles.js.map +1 -0
- package/dist/types/results.d.ts +443 -0
- package/dist/types/results.d.ts.map +1 -0
- package/dist/types/results.js +64 -0
- package/dist/types/results.js.map +1 -0
- package/dist/types/validators.d.ts +118 -0
- package/dist/types/validators.d.ts.map +1 -0
- package/dist/types/validators.js +198 -0
- package/dist/types/validators.js.map +1 -0
- package/dist/utils/command-runner.d.ts +128 -0
- package/dist/utils/command-runner.d.ts.map +1 -0
- package/dist/utils/command-runner.js +210 -0
- package/dist/utils/command-runner.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +68 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +93 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/profile-loader.d.ts +76 -0
- package/dist/utils/profile-loader.d.ts.map +1 -0
- package/dist/utils/profile-loader.js +194 -0
- package/dist/utils/profile-loader.js.map +1 -0
- package/dist/utils/registry/index.d.ts +27 -0
- package/dist/utils/registry/index.d.ts.map +1 -0
- package/dist/utils/registry/index.js +29 -0
- package/dist/utils/registry/index.js.map +1 -0
- package/dist/utils/registry/manager.d.ts +319 -0
- package/dist/utils/registry/manager.d.ts.map +1 -0
- package/dist/utils/registry/manager.js +671 -0
- package/dist/utils/registry/manager.js.map +1 -0
- package/dist/utils/registry/setup.d.ts +135 -0
- package/dist/utils/registry/setup.d.ts.map +1 -0
- package/dist/utils/registry/setup.js +207 -0
- package/dist/utils/registry/setup.js.map +1 -0
- package/dist/utils/registry/transformer.d.ts +92 -0
- package/dist/utils/registry/transformer.d.ts.map +1 -0
- package/dist/utils/registry/transformer.js +131 -0
- package/dist/utils/registry/transformer.js.map +1 -0
- package/dist/utils/registry/types.d.ts +241 -0
- package/dist/utils/registry/types.d.ts.map +1 -0
- package/dist/utils/registry/types.js +10 -0
- package/dist/utils/registry/types.js.map +1 -0
- package/docs/EXAMPLES.md +293 -0
- package/docs/PLACEMENT.md +433 -0
- package/docs/STORAGE.md +318 -0
- package/docs/building-provider-reliability-tracker.md +2581 -0
- package/package.json +109 -0
package/docs/STORAGE.md
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
## Understanding Storage Configuration
|
|
2
|
+
|
|
3
|
+
One of the most common questions when configuring deployments is: **"What's the difference between memory and storage?"**
|
|
4
|
+
|
|
5
|
+
This section explains how to configure resources in your `agent.json` deployment profiles.
|
|
6
|
+
|
|
7
|
+
### Three Types of Resources
|
|
8
|
+
|
|
9
|
+
When deploying containers, you work with three distinct resource types:
|
|
10
|
+
|
|
11
|
+
| Resource | Medium | Speed | Volatility | Use Cases |
|
|
12
|
+
|----------|--------|-------|------------|-----------|
|
|
13
|
+
| **memory** | RAM | Nanoseconds | Lost on crash | Running processes, hot caches, application state |
|
|
14
|
+
| **ephemeralStorage** | Disk | Milliseconds | Lost on restart | Container root FS, /tmp, temporary files, logs |
|
|
15
|
+
| **persistentVolumes** | Disk | Milliseconds | Survives restarts | Database files, user uploads, ML models |
|
|
16
|
+
|
|
17
|
+
### Memory vs Storage
|
|
18
|
+
|
|
19
|
+
**Memory (RAM):**
|
|
20
|
+
- **What it is:** System memory for your application's runtime
|
|
21
|
+
- **Speed:** Extremely fast (nanoseconds)
|
|
22
|
+
- **Cleared:** Immediately when container stops or crashes
|
|
23
|
+
- **Use for:** JavaScript heap, database query cache, in-memory data structures
|
|
24
|
+
- **Example:** A Node.js process with `"memory": "1Gi"` can use up to 1GB RAM
|
|
25
|
+
|
|
26
|
+
**Ephemeral Storage (Disk):**
|
|
27
|
+
- **What it is:** The container's root filesystem (where your code runs)
|
|
28
|
+
- **Speed:** Slower than RAM but faster than network (milliseconds)
|
|
29
|
+
- **Cleared:** When container **restarts** (intentional or crash)
|
|
30
|
+
- **Use for:** Container's root filesystem (`/`, `/tmp`, `/var/log`), temporary processing files
|
|
31
|
+
- **Example:** A container needs space for binaries, system files, and temporary logs
|
|
32
|
+
|
|
33
|
+
**Persistent Volumes (Disk):**
|
|
34
|
+
- **What it is:** Named disk volumes mounted at specific paths
|
|
35
|
+
- **Speed:** Similar to ephemeral storage (milliseconds)
|
|
36
|
+
- **Cleared:** **Never** (persists for the lease duration, survives restarts)
|
|
37
|
+
- **Use for:** Database files, user uploads, ML model weights, config that must survive restarts
|
|
38
|
+
- **Example:** PostgreSQL data directory at `/var/lib/postgresql/data`
|
|
39
|
+
|
|
40
|
+
### Real-World Analogy
|
|
41
|
+
|
|
42
|
+
Think of your deployment like an office workspace:
|
|
43
|
+
|
|
44
|
+
- **Memory (RAM)** = Your **desk**
|
|
45
|
+
- Everything you're actively working on right now
|
|
46
|
+
- Instant access
|
|
47
|
+
- Cleared when you leave (container stops)
|
|
48
|
+
|
|
49
|
+
- **Ephemeral Storage** = **Whiteboard in your office**
|
|
50
|
+
- Quick access for temporary notes
|
|
51
|
+
- Walk a few steps to get there
|
|
52
|
+
- Erased at end of day (container restarts)
|
|
53
|
+
|
|
54
|
+
- **Persistent Storage** = **Filing cabinet**
|
|
55
|
+
- Long-term storage for important documents
|
|
56
|
+
- Slower to access (open drawer, find file)
|
|
57
|
+
- Stays forever (survives restarts, persists for lease)
|
|
58
|
+
|
|
59
|
+
### Configuration Format
|
|
60
|
+
|
|
61
|
+
Here's how to configure resources in your `agent.json`:
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"deploy": {
|
|
66
|
+
"my-profile": {
|
|
67
|
+
"target": "akash",
|
|
68
|
+
"network": "mainnet",
|
|
69
|
+
"services": {
|
|
70
|
+
"gateway": {
|
|
71
|
+
"image": "my-app:latest",
|
|
72
|
+
"resources": {
|
|
73
|
+
"cpu": 0.5,
|
|
74
|
+
"memory": "1Gi",
|
|
75
|
+
"ephemeralStorage": "512Mi",
|
|
76
|
+
"persistentVolumes": [
|
|
77
|
+
{
|
|
78
|
+
"name": "data",
|
|
79
|
+
"size": "10Gi",
|
|
80
|
+
"mount": "/data",
|
|
81
|
+
"class": "beta2"
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**What this means:**
|
|
93
|
+
- **cpu: 0.5** → Half a CPU core for processing
|
|
94
|
+
- **memory: "1Gi"** → 1GB RAM for Node.js runtime, request handling, caches
|
|
95
|
+
- **ephemeralStorage: "512Mi"** → 512MB disk for container root FS, /tmp, logs
|
|
96
|
+
- **persistentVolumes** → 10GB disk mounted at `/data` that survives restarts
|
|
97
|
+
|
|
98
|
+
### Storage Classes (Persistent Volumes Only)
|
|
99
|
+
|
|
100
|
+
When using persistent volumes, you can specify the storage class (performance tier):
|
|
101
|
+
|
|
102
|
+
| Class | Type | Speed | Cost | Use Cases |
|
|
103
|
+
|-------|------|-------|------|-----------|
|
|
104
|
+
| **beta1** | HDD | Slow | Cheapest | Cold storage, backups, archives |
|
|
105
|
+
| **beta2** | SSD | Balanced | Moderate | Most workloads, databases, general purpose |
|
|
106
|
+
| **beta3** | NVMe | Fastest | Most expensive | High-IOPS databases, real-time processing |
|
|
107
|
+
| **ram** | Memory | Ultra-fast | Very expensive | Ultra-low latency, temporary in-memory storage |
|
|
108
|
+
|
|
109
|
+
**Recommendation:** Use `beta2` (SSD) for most workloads. Only upgrade to `beta3` if you need high IOPS.
|
|
110
|
+
|
|
111
|
+
### Example Configurations
|
|
112
|
+
|
|
113
|
+
#### Simple API Server (No Persistent Storage)
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"resources": {
|
|
118
|
+
"cpu": 0.5,
|
|
119
|
+
"memory": "512Mi",
|
|
120
|
+
"ephemeralStorage": "1Gi"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Why:** A stateless API server doesn't need persistent storage. Everything runs in memory or ephemeral disk.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
#### Database Server (Persistent Storage Required)
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"resources": {
|
|
134
|
+
"cpu": 2,
|
|
135
|
+
"memory": "4Gi",
|
|
136
|
+
"ephemeralStorage": "2Gi",
|
|
137
|
+
"persistentVolumes": [
|
|
138
|
+
{
|
|
139
|
+
"name": "pgdata",
|
|
140
|
+
"size": "50Gi",
|
|
141
|
+
"mount": "/var/lib/postgresql/data",
|
|
142
|
+
"class": "beta2"
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Why:** PostgreSQL needs persistent storage for database files. If the container restarts without it, all data is lost!
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
#### LLM Inference Server (Large Model Weights)
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"resources": {
|
|
158
|
+
"cpu": 4,
|
|
159
|
+
"memory": "16Gi",
|
|
160
|
+
"ephemeralStorage": "10Gi",
|
|
161
|
+
"persistentVolumes": [
|
|
162
|
+
{
|
|
163
|
+
"name": "models",
|
|
164
|
+
"size": "100Gi",
|
|
165
|
+
"mount": "/models",
|
|
166
|
+
"class": "beta3"
|
|
167
|
+
}
|
|
168
|
+
],
|
|
169
|
+
"gpu": {
|
|
170
|
+
"units": 1,
|
|
171
|
+
"attributes": {
|
|
172
|
+
"vendor": {
|
|
173
|
+
"nvidia": [{ "model": "rtx4090" }]
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**Why:**
|
|
182
|
+
- **16Gi memory** → Large RAM for model inference
|
|
183
|
+
- **10Gi ephemeral** → Space for temporary request processing
|
|
184
|
+
- **100Gi persistent (NVMe)** → Fast storage for loading 70B+ model weights
|
|
185
|
+
- **GPU** → Required for fast inference
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
#### Multi-Volume Setup (Cache + Data)
|
|
190
|
+
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"resources": {
|
|
194
|
+
"cpu": 1,
|
|
195
|
+
"memory": "2Gi",
|
|
196
|
+
"ephemeralStorage": "1Gi",
|
|
197
|
+
"persistentVolumes": [
|
|
198
|
+
{
|
|
199
|
+
"name": "data",
|
|
200
|
+
"size": "20Gi",
|
|
201
|
+
"mount": "/data",
|
|
202
|
+
"class": "beta2"
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"name": "cache",
|
|
206
|
+
"size": "10Gi",
|
|
207
|
+
"mount": "/cache",
|
|
208
|
+
"class": "beta1"
|
|
209
|
+
}
|
|
210
|
+
]
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Why:** Separate volumes for critical data (SSD) and less critical cache (HDD for cost savings).
|
|
216
|
+
|
|
217
|
+
### Common Mistakes to Avoid
|
|
218
|
+
|
|
219
|
+
**Confusing memory with storage**
|
|
220
|
+
```json
|
|
221
|
+
// WRONG - Trying to use memory for file storage
|
|
222
|
+
"memory": "50Gi" // Expensive! Use persistentVolumes instead
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**Correct approach**
|
|
226
|
+
```json
|
|
227
|
+
"memory": "4Gi", // Only for runtime
|
|
228
|
+
"persistentVolumes": [
|
|
229
|
+
{ "name": "data", "size": "50Gi", ... } // For file storage
|
|
230
|
+
]
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
**Not using persistent volumes for databases**
|
|
236
|
+
```json
|
|
237
|
+
// WRONG - Database data will be LOST on restart!
|
|
238
|
+
"ephemeralStorage": "50Gi"
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Correct approach**
|
|
242
|
+
```json
|
|
243
|
+
"ephemeralStorage": "2Gi", // Just for root FS
|
|
244
|
+
"persistentVolumes": [
|
|
245
|
+
{ "name": "db", "size": "50Gi", "mount": "/var/lib/postgresql/data", "class": "beta2" }
|
|
246
|
+
]
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
**Forgetting ephemeralStorage**
|
|
252
|
+
```json
|
|
253
|
+
// WRONG - Missing ephemeralStorage (will use default 1Gi)
|
|
254
|
+
"resources": {
|
|
255
|
+
"cpu": 1,
|
|
256
|
+
"memory": "2Gi",
|
|
257
|
+
"persistentVolumes": [...]
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
**Correct approach**
|
|
262
|
+
```json
|
|
263
|
+
"resources": {
|
|
264
|
+
"cpu": 1,
|
|
265
|
+
"memory": "2Gi",
|
|
266
|
+
"ephemeralStorage": "2Gi", // Explicitly set
|
|
267
|
+
"persistentVolumes": [...]
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Quick Decision Guide
|
|
272
|
+
|
|
273
|
+
**Use this flowchart to decide what storage you need:**
|
|
274
|
+
|
|
275
|
+
```
|
|
276
|
+
Need to store data?
|
|
277
|
+
├─ No → Just set memory + ephemeralStorage
|
|
278
|
+
├─ Yes → Does it need to survive restarts?
|
|
279
|
+
├─ No → Use ephemeralStorage (temporary files, caches)
|
|
280
|
+
└─ Yes → Use persistentVolumes
|
|
281
|
+
└─ How fast does it need to be?
|
|
282
|
+
├─ Normal → beta2 (SSD)
|
|
283
|
+
├─ Very fast → beta3 (NVMe)
|
|
284
|
+
└─ Cost-sensitive → beta1 (HDD)
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### TypeScript Types
|
|
288
|
+
|
|
289
|
+
For programmatic deployment, here are the relevant TypeScript types:
|
|
290
|
+
|
|
291
|
+
```typescript
|
|
292
|
+
import type { ResourceRequirements, PersistentVolumeSpec } from 'deploy-ability';
|
|
293
|
+
|
|
294
|
+
const resources: ResourceRequirements = {
|
|
295
|
+
cpu: 0.5,
|
|
296
|
+
memory: "1Gi", // RAM for application runtime
|
|
297
|
+
ephemeralStorage: "512Mi", // Container root filesystem
|
|
298
|
+
persistentVolumes: [ // Optional: named volumes
|
|
299
|
+
{
|
|
300
|
+
name: "data",
|
|
301
|
+
size: "10Gi",
|
|
302
|
+
mount: "/data",
|
|
303
|
+
class: "beta2" // Optional: defaults to beta2
|
|
304
|
+
}
|
|
305
|
+
],
|
|
306
|
+
gpu: { // Optional: GPU requirements
|
|
307
|
+
units: 1,
|
|
308
|
+
attributes: {
|
|
309
|
+
vendor: {
|
|
310
|
+
nvidia: [{ model: "rtx4090" }]
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|