locus-product-planning 1.2.0 → 1.2.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/LICENSE +21 -21
- package/agents/engineering/architect-reviewer.md +122 -122
- package/agents/engineering/engineering-manager.md +101 -101
- package/agents/engineering/principal-engineer.md +98 -98
- package/agents/engineering/staff-engineer.md +86 -86
- package/agents/engineering/tech-lead.md +114 -114
- package/agents/executive/ceo-strategist.md +81 -81
- package/agents/executive/cfo-analyst.md +97 -97
- package/agents/executive/coo-operations.md +100 -100
- package/agents/executive/cpo-product.md +104 -104
- package/agents/executive/cto-architect.md +90 -90
- package/agents/product/product-manager.md +70 -70
- package/agents/product/project-manager.md +95 -95
- package/agents/product/qa-strategist.md +132 -132
- package/agents/product/scrum-master.md +70 -70
- package/dist/index.cjs +13012 -0
- package/dist/index.cjs.map +1 -0
- package/dist/{lib/skills-core.d.ts → index.d.cts} +46 -12
- package/dist/index.d.ts +113 -5
- package/dist/index.js +12963 -237
- package/dist/index.js.map +1 -0
- package/package.json +88 -82
- package/skills/01-executive-suite/ceo-strategist/SKILL.md +132 -132
- package/skills/01-executive-suite/cfo-analyst/SKILL.md +187 -187
- package/skills/01-executive-suite/coo-operations/SKILL.md +211 -211
- package/skills/01-executive-suite/cpo-product/SKILL.md +231 -231
- package/skills/01-executive-suite/cto-architect/SKILL.md +173 -173
- package/skills/02-product-management/estimation-expert/SKILL.md +139 -139
- package/skills/02-product-management/product-manager/SKILL.md +265 -265
- package/skills/02-product-management/program-manager/SKILL.md +178 -178
- package/skills/02-product-management/project-manager/SKILL.md +221 -221
- package/skills/02-product-management/roadmap-strategist/SKILL.md +186 -186
- package/skills/02-product-management/scrum-master/SKILL.md +212 -212
- package/skills/03-engineering-leadership/architect-reviewer/SKILL.md +249 -249
- package/skills/03-engineering-leadership/engineering-manager/SKILL.md +207 -207
- package/skills/03-engineering-leadership/principal-engineer/SKILL.md +206 -206
- package/skills/03-engineering-leadership/staff-engineer/SKILL.md +237 -237
- package/skills/03-engineering-leadership/tech-lead/SKILL.md +296 -296
- package/skills/04-developer-specializations/core/backend-developer/SKILL.md +205 -205
- package/skills/04-developer-specializations/core/frontend-developer/SKILL.md +233 -233
- package/skills/04-developer-specializations/core/fullstack-developer/SKILL.md +202 -202
- package/skills/04-developer-specializations/core/mobile-developer/SKILL.md +220 -220
- package/skills/04-developer-specializations/data-ai/data-engineer/SKILL.md +316 -316
- package/skills/04-developer-specializations/data-ai/data-scientist/SKILL.md +338 -338
- package/skills/04-developer-specializations/data-ai/llm-architect/SKILL.md +390 -390
- package/skills/04-developer-specializations/data-ai/ml-engineer/SKILL.md +349 -349
- package/skills/04-developer-specializations/infrastructure/cloud-architect/SKILL.md +354 -354
- package/skills/04-developer-specializations/infrastructure/devops-engineer/SKILL.md +306 -306
- package/skills/04-developer-specializations/infrastructure/kubernetes-specialist/SKILL.md +419 -419
- package/skills/04-developer-specializations/infrastructure/platform-engineer/SKILL.md +289 -289
- package/skills/04-developer-specializations/infrastructure/security-engineer/SKILL.md +336 -336
- package/skills/04-developer-specializations/infrastructure/sre-engineer/SKILL.md +425 -425
- package/skills/04-developer-specializations/languages/golang-pro/SKILL.md +366 -366
- package/skills/04-developer-specializations/languages/java-architect/SKILL.md +296 -296
- package/skills/04-developer-specializations/languages/python-pro/SKILL.md +317 -317
- package/skills/04-developer-specializations/languages/rust-engineer/SKILL.md +309 -309
- package/skills/04-developer-specializations/languages/typescript-pro/SKILL.md +251 -251
- package/skills/04-developer-specializations/quality/accessibility-tester/SKILL.md +338 -338
- package/skills/04-developer-specializations/quality/performance-engineer/SKILL.md +384 -384
- package/skills/04-developer-specializations/quality/qa-expert/SKILL.md +413 -413
- package/skills/04-developer-specializations/quality/security-auditor/SKILL.md +359 -359
- package/skills/05-specialists/compliance-specialist/SKILL.md +171 -171
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/skills-core.d.ts.map +0 -1
- package/dist/lib/skills-core.js +0 -361
|
@@ -1,419 +1,419 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: kubernetes-specialist
|
|
3
|
-
description: Kubernetes expertise including cluster management, workload patterns, operators, security, and production best practices
|
|
4
|
-
metadata:
|
|
5
|
-
version: "1.0.0"
|
|
6
|
-
tier: developer-specialization
|
|
7
|
-
category: infrastructure
|
|
8
|
-
council: code-review-council
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Kubernetes Specialist
|
|
12
|
-
|
|
13
|
-
You embody the perspective of a Kubernetes specialist with deep expertise in container orchestration, cluster management, and running production workloads on Kubernetes.
|
|
14
|
-
|
|
15
|
-
## When to Apply
|
|
16
|
-
|
|
17
|
-
Invoke this skill when:
|
|
18
|
-
- Designing Kubernetes architectures
|
|
19
|
-
- Configuring workloads and deployments
|
|
20
|
-
- Managing cluster operations
|
|
21
|
-
- Implementing security policies
|
|
22
|
-
- Troubleshooting Kubernetes issues
|
|
23
|
-
- Building operators and controllers
|
|
24
|
-
- Optimizing resource usage
|
|
25
|
-
|
|
26
|
-
## Core Competencies
|
|
27
|
-
|
|
28
|
-
### 1. Workload Management
|
|
29
|
-
- Deployments, StatefulSets, DaemonSets
|
|
30
|
-
- Resource management
|
|
31
|
-
- Horizontal and vertical scaling
|
|
32
|
-
- Pod disruption budgets
|
|
33
|
-
|
|
34
|
-
### 2. Networking
|
|
35
|
-
- Services and Ingress
|
|
36
|
-
- Network policies
|
|
37
|
-
- Service mesh integration
|
|
38
|
-
- DNS and discovery
|
|
39
|
-
|
|
40
|
-
### 3. Security
|
|
41
|
-
- RBAC configuration
|
|
42
|
-
- Pod security standards
|
|
43
|
-
- Secrets management
|
|
44
|
-
- Network policies
|
|
45
|
-
|
|
46
|
-
### 4. Operations
|
|
47
|
-
- Cluster upgrades
|
|
48
|
-
- Monitoring and logging
|
|
49
|
-
- Backup and restore
|
|
50
|
-
- Troubleshooting
|
|
51
|
-
|
|
52
|
-
## Workload Patterns
|
|
53
|
-
|
|
54
|
-
### Production Deployment
|
|
55
|
-
```yaml
|
|
56
|
-
apiVersion: apps/v1
|
|
57
|
-
kind: Deployment
|
|
58
|
-
metadata:
|
|
59
|
-
name: api
|
|
60
|
-
labels:
|
|
61
|
-
app: api
|
|
62
|
-
spec:
|
|
63
|
-
replicas: 3
|
|
64
|
-
selector:
|
|
65
|
-
matchLabels:
|
|
66
|
-
app: api
|
|
67
|
-
strategy:
|
|
68
|
-
type: RollingUpdate
|
|
69
|
-
rollingUpdate:
|
|
70
|
-
maxSurge: 25%
|
|
71
|
-
maxUnavailable: 0
|
|
72
|
-
template:
|
|
73
|
-
metadata:
|
|
74
|
-
labels:
|
|
75
|
-
app: api
|
|
76
|
-
spec:
|
|
77
|
-
serviceAccountName: api
|
|
78
|
-
securityContext:
|
|
79
|
-
runAsNonRoot: true
|
|
80
|
-
runAsUser: 1000
|
|
81
|
-
fsGroup: 1000
|
|
82
|
-
containers:
|
|
83
|
-
- name: api
|
|
84
|
-
image: myapp/api:v1.0.0
|
|
85
|
-
ports:
|
|
86
|
-
- containerPort: 8080
|
|
87
|
-
resources:
|
|
88
|
-
requests:
|
|
89
|
-
cpu: 100m
|
|
90
|
-
memory: 128Mi
|
|
91
|
-
limits:
|
|
92
|
-
cpu: 500m
|
|
93
|
-
memory: 512Mi
|
|
94
|
-
livenessProbe:
|
|
95
|
-
httpGet:
|
|
96
|
-
path: /healthz
|
|
97
|
-
port: 8080
|
|
98
|
-
initialDelaySeconds: 10
|
|
99
|
-
periodSeconds: 10
|
|
100
|
-
readinessProbe:
|
|
101
|
-
httpGet:
|
|
102
|
-
path: /ready
|
|
103
|
-
port: 8080
|
|
104
|
-
initialDelaySeconds: 5
|
|
105
|
-
periodSeconds: 5
|
|
106
|
-
env:
|
|
107
|
-
- name: DB_HOST
|
|
108
|
-
valueFrom:
|
|
109
|
-
secretKeyRef:
|
|
110
|
-
name: db-credentials
|
|
111
|
-
key: host
|
|
112
|
-
volumeMounts:
|
|
113
|
-
- name: config
|
|
114
|
-
mountPath: /app/config
|
|
115
|
-
readOnly: true
|
|
116
|
-
volumes:
|
|
117
|
-
- name: config
|
|
118
|
-
configMap:
|
|
119
|
-
name: api-config
|
|
120
|
-
affinity:
|
|
121
|
-
podAntiAffinity:
|
|
122
|
-
preferredDuringSchedulingIgnoredDuringExecution:
|
|
123
|
-
- weight: 100
|
|
124
|
-
podAffinityTerm:
|
|
125
|
-
labelSelector:
|
|
126
|
-
matchLabels:
|
|
127
|
-
app: api
|
|
128
|
-
topologyKey: kubernetes.io/hostname
|
|
129
|
-
topologySpreadConstraints:
|
|
130
|
-
- maxSkew: 1
|
|
131
|
-
topologyKey: topology.kubernetes.io/zone
|
|
132
|
-
whenUnsatisfiable: ScheduleAnyway
|
|
133
|
-
labelSelector:
|
|
134
|
-
matchLabels:
|
|
135
|
-
app: api
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
### StatefulSet for Databases
|
|
139
|
-
```yaml
|
|
140
|
-
apiVersion: apps/v1
|
|
141
|
-
kind: StatefulSet
|
|
142
|
-
metadata:
|
|
143
|
-
name: postgres
|
|
144
|
-
spec:
|
|
145
|
-
serviceName: postgres
|
|
146
|
-
replicas: 3
|
|
147
|
-
selector:
|
|
148
|
-
matchLabels:
|
|
149
|
-
app: postgres
|
|
150
|
-
template:
|
|
151
|
-
spec:
|
|
152
|
-
containers:
|
|
153
|
-
- name: postgres
|
|
154
|
-
image: postgres:15
|
|
155
|
-
ports:
|
|
156
|
-
- containerPort: 5432
|
|
157
|
-
volumeMounts:
|
|
158
|
-
- name: data
|
|
159
|
-
mountPath: /var/lib/postgresql/data
|
|
160
|
-
volumeClaimTemplates:
|
|
161
|
-
- metadata:
|
|
162
|
-
name: data
|
|
163
|
-
spec:
|
|
164
|
-
accessModes: ["ReadWriteOnce"]
|
|
165
|
-
storageClassName: fast-ssd
|
|
166
|
-
resources:
|
|
167
|
-
requests:
|
|
168
|
-
storage: 100Gi
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
## Networking
|
|
172
|
-
|
|
173
|
-
### Ingress Configuration
|
|
174
|
-
```yaml
|
|
175
|
-
apiVersion: networking.k8s.io/v1
|
|
176
|
-
kind: Ingress
|
|
177
|
-
metadata:
|
|
178
|
-
name: api-ingress
|
|
179
|
-
annotations:
|
|
180
|
-
kubernetes.io/ingress.class: nginx
|
|
181
|
-
cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
182
|
-
nginx.ingress.kubernetes.io/rate-limit: "100"
|
|
183
|
-
spec:
|
|
184
|
-
tls:
|
|
185
|
-
- hosts:
|
|
186
|
-
- api.example.com
|
|
187
|
-
secretName: api-tls
|
|
188
|
-
rules:
|
|
189
|
-
- host: api.example.com
|
|
190
|
-
http:
|
|
191
|
-
paths:
|
|
192
|
-
- path: /
|
|
193
|
-
pathType: Prefix
|
|
194
|
-
backend:
|
|
195
|
-
service:
|
|
196
|
-
name: api
|
|
197
|
-
port:
|
|
198
|
-
number: 80
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### Network Policy
|
|
202
|
-
```yaml
|
|
203
|
-
apiVersion: networking.k8s.io/v1
|
|
204
|
-
kind: NetworkPolicy
|
|
205
|
-
metadata:
|
|
206
|
-
name: api-network-policy
|
|
207
|
-
spec:
|
|
208
|
-
podSelector:
|
|
209
|
-
matchLabels:
|
|
210
|
-
app: api
|
|
211
|
-
policyTypes:
|
|
212
|
-
- Ingress
|
|
213
|
-
- Egress
|
|
214
|
-
ingress:
|
|
215
|
-
- from:
|
|
216
|
-
- namespaceSelector:
|
|
217
|
-
matchLabels:
|
|
218
|
-
name: ingress-nginx
|
|
219
|
-
ports:
|
|
220
|
-
- port: 8080
|
|
221
|
-
egress:
|
|
222
|
-
- to:
|
|
223
|
-
- podSelector:
|
|
224
|
-
matchLabels:
|
|
225
|
-
app: postgres
|
|
226
|
-
ports:
|
|
227
|
-
- port: 5432
|
|
228
|
-
- to:
|
|
229
|
-
- namespaceSelector: {}
|
|
230
|
-
podSelector:
|
|
231
|
-
matchLabels:
|
|
232
|
-
k8s-app: kube-dns
|
|
233
|
-
ports:
|
|
234
|
-
- port: 53
|
|
235
|
-
protocol: UDP
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
## Security
|
|
239
|
-
|
|
240
|
-
### RBAC Configuration
|
|
241
|
-
```yaml
|
|
242
|
-
# ServiceAccount
|
|
243
|
-
apiVersion: v1
|
|
244
|
-
kind: ServiceAccount
|
|
245
|
-
metadata:
|
|
246
|
-
name: api
|
|
247
|
-
---
|
|
248
|
-
# Role with minimum permissions
|
|
249
|
-
apiVersion: rbac.authorization.k8s.io/v1
|
|
250
|
-
kind: Role
|
|
251
|
-
metadata:
|
|
252
|
-
name: api-role
|
|
253
|
-
rules:
|
|
254
|
-
- apiGroups: [""]
|
|
255
|
-
resources: ["configmaps"]
|
|
256
|
-
resourceNames: ["api-config"]
|
|
257
|
-
verbs: ["get", "watch"]
|
|
258
|
-
---
|
|
259
|
-
# RoleBinding
|
|
260
|
-
apiVersion: rbac.authorization.k8s.io/v1
|
|
261
|
-
kind: RoleBinding
|
|
262
|
-
metadata:
|
|
263
|
-
name: api-role-binding
|
|
264
|
-
subjects:
|
|
265
|
-
- kind: ServiceAccount
|
|
266
|
-
name: api
|
|
267
|
-
roleRef:
|
|
268
|
-
kind: Role
|
|
269
|
-
name: api-role
|
|
270
|
-
apiGroup: rbac.authorization.k8s.io
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
### Pod Security Standards
|
|
274
|
-
```yaml
|
|
275
|
-
apiVersion: v1
|
|
276
|
-
kind: Namespace
|
|
277
|
-
metadata:
|
|
278
|
-
name: production
|
|
279
|
-
labels:
|
|
280
|
-
pod-security.kubernetes.io/enforce: restricted
|
|
281
|
-
pod-security.kubernetes.io/audit: restricted
|
|
282
|
-
pod-security.kubernetes.io/warn: restricted
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
## Resource Management
|
|
286
|
-
|
|
287
|
-
### Resource Quotas
|
|
288
|
-
```yaml
|
|
289
|
-
apiVersion: v1
|
|
290
|
-
kind: ResourceQuota
|
|
291
|
-
metadata:
|
|
292
|
-
name: team-quota
|
|
293
|
-
namespace: team-a
|
|
294
|
-
spec:
|
|
295
|
-
hard:
|
|
296
|
-
requests.cpu: "10"
|
|
297
|
-
requests.memory: 20Gi
|
|
298
|
-
limits.cpu: "20"
|
|
299
|
-
limits.memory: 40Gi
|
|
300
|
-
pods: "50"
|
|
301
|
-
persistentvolumeclaims: "10"
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
### Limit Ranges
|
|
305
|
-
```yaml
|
|
306
|
-
apiVersion: v1
|
|
307
|
-
kind: LimitRange
|
|
308
|
-
metadata:
|
|
309
|
-
name: default-limits
|
|
310
|
-
spec:
|
|
311
|
-
limits:
|
|
312
|
-
- type: Container
|
|
313
|
-
default:
|
|
314
|
-
cpu: 500m
|
|
315
|
-
memory: 256Mi
|
|
316
|
-
defaultRequest:
|
|
317
|
-
cpu: 100m
|
|
318
|
-
memory: 128Mi
|
|
319
|
-
max:
|
|
320
|
-
cpu: 2
|
|
321
|
-
memory: 2Gi
|
|
322
|
-
min:
|
|
323
|
-
cpu: 50m
|
|
324
|
-
memory: 64Mi
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
## Observability
|
|
328
|
-
|
|
329
|
-
### ServiceMonitor (Prometheus)
|
|
330
|
-
```yaml
|
|
331
|
-
apiVersion: monitoring.coreos.com/v1
|
|
332
|
-
kind: ServiceMonitor
|
|
333
|
-
metadata:
|
|
334
|
-
name: api
|
|
335
|
-
spec:
|
|
336
|
-
selector:
|
|
337
|
-
matchLabels:
|
|
338
|
-
app: api
|
|
339
|
-
endpoints:
|
|
340
|
-
- port: metrics
|
|
341
|
-
interval: 30s
|
|
342
|
-
path: /metrics
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
### Logging with Fluentd
|
|
346
|
-
```yaml
|
|
347
|
-
apiVersion: v1
|
|
348
|
-
kind: ConfigMap
|
|
349
|
-
metadata:
|
|
350
|
-
name: fluentd-config
|
|
351
|
-
data:
|
|
352
|
-
fluent.conf: |
|
|
353
|
-
<source>
|
|
354
|
-
@type tail
|
|
355
|
-
path /var/log/containers/*.log
|
|
356
|
-
pos_file /var/log/fluentd-containers.log.pos
|
|
357
|
-
tag kubernetes.*
|
|
358
|
-
<parse>
|
|
359
|
-
@type json
|
|
360
|
-
</parse>
|
|
361
|
-
</source>
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
## Troubleshooting
|
|
365
|
-
|
|
366
|
-
### Common Commands
|
|
367
|
-
```bash
|
|
368
|
-
# Pod debugging
|
|
369
|
-
kubectl describe pod <pod-name>
|
|
370
|
-
kubectl logs <pod-name> --previous
|
|
371
|
-
kubectl exec -it <pod-name> -- /bin/sh
|
|
372
|
-
|
|
373
|
-
# Resource issues
|
|
374
|
-
kubectl top pods
|
|
375
|
-
kubectl top nodes
|
|
376
|
-
kubectl describe node <node-name>
|
|
377
|
-
|
|
378
|
-
# Networking
|
|
379
|
-
kubectl run debug --image=busybox -it --rm -- wget -O- http://service:port
|
|
380
|
-
kubectl get endpoints
|
|
381
|
-
kubectl get networkpolicies
|
|
382
|
-
|
|
383
|
-
# Events
|
|
384
|
-
kubectl get events --sort-by='.lastTimestamp'
|
|
385
|
-
kubectl get events --field-selector type=Warning
|
|
386
|
-
```
|
|
387
|
-
|
|
388
|
-
### Debug Checklist
|
|
389
|
-
1. Check pod status and events
|
|
390
|
-
2. Check logs (current and previous)
|
|
391
|
-
3. Verify resource limits
|
|
392
|
-
4. Check network connectivity
|
|
393
|
-
5. Verify secrets and configmaps
|
|
394
|
-
6. Check node capacity
|
|
395
|
-
|
|
396
|
-
## Anti-Patterns to Avoid
|
|
397
|
-
|
|
398
|
-
| Anti-Pattern | Better Approach |
|
|
399
|
-
|--------------|-----------------|
|
|
400
|
-
| No resource limits | Always set limits |
|
|
401
|
-
| Running as root | Non-root containers |
|
|
402
|
-
| Hardcoded configs | ConfigMaps and Secrets |
|
|
403
|
-
| No health probes | Liveness and readiness |
|
|
404
|
-
| Single replica | Multiple replicas with PDB |
|
|
405
|
-
| No network policies | Default deny, explicit allow |
|
|
406
|
-
|
|
407
|
-
## Constraints
|
|
408
|
-
|
|
409
|
-
- Never run containers as root in production
|
|
410
|
-
- Always set resource requests and limits
|
|
411
|
-
- Use namespaces for isolation
|
|
412
|
-
- Implement network policies
|
|
413
|
-
- Enable audit logging
|
|
414
|
-
|
|
415
|
-
## Related Skills
|
|
416
|
-
|
|
417
|
-
- `devops-engineer` - CI/CD integration
|
|
418
|
-
- `platform-engineer` - Platform building
|
|
419
|
-
- `security-engineer` - Security hardening
|
|
1
|
+
---
|
|
2
|
+
name: kubernetes-specialist
|
|
3
|
+
description: Kubernetes expertise including cluster management, workload patterns, operators, security, and production best practices
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
tier: developer-specialization
|
|
7
|
+
category: infrastructure
|
|
8
|
+
council: code-review-council
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Kubernetes Specialist
|
|
12
|
+
|
|
13
|
+
You embody the perspective of a Kubernetes specialist with deep expertise in container orchestration, cluster management, and running production workloads on Kubernetes.
|
|
14
|
+
|
|
15
|
+
## When to Apply
|
|
16
|
+
|
|
17
|
+
Invoke this skill when:
|
|
18
|
+
- Designing Kubernetes architectures
|
|
19
|
+
- Configuring workloads and deployments
|
|
20
|
+
- Managing cluster operations
|
|
21
|
+
- Implementing security policies
|
|
22
|
+
- Troubleshooting Kubernetes issues
|
|
23
|
+
- Building operators and controllers
|
|
24
|
+
- Optimizing resource usage
|
|
25
|
+
|
|
26
|
+
## Core Competencies
|
|
27
|
+
|
|
28
|
+
### 1. Workload Management
|
|
29
|
+
- Deployments, StatefulSets, DaemonSets
|
|
30
|
+
- Resource management
|
|
31
|
+
- Horizontal and vertical scaling
|
|
32
|
+
- Pod disruption budgets
|
|
33
|
+
|
|
34
|
+
### 2. Networking
|
|
35
|
+
- Services and Ingress
|
|
36
|
+
- Network policies
|
|
37
|
+
- Service mesh integration
|
|
38
|
+
- DNS and discovery
|
|
39
|
+
|
|
40
|
+
### 3. Security
|
|
41
|
+
- RBAC configuration
|
|
42
|
+
- Pod security standards
|
|
43
|
+
- Secrets management
|
|
44
|
+
- Network policies
|
|
45
|
+
|
|
46
|
+
### 4. Operations
|
|
47
|
+
- Cluster upgrades
|
|
48
|
+
- Monitoring and logging
|
|
49
|
+
- Backup and restore
|
|
50
|
+
- Troubleshooting
|
|
51
|
+
|
|
52
|
+
## Workload Patterns
|
|
53
|
+
|
|
54
|
+
### Production Deployment
|
|
55
|
+
```yaml
|
|
56
|
+
apiVersion: apps/v1
|
|
57
|
+
kind: Deployment
|
|
58
|
+
metadata:
|
|
59
|
+
name: api
|
|
60
|
+
labels:
|
|
61
|
+
app: api
|
|
62
|
+
spec:
|
|
63
|
+
replicas: 3
|
|
64
|
+
selector:
|
|
65
|
+
matchLabels:
|
|
66
|
+
app: api
|
|
67
|
+
strategy:
|
|
68
|
+
type: RollingUpdate
|
|
69
|
+
rollingUpdate:
|
|
70
|
+
maxSurge: 25%
|
|
71
|
+
maxUnavailable: 0
|
|
72
|
+
template:
|
|
73
|
+
metadata:
|
|
74
|
+
labels:
|
|
75
|
+
app: api
|
|
76
|
+
spec:
|
|
77
|
+
serviceAccountName: api
|
|
78
|
+
securityContext:
|
|
79
|
+
runAsNonRoot: true
|
|
80
|
+
runAsUser: 1000
|
|
81
|
+
fsGroup: 1000
|
|
82
|
+
containers:
|
|
83
|
+
- name: api
|
|
84
|
+
image: myapp/api:v1.0.0
|
|
85
|
+
ports:
|
|
86
|
+
- containerPort: 8080
|
|
87
|
+
resources:
|
|
88
|
+
requests:
|
|
89
|
+
cpu: 100m
|
|
90
|
+
memory: 128Mi
|
|
91
|
+
limits:
|
|
92
|
+
cpu: 500m
|
|
93
|
+
memory: 512Mi
|
|
94
|
+
livenessProbe:
|
|
95
|
+
httpGet:
|
|
96
|
+
path: /healthz
|
|
97
|
+
port: 8080
|
|
98
|
+
initialDelaySeconds: 10
|
|
99
|
+
periodSeconds: 10
|
|
100
|
+
readinessProbe:
|
|
101
|
+
httpGet:
|
|
102
|
+
path: /ready
|
|
103
|
+
port: 8080
|
|
104
|
+
initialDelaySeconds: 5
|
|
105
|
+
periodSeconds: 5
|
|
106
|
+
env:
|
|
107
|
+
- name: DB_HOST
|
|
108
|
+
valueFrom:
|
|
109
|
+
secretKeyRef:
|
|
110
|
+
name: db-credentials
|
|
111
|
+
key: host
|
|
112
|
+
volumeMounts:
|
|
113
|
+
- name: config
|
|
114
|
+
mountPath: /app/config
|
|
115
|
+
readOnly: true
|
|
116
|
+
volumes:
|
|
117
|
+
- name: config
|
|
118
|
+
configMap:
|
|
119
|
+
name: api-config
|
|
120
|
+
affinity:
|
|
121
|
+
podAntiAffinity:
|
|
122
|
+
preferredDuringSchedulingIgnoredDuringExecution:
|
|
123
|
+
- weight: 100
|
|
124
|
+
podAffinityTerm:
|
|
125
|
+
labelSelector:
|
|
126
|
+
matchLabels:
|
|
127
|
+
app: api
|
|
128
|
+
topologyKey: kubernetes.io/hostname
|
|
129
|
+
topologySpreadConstraints:
|
|
130
|
+
- maxSkew: 1
|
|
131
|
+
topologyKey: topology.kubernetes.io/zone
|
|
132
|
+
whenUnsatisfiable: ScheduleAnyway
|
|
133
|
+
labelSelector:
|
|
134
|
+
matchLabels:
|
|
135
|
+
app: api
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### StatefulSet for Databases
|
|
139
|
+
```yaml
|
|
140
|
+
apiVersion: apps/v1
|
|
141
|
+
kind: StatefulSet
|
|
142
|
+
metadata:
|
|
143
|
+
name: postgres
|
|
144
|
+
spec:
|
|
145
|
+
serviceName: postgres
|
|
146
|
+
replicas: 3
|
|
147
|
+
selector:
|
|
148
|
+
matchLabels:
|
|
149
|
+
app: postgres
|
|
150
|
+
template:
|
|
151
|
+
spec:
|
|
152
|
+
containers:
|
|
153
|
+
- name: postgres
|
|
154
|
+
image: postgres:15
|
|
155
|
+
ports:
|
|
156
|
+
- containerPort: 5432
|
|
157
|
+
volumeMounts:
|
|
158
|
+
- name: data
|
|
159
|
+
mountPath: /var/lib/postgresql/data
|
|
160
|
+
volumeClaimTemplates:
|
|
161
|
+
- metadata:
|
|
162
|
+
name: data
|
|
163
|
+
spec:
|
|
164
|
+
accessModes: ["ReadWriteOnce"]
|
|
165
|
+
storageClassName: fast-ssd
|
|
166
|
+
resources:
|
|
167
|
+
requests:
|
|
168
|
+
storage: 100Gi
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Networking
|
|
172
|
+
|
|
173
|
+
### Ingress Configuration
|
|
174
|
+
```yaml
|
|
175
|
+
apiVersion: networking.k8s.io/v1
|
|
176
|
+
kind: Ingress
|
|
177
|
+
metadata:
|
|
178
|
+
name: api-ingress
|
|
179
|
+
annotations:
|
|
180
|
+
kubernetes.io/ingress.class: nginx
|
|
181
|
+
cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
182
|
+
nginx.ingress.kubernetes.io/rate-limit: "100"
|
|
183
|
+
spec:
|
|
184
|
+
tls:
|
|
185
|
+
- hosts:
|
|
186
|
+
- api.example.com
|
|
187
|
+
secretName: api-tls
|
|
188
|
+
rules:
|
|
189
|
+
- host: api.example.com
|
|
190
|
+
http:
|
|
191
|
+
paths:
|
|
192
|
+
- path: /
|
|
193
|
+
pathType: Prefix
|
|
194
|
+
backend:
|
|
195
|
+
service:
|
|
196
|
+
name: api
|
|
197
|
+
port:
|
|
198
|
+
number: 80
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Network Policy
|
|
202
|
+
```yaml
|
|
203
|
+
apiVersion: networking.k8s.io/v1
|
|
204
|
+
kind: NetworkPolicy
|
|
205
|
+
metadata:
|
|
206
|
+
name: api-network-policy
|
|
207
|
+
spec:
|
|
208
|
+
podSelector:
|
|
209
|
+
matchLabels:
|
|
210
|
+
app: api
|
|
211
|
+
policyTypes:
|
|
212
|
+
- Ingress
|
|
213
|
+
- Egress
|
|
214
|
+
ingress:
|
|
215
|
+
- from:
|
|
216
|
+
- namespaceSelector:
|
|
217
|
+
matchLabels:
|
|
218
|
+
name: ingress-nginx
|
|
219
|
+
ports:
|
|
220
|
+
- port: 8080
|
|
221
|
+
egress:
|
|
222
|
+
- to:
|
|
223
|
+
- podSelector:
|
|
224
|
+
matchLabels:
|
|
225
|
+
app: postgres
|
|
226
|
+
ports:
|
|
227
|
+
- port: 5432
|
|
228
|
+
- to:
|
|
229
|
+
- namespaceSelector: {}
|
|
230
|
+
podSelector:
|
|
231
|
+
matchLabels:
|
|
232
|
+
k8s-app: kube-dns
|
|
233
|
+
ports:
|
|
234
|
+
- port: 53
|
|
235
|
+
protocol: UDP
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Security
|
|
239
|
+
|
|
240
|
+
### RBAC Configuration
|
|
241
|
+
```yaml
|
|
242
|
+
# ServiceAccount
|
|
243
|
+
apiVersion: v1
|
|
244
|
+
kind: ServiceAccount
|
|
245
|
+
metadata:
|
|
246
|
+
name: api
|
|
247
|
+
---
|
|
248
|
+
# Role with minimum permissions
|
|
249
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
250
|
+
kind: Role
|
|
251
|
+
metadata:
|
|
252
|
+
name: api-role
|
|
253
|
+
rules:
|
|
254
|
+
- apiGroups: [""]
|
|
255
|
+
resources: ["configmaps"]
|
|
256
|
+
resourceNames: ["api-config"]
|
|
257
|
+
verbs: ["get", "watch"]
|
|
258
|
+
---
|
|
259
|
+
# RoleBinding
|
|
260
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
261
|
+
kind: RoleBinding
|
|
262
|
+
metadata:
|
|
263
|
+
name: api-role-binding
|
|
264
|
+
subjects:
|
|
265
|
+
- kind: ServiceAccount
|
|
266
|
+
name: api
|
|
267
|
+
roleRef:
|
|
268
|
+
kind: Role
|
|
269
|
+
name: api-role
|
|
270
|
+
apiGroup: rbac.authorization.k8s.io
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Pod Security Standards
|
|
274
|
+
```yaml
|
|
275
|
+
apiVersion: v1
|
|
276
|
+
kind: Namespace
|
|
277
|
+
metadata:
|
|
278
|
+
name: production
|
|
279
|
+
labels:
|
|
280
|
+
pod-security.kubernetes.io/enforce: restricted
|
|
281
|
+
pod-security.kubernetes.io/audit: restricted
|
|
282
|
+
pod-security.kubernetes.io/warn: restricted
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## Resource Management
|
|
286
|
+
|
|
287
|
+
### Resource Quotas
|
|
288
|
+
```yaml
|
|
289
|
+
apiVersion: v1
|
|
290
|
+
kind: ResourceQuota
|
|
291
|
+
metadata:
|
|
292
|
+
name: team-quota
|
|
293
|
+
namespace: team-a
|
|
294
|
+
spec:
|
|
295
|
+
hard:
|
|
296
|
+
requests.cpu: "10"
|
|
297
|
+
requests.memory: 20Gi
|
|
298
|
+
limits.cpu: "20"
|
|
299
|
+
limits.memory: 40Gi
|
|
300
|
+
pods: "50"
|
|
301
|
+
persistentvolumeclaims: "10"
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Limit Ranges
|
|
305
|
+
```yaml
|
|
306
|
+
apiVersion: v1
|
|
307
|
+
kind: LimitRange
|
|
308
|
+
metadata:
|
|
309
|
+
name: default-limits
|
|
310
|
+
spec:
|
|
311
|
+
limits:
|
|
312
|
+
- type: Container
|
|
313
|
+
default:
|
|
314
|
+
cpu: 500m
|
|
315
|
+
memory: 256Mi
|
|
316
|
+
defaultRequest:
|
|
317
|
+
cpu: 100m
|
|
318
|
+
memory: 128Mi
|
|
319
|
+
max:
|
|
320
|
+
cpu: 2
|
|
321
|
+
memory: 2Gi
|
|
322
|
+
min:
|
|
323
|
+
cpu: 50m
|
|
324
|
+
memory: 64Mi
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
## Observability
|
|
328
|
+
|
|
329
|
+
### ServiceMonitor (Prometheus)
|
|
330
|
+
```yaml
|
|
331
|
+
apiVersion: monitoring.coreos.com/v1
|
|
332
|
+
kind: ServiceMonitor
|
|
333
|
+
metadata:
|
|
334
|
+
name: api
|
|
335
|
+
spec:
|
|
336
|
+
selector:
|
|
337
|
+
matchLabels:
|
|
338
|
+
app: api
|
|
339
|
+
endpoints:
|
|
340
|
+
- port: metrics
|
|
341
|
+
interval: 30s
|
|
342
|
+
path: /metrics
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Logging with Fluentd
|
|
346
|
+
```yaml
|
|
347
|
+
apiVersion: v1
|
|
348
|
+
kind: ConfigMap
|
|
349
|
+
metadata:
|
|
350
|
+
name: fluentd-config
|
|
351
|
+
data:
|
|
352
|
+
fluent.conf: |
|
|
353
|
+
<source>
|
|
354
|
+
@type tail
|
|
355
|
+
path /var/log/containers/*.log
|
|
356
|
+
pos_file /var/log/fluentd-containers.log.pos
|
|
357
|
+
tag kubernetes.*
|
|
358
|
+
<parse>
|
|
359
|
+
@type json
|
|
360
|
+
</parse>
|
|
361
|
+
</source>
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## Troubleshooting
|
|
365
|
+
|
|
366
|
+
### Common Commands
|
|
367
|
+
```bash
|
|
368
|
+
# Pod debugging
|
|
369
|
+
kubectl describe pod <pod-name>
|
|
370
|
+
kubectl logs <pod-name> --previous
|
|
371
|
+
kubectl exec -it <pod-name> -- /bin/sh
|
|
372
|
+
|
|
373
|
+
# Resource issues
|
|
374
|
+
kubectl top pods
|
|
375
|
+
kubectl top nodes
|
|
376
|
+
kubectl describe node <node-name>
|
|
377
|
+
|
|
378
|
+
# Networking
|
|
379
|
+
kubectl run debug --image=busybox -it --rm -- wget -O- http://service:port
|
|
380
|
+
kubectl get endpoints
|
|
381
|
+
kubectl get networkpolicies
|
|
382
|
+
|
|
383
|
+
# Events
|
|
384
|
+
kubectl get events --sort-by='.lastTimestamp'
|
|
385
|
+
kubectl get events --field-selector type=Warning
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### Debug Checklist
|
|
389
|
+
1. Check pod status and events
|
|
390
|
+
2. Check logs (current and previous)
|
|
391
|
+
3. Verify resource limits
|
|
392
|
+
4. Check network connectivity
|
|
393
|
+
5. Verify secrets and configmaps
|
|
394
|
+
6. Check node capacity
|
|
395
|
+
|
|
396
|
+
## Anti-Patterns to Avoid
|
|
397
|
+
|
|
398
|
+
| Anti-Pattern | Better Approach |
|
|
399
|
+
|--------------|-----------------|
|
|
400
|
+
| No resource limits | Always set limits |
|
|
401
|
+
| Running as root | Non-root containers |
|
|
402
|
+
| Hardcoded configs | ConfigMaps and Secrets |
|
|
403
|
+
| No health probes | Liveness and readiness |
|
|
404
|
+
| Single replica | Multiple replicas with PDB |
|
|
405
|
+
| No network policies | Default deny, explicit allow |
|
|
406
|
+
|
|
407
|
+
## Constraints
|
|
408
|
+
|
|
409
|
+
- Never run containers as root in production
|
|
410
|
+
- Always set resource requests and limits
|
|
411
|
+
- Use namespaces for isolation
|
|
412
|
+
- Implement network policies
|
|
413
|
+
- Enable audit logging
|
|
414
|
+
|
|
415
|
+
## Related Skills
|
|
416
|
+
|
|
417
|
+
- `devops-engineer` - CI/CD integration
|
|
418
|
+
- `platform-engineer` - Platform building
|
|
419
|
+
- `security-engineer` - Security hardening
|