@plazmodium/odin 0.3.2-beta → 0.3.4-beta
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 +82 -11
- package/builtin/ODIN.md +1045 -0
- package/builtin/agent-definitions/README.md +170 -0
- package/builtin/agent-definitions/_shared-context.md +377 -0
- package/builtin/agent-definitions/architect.md +627 -0
- package/builtin/agent-definitions/builder.md +716 -0
- package/builtin/agent-definitions/discovery.md +293 -0
- package/builtin/agent-definitions/documenter.md +238 -0
- package/builtin/agent-definitions/guardian.md +1049 -0
- package/builtin/agent-definitions/integrator.md +363 -0
- package/builtin/agent-definitions/planning.md +236 -0
- package/builtin/agent-definitions/product.md +405 -0
- package/builtin/agent-definitions/release.md +430 -0
- package/builtin/agent-definitions/reviewer.md +447 -0
- package/builtin/agent-definitions/watcher.md +402 -0
- package/builtin/skills/api/graphql/SKILL.md +548 -0
- package/builtin/skills/api/grpc/SKILL.md +554 -0
- package/builtin/skills/api/rest-api/SKILL.md +469 -0
- package/builtin/skills/api/trpc/SKILL.md +503 -0
- package/builtin/skills/architecture/clean-architecture/SKILL.md +141 -0
- package/builtin/skills/architecture/domain-driven-design/SKILL.md +129 -0
- package/builtin/skills/architecture/event-driven/SKILL.md +145 -0
- package/builtin/skills/architecture/microservices/SKILL.md +143 -0
- package/builtin/skills/architecture/tla-precheck/SKILL.md +171 -0
- package/builtin/skills/backend/golang-gin/SKILL.md +141 -0
- package/builtin/skills/backend/nodejs-express/SKILL.md +277 -0
- package/builtin/skills/backend/nodejs-fastify/SKILL.md +152 -0
- package/builtin/skills/backend/python-django/SKILL.md +128 -0
- package/builtin/skills/backend/python-fastapi/SKILL.md +140 -0
- package/builtin/skills/database/mongodb/SKILL.md +132 -0
- package/builtin/skills/database/postgresql/SKILL.md +120 -0
- package/builtin/skills/database/prisma-orm/SKILL.md +366 -0
- package/builtin/skills/database/redis/SKILL.md +140 -0
- package/builtin/skills/database/supabase/SKILL.md +416 -0
- package/builtin/skills/devops/aws/SKILL.md +382 -0
- package/builtin/skills/devops/docker/SKILL.md +359 -0
- package/builtin/skills/devops/github-actions/SKILL.md +435 -0
- package/builtin/skills/devops/kubernetes/SKILL.md +459 -0
- package/builtin/skills/devops/terraform/SKILL.md +453 -0
- package/builtin/skills/frontend/alpine-dev/SKILL.md +27 -0
- package/builtin/skills/frontend/angular-dev/SKILL.md +28 -0
- package/builtin/skills/frontend/astro-dev/SKILL.md +28 -0
- package/builtin/skills/frontend/htmx-dev/SKILL.md +28 -0
- package/builtin/skills/frontend/nextjs-dev/SKILL.md +470 -0
- package/builtin/skills/frontend/react-patterns/SKILL.md +166 -0
- package/builtin/skills/frontend/svelte-dev/SKILL.md +28 -0
- package/builtin/skills/frontend/tailwindcss/SKILL.md +131 -0
- package/builtin/skills/frontend/vuejs-dev/SKILL.md +28 -0
- package/builtin/skills/generic-dev/SKILL.md +307 -0
- package/builtin/skills/testing/cypress/SKILL.md +372 -0
- package/builtin/skills/testing/jest/SKILL.md +176 -0
- package/builtin/skills/testing/playwright/SKILL.md +341 -0
- package/builtin/skills/testing/unit-tests-eval-sdd/SKILL.md +73 -0
- package/builtin/skills/testing/unit-tests-sdd/SKILL.md +83 -0
- package/builtin/skills/testing/vitest/SKILL.md +249 -0
- package/dist/adapters/skills/filesystem.d.ts.map +1 -1
- package/dist/adapters/skills/filesystem.js +2 -18
- package/dist/adapters/skills/filesystem.js.map +1 -1
- package/dist/builtin-assets.d.ts +8 -0
- package/dist/builtin-assets.d.ts.map +1 -0
- package/dist/builtin-assets.js +90 -0
- package/dist/builtin-assets.js.map +1 -0
- package/dist/init.js +69 -11
- package/dist/init.js.map +1 -1
- package/dist/schemas.d.ts +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/prepare-phase-context.d.ts.map +1 -1
- package/dist/tools/prepare-phase-context.js +5 -0
- package/dist/tools/prepare-phase-context.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kubernetes
|
|
3
|
+
description: Kubernetes container orchestration for deploying, scaling, and managing containerized applications
|
|
4
|
+
category: devops
|
|
5
|
+
version: "1.28+"
|
|
6
|
+
depends_on:
|
|
7
|
+
- docker
|
|
8
|
+
compatible_with:
|
|
9
|
+
- terraform
|
|
10
|
+
- github-actions
|
|
11
|
+
- aws
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Kubernetes Container Orchestration
|
|
15
|
+
|
|
16
|
+
## Instructions
|
|
17
|
+
|
|
18
|
+
1. **Assess the deployment need**: Single service, microservices, or complex application.
|
|
19
|
+
2. **Follow Kubernetes best practices**:
|
|
20
|
+
- Use namespaces for isolation
|
|
21
|
+
- Set resource limits
|
|
22
|
+
- Use liveness and readiness probes
|
|
23
|
+
- Implement proper RBAC
|
|
24
|
+
3. **Provide complete manifests**: Include all necessary resources.
|
|
25
|
+
4. **Guide on production patterns**: High availability, scaling, monitoring.
|
|
26
|
+
|
|
27
|
+
## Core Resources
|
|
28
|
+
|
|
29
|
+
### Deployment
|
|
30
|
+
|
|
31
|
+
```yaml
|
|
32
|
+
apiVersion: apps/v1
|
|
33
|
+
kind: Deployment
|
|
34
|
+
metadata:
|
|
35
|
+
name: myapp
|
|
36
|
+
namespace: production
|
|
37
|
+
labels:
|
|
38
|
+
app: myapp
|
|
39
|
+
spec:
|
|
40
|
+
replicas: 3
|
|
41
|
+
selector:
|
|
42
|
+
matchLabels:
|
|
43
|
+
app: myapp
|
|
44
|
+
template:
|
|
45
|
+
metadata:
|
|
46
|
+
labels:
|
|
47
|
+
app: myapp
|
|
48
|
+
spec:
|
|
49
|
+
containers:
|
|
50
|
+
- name: myapp
|
|
51
|
+
image: myregistry/myapp:v1.0.0
|
|
52
|
+
ports:
|
|
53
|
+
- containerPort: 3000
|
|
54
|
+
resources:
|
|
55
|
+
requests:
|
|
56
|
+
cpu: "100m"
|
|
57
|
+
memory: "128Mi"
|
|
58
|
+
limits:
|
|
59
|
+
cpu: "500m"
|
|
60
|
+
memory: "512Mi"
|
|
61
|
+
livenessProbe:
|
|
62
|
+
httpGet:
|
|
63
|
+
path: /health
|
|
64
|
+
port: 3000
|
|
65
|
+
initialDelaySeconds: 30
|
|
66
|
+
periodSeconds: 10
|
|
67
|
+
readinessProbe:
|
|
68
|
+
httpGet:
|
|
69
|
+
path: /ready
|
|
70
|
+
port: 3000
|
|
71
|
+
initialDelaySeconds: 5
|
|
72
|
+
periodSeconds: 5
|
|
73
|
+
env:
|
|
74
|
+
- name: NODE_ENV
|
|
75
|
+
value: "production"
|
|
76
|
+
- name: DATABASE_URL
|
|
77
|
+
valueFrom:
|
|
78
|
+
secretKeyRef:
|
|
79
|
+
name: myapp-secrets
|
|
80
|
+
key: database-url
|
|
81
|
+
volumeMounts:
|
|
82
|
+
- name: config
|
|
83
|
+
mountPath: /app/config
|
|
84
|
+
volumes:
|
|
85
|
+
- name: config
|
|
86
|
+
configMap:
|
|
87
|
+
name: myapp-config
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Service
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
apiVersion: v1
|
|
94
|
+
kind: Service
|
|
95
|
+
metadata:
|
|
96
|
+
name: myapp
|
|
97
|
+
namespace: production
|
|
98
|
+
spec:
|
|
99
|
+
selector:
|
|
100
|
+
app: myapp
|
|
101
|
+
ports:
|
|
102
|
+
- port: 80
|
|
103
|
+
targetPort: 3000
|
|
104
|
+
type: ClusterIP
|
|
105
|
+
---
|
|
106
|
+
# External LoadBalancer
|
|
107
|
+
apiVersion: v1
|
|
108
|
+
kind: Service
|
|
109
|
+
metadata:
|
|
110
|
+
name: myapp-external
|
|
111
|
+
spec:
|
|
112
|
+
selector:
|
|
113
|
+
app: myapp
|
|
114
|
+
ports:
|
|
115
|
+
- port: 80
|
|
116
|
+
targetPort: 3000
|
|
117
|
+
type: LoadBalancer
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Ingress
|
|
121
|
+
|
|
122
|
+
```yaml
|
|
123
|
+
apiVersion: networking.k8s.io/v1
|
|
124
|
+
kind: Ingress
|
|
125
|
+
metadata:
|
|
126
|
+
name: myapp-ingress
|
|
127
|
+
namespace: production
|
|
128
|
+
annotations:
|
|
129
|
+
nginx.ingress.kubernetes.io/rewrite-target: /
|
|
130
|
+
cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
131
|
+
spec:
|
|
132
|
+
ingressClassName: nginx
|
|
133
|
+
tls:
|
|
134
|
+
- hosts:
|
|
135
|
+
- myapp.example.com
|
|
136
|
+
secretName: myapp-tls
|
|
137
|
+
rules:
|
|
138
|
+
- host: myapp.example.com
|
|
139
|
+
http:
|
|
140
|
+
paths:
|
|
141
|
+
- path: /
|
|
142
|
+
pathType: Prefix
|
|
143
|
+
backend:
|
|
144
|
+
service:
|
|
145
|
+
name: myapp
|
|
146
|
+
port:
|
|
147
|
+
number: 80
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### ConfigMap
|
|
151
|
+
|
|
152
|
+
```yaml
|
|
153
|
+
apiVersion: v1
|
|
154
|
+
kind: ConfigMap
|
|
155
|
+
metadata:
|
|
156
|
+
name: myapp-config
|
|
157
|
+
namespace: production
|
|
158
|
+
data:
|
|
159
|
+
config.json: |
|
|
160
|
+
{
|
|
161
|
+
"logLevel": "info",
|
|
162
|
+
"features": {
|
|
163
|
+
"newUI": true
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
APP_SETTING: "value"
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Secret
|
|
170
|
+
|
|
171
|
+
```yaml
|
|
172
|
+
apiVersion: v1
|
|
173
|
+
kind: Secret
|
|
174
|
+
metadata:
|
|
175
|
+
name: myapp-secrets
|
|
176
|
+
namespace: production
|
|
177
|
+
type: Opaque
|
|
178
|
+
stringData:
|
|
179
|
+
database-url: "postgres://user:password@host:5432/db"
|
|
180
|
+
api-key: "secret-api-key"
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Scaling
|
|
184
|
+
|
|
185
|
+
### Horizontal Pod Autoscaler
|
|
186
|
+
|
|
187
|
+
```yaml
|
|
188
|
+
apiVersion: autoscaling/v2
|
|
189
|
+
kind: HorizontalPodAutoscaler
|
|
190
|
+
metadata:
|
|
191
|
+
name: myapp-hpa
|
|
192
|
+
spec:
|
|
193
|
+
scaleTargetRef:
|
|
194
|
+
apiVersion: apps/v1
|
|
195
|
+
kind: Deployment
|
|
196
|
+
name: myapp
|
|
197
|
+
minReplicas: 2
|
|
198
|
+
maxReplicas: 10
|
|
199
|
+
metrics:
|
|
200
|
+
- type: Resource
|
|
201
|
+
resource:
|
|
202
|
+
name: cpu
|
|
203
|
+
target:
|
|
204
|
+
type: Utilization
|
|
205
|
+
averageUtilization: 70
|
|
206
|
+
- type: Resource
|
|
207
|
+
resource:
|
|
208
|
+
name: memory
|
|
209
|
+
target:
|
|
210
|
+
type: Utilization
|
|
211
|
+
averageUtilization: 80
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Vertical Pod Autoscaler
|
|
215
|
+
|
|
216
|
+
```yaml
|
|
217
|
+
apiVersion: autoscaling.k8s.io/v1
|
|
218
|
+
kind: VerticalPodAutoscaler
|
|
219
|
+
metadata:
|
|
220
|
+
name: myapp-vpa
|
|
221
|
+
spec:
|
|
222
|
+
targetRef:
|
|
223
|
+
apiVersion: apps/v1
|
|
224
|
+
kind: Deployment
|
|
225
|
+
name: myapp
|
|
226
|
+
updatePolicy:
|
|
227
|
+
updateMode: "Auto"
|
|
228
|
+
resourcePolicy:
|
|
229
|
+
containerPolicies:
|
|
230
|
+
- containerName: myapp
|
|
231
|
+
minAllowed:
|
|
232
|
+
cpu: 100m
|
|
233
|
+
memory: 128Mi
|
|
234
|
+
maxAllowed:
|
|
235
|
+
cpu: 2
|
|
236
|
+
memory: 2Gi
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Persistent Storage
|
|
240
|
+
|
|
241
|
+
```yaml
|
|
242
|
+
apiVersion: v1
|
|
243
|
+
kind: PersistentVolumeClaim
|
|
244
|
+
metadata:
|
|
245
|
+
name: myapp-data
|
|
246
|
+
spec:
|
|
247
|
+
accessModes:
|
|
248
|
+
- ReadWriteOnce
|
|
249
|
+
storageClassName: standard
|
|
250
|
+
resources:
|
|
251
|
+
requests:
|
|
252
|
+
storage: 10Gi
|
|
253
|
+
---
|
|
254
|
+
# In Deployment
|
|
255
|
+
volumes:
|
|
256
|
+
- name: data
|
|
257
|
+
persistentVolumeClaim:
|
|
258
|
+
claimName: myapp-data
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## Jobs and CronJobs
|
|
262
|
+
|
|
263
|
+
```yaml
|
|
264
|
+
# One-time Job
|
|
265
|
+
apiVersion: batch/v1
|
|
266
|
+
kind: Job
|
|
267
|
+
metadata:
|
|
268
|
+
name: db-migration
|
|
269
|
+
spec:
|
|
270
|
+
template:
|
|
271
|
+
spec:
|
|
272
|
+
containers:
|
|
273
|
+
- name: migrate
|
|
274
|
+
image: myapp:latest
|
|
275
|
+
command: ["npm", "run", "migrate"]
|
|
276
|
+
restartPolicy: Never
|
|
277
|
+
backoffLimit: 3
|
|
278
|
+
---
|
|
279
|
+
# CronJob
|
|
280
|
+
apiVersion: batch/v1
|
|
281
|
+
kind: CronJob
|
|
282
|
+
metadata:
|
|
283
|
+
name: cleanup
|
|
284
|
+
spec:
|
|
285
|
+
schedule: "0 2 * * *" # 2 AM daily
|
|
286
|
+
jobTemplate:
|
|
287
|
+
spec:
|
|
288
|
+
template:
|
|
289
|
+
spec:
|
|
290
|
+
containers:
|
|
291
|
+
- name: cleanup
|
|
292
|
+
image: myapp:latest
|
|
293
|
+
command: ["npm", "run", "cleanup"]
|
|
294
|
+
restartPolicy: OnFailure
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## Common Commands
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
# Apply manifests
|
|
301
|
+
kubectl apply -f deployment.yaml
|
|
302
|
+
kubectl apply -f ./k8s/ # Apply directory
|
|
303
|
+
|
|
304
|
+
# Get resources
|
|
305
|
+
kubectl get pods -n production
|
|
306
|
+
kubectl get pods -l app=myapp
|
|
307
|
+
kubectl get all -n production
|
|
308
|
+
|
|
309
|
+
# Describe (debugging)
|
|
310
|
+
kubectl describe pod myapp-xxx -n production
|
|
311
|
+
kubectl describe deployment myapp
|
|
312
|
+
|
|
313
|
+
# Logs
|
|
314
|
+
kubectl logs myapp-xxx -n production
|
|
315
|
+
kubectl logs -f myapp-xxx # Follow
|
|
316
|
+
kubectl logs myapp-xxx -c container-name # Specific container
|
|
317
|
+
kubectl logs --previous myapp-xxx # Previous crash
|
|
318
|
+
|
|
319
|
+
# Shell into pod
|
|
320
|
+
kubectl exec -it myapp-xxx -- sh
|
|
321
|
+
|
|
322
|
+
# Port forward
|
|
323
|
+
kubectl port-forward svc/myapp 8080:80
|
|
324
|
+
|
|
325
|
+
# Scale
|
|
326
|
+
kubectl scale deployment myapp --replicas=5
|
|
327
|
+
|
|
328
|
+
# Rollout
|
|
329
|
+
kubectl rollout status deployment/myapp
|
|
330
|
+
kubectl rollout history deployment/myapp
|
|
331
|
+
kubectl rollout undo deployment/myapp
|
|
332
|
+
kubectl rollout restart deployment/myapp
|
|
333
|
+
|
|
334
|
+
# Context
|
|
335
|
+
kubectl config get-contexts
|
|
336
|
+
kubectl config use-context my-cluster
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
## Namespaces
|
|
340
|
+
|
|
341
|
+
```yaml
|
|
342
|
+
apiVersion: v1
|
|
343
|
+
kind: Namespace
|
|
344
|
+
metadata:
|
|
345
|
+
name: production
|
|
346
|
+
labels:
|
|
347
|
+
env: production
|
|
348
|
+
---
|
|
349
|
+
# Resource quota per namespace
|
|
350
|
+
apiVersion: v1
|
|
351
|
+
kind: ResourceQuota
|
|
352
|
+
metadata:
|
|
353
|
+
name: compute-quota
|
|
354
|
+
namespace: production
|
|
355
|
+
spec:
|
|
356
|
+
hard:
|
|
357
|
+
requests.cpu: "10"
|
|
358
|
+
requests.memory: 20Gi
|
|
359
|
+
limits.cpu: "20"
|
|
360
|
+
limits.memory: 40Gi
|
|
361
|
+
pods: "50"
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## RBAC
|
|
365
|
+
|
|
366
|
+
```yaml
|
|
367
|
+
# Service Account
|
|
368
|
+
apiVersion: v1
|
|
369
|
+
kind: ServiceAccount
|
|
370
|
+
metadata:
|
|
371
|
+
name: myapp-sa
|
|
372
|
+
namespace: production
|
|
373
|
+
---
|
|
374
|
+
# Role
|
|
375
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
376
|
+
kind: Role
|
|
377
|
+
metadata:
|
|
378
|
+
name: myapp-role
|
|
379
|
+
namespace: production
|
|
380
|
+
rules:
|
|
381
|
+
- apiGroups: [""]
|
|
382
|
+
resources: ["configmaps", "secrets"]
|
|
383
|
+
verbs: ["get", "list"]
|
|
384
|
+
---
|
|
385
|
+
# RoleBinding
|
|
386
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
387
|
+
kind: RoleBinding
|
|
388
|
+
metadata:
|
|
389
|
+
name: myapp-rolebinding
|
|
390
|
+
namespace: production
|
|
391
|
+
subjects:
|
|
392
|
+
- kind: ServiceAccount
|
|
393
|
+
name: myapp-sa
|
|
394
|
+
roleRef:
|
|
395
|
+
kind: Role
|
|
396
|
+
name: myapp-role
|
|
397
|
+
apiGroup: rbac.authorization.k8s.io
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
## Best Practices
|
|
401
|
+
|
|
402
|
+
- **Always set resource requests/limits** - Prevents resource starvation
|
|
403
|
+
- **Use namespaces** - Isolate environments and teams
|
|
404
|
+
- **Implement health probes** - Liveness for restart, readiness for traffic
|
|
405
|
+
- **Use ConfigMaps/Secrets** - Don't bake config into images
|
|
406
|
+
- **Set pod disruption budgets** - Maintain availability during updates
|
|
407
|
+
- **Use labels consistently** - app, version, environment, team
|
|
408
|
+
- **Enable RBAC** - Least privilege principle
|
|
409
|
+
- **Use network policies** - Restrict pod-to-pod communication
|
|
410
|
+
|
|
411
|
+
## Pod Disruption Budget
|
|
412
|
+
|
|
413
|
+
```yaml
|
|
414
|
+
apiVersion: policy/v1
|
|
415
|
+
kind: PodDisruptionBudget
|
|
416
|
+
metadata:
|
|
417
|
+
name: myapp-pdb
|
|
418
|
+
spec:
|
|
419
|
+
minAvailable: 2 # Or maxUnavailable: 1
|
|
420
|
+
selector:
|
|
421
|
+
matchLabels:
|
|
422
|
+
app: myapp
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
## Network Policy
|
|
426
|
+
|
|
427
|
+
```yaml
|
|
428
|
+
apiVersion: networking.k8s.io/v1
|
|
429
|
+
kind: NetworkPolicy
|
|
430
|
+
metadata:
|
|
431
|
+
name: myapp-network-policy
|
|
432
|
+
spec:
|
|
433
|
+
podSelector:
|
|
434
|
+
matchLabels:
|
|
435
|
+
app: myapp
|
|
436
|
+
policyTypes:
|
|
437
|
+
- Ingress
|
|
438
|
+
- Egress
|
|
439
|
+
ingress:
|
|
440
|
+
- from:
|
|
441
|
+
- podSelector:
|
|
442
|
+
matchLabels:
|
|
443
|
+
app: frontend
|
|
444
|
+
ports:
|
|
445
|
+
- port: 3000
|
|
446
|
+
egress:
|
|
447
|
+
- to:
|
|
448
|
+
- podSelector:
|
|
449
|
+
matchLabels:
|
|
450
|
+
app: database
|
|
451
|
+
ports:
|
|
452
|
+
- port: 5432
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
## References
|
|
456
|
+
|
|
457
|
+
- Kubernetes Documentation: https://kubernetes.io/docs/
|
|
458
|
+
- kubectl Cheat Sheet: https://kubernetes.io/docs/reference/kubectl/cheatsheet/
|
|
459
|
+
- Best Practices: https://kubernetes.io/docs/concepts/configuration/overview/
|