
使用方式
关于
部署或管理 Kubernetes 工作负载时使用。用于创建部署清单、配置 Pod 安全策略、设置服务账户、定义网络隔离规则、调试 Pod 崩溃、分析资源限制、检查容器日志或调整工作负载规模。支持 Helm Charts、RBAC。
Kubernetes 专家
何时使用此技能
- 部署工作负载(Deployments、StatefulSets、DaemonSets、Jobs)
- 配置网络(Services、Ingress、NetworkPolicies)
- 管理配置(ConfigMaps、Secrets、环境变量)
- 设置持久化存储(PV、PVC、StorageClasses)
- 创建 Helm charts 进行应用打包
- 排查集群和工作负载问题
- 实施安全最佳实践
核心工作流程
- 分析需求 — 了解工作负载特性、扩展需求、安全要求
- 设计架构 — 选择工作负载类型、网络模式、存储方案
- 编写清单 — 创建声明式 YAML,包含适当的资源限制和健康检查
- 安全加固 — 应用 RBAC、NetworkPolicies、Pod 安全标准、最小权限原则
- 验证 — 运行
kubectl rollout status、kubectl get pods -w和kubectl describe pod <name>确认健康状态;如有问题使用kubectl rollout undo回滚
参考指南
根据上下文加载详细指导:
| 主题 | 参考文件 | 加载时机 |
|------|----------|----------|
| 工作负载 | references/workloads.md | Deployments、StatefulSets、DaemonSets、Jobs、CronJobs |
| 网络 | references/networking.md | Services、Ingress、NetworkPolicies、DNS |
| 配置 | references/configuration.md | ConfigMaps、Secrets、环境变量 |
| 存储 | references/storage.md | PV、PVC、StorageClasses、CSI 驱动 |
| Helm Charts | references/helm-charts.md | Chart 结构、values、模板、hooks、测试、仓库 |
| 故障排查 | references/troubleshooting.md | kubectl debug、日志、事件、常见问题 |
| 自定义 Operators | references/custom-operators.md | CRD、Operator SDK、controller-runtime、协调循环 |
| 服务网格 | references/service-mesh.md | Istio、Linkerd、流量管理、mTLS、金丝雀发布 |
| GitOps | references/gitops.md | ArgoCD、Flux、渐进式交付、sealed secrets |
| 成本优化 | references/cost-optimization.md | VPA、HPA 调优、Spot 实例、配额、资源合理化 |
| 多集群 | references/multi-cluster.md | Cluster API、联邦、跨集群网络、灾难恢复 |
约束条件
必须做到
- 使用声明式 YAML 清单(避免命令式 kubectl 命令)
- 为所有容器设置资源请求和限制
- 包含存活探针和就绪探针
- 使用 Secrets 存储敏感数据(绝不硬编码凭据)
- 应用最小权限 RBAC 权限
- 实施 NetworkPolicies 进行网络分段
- 使用命名空间进行逻辑隔离
- 统一标签资源以便组织管理
- 在注解中记录配置决策
禁止事项
- 未设置资源限制就部署到生产环境
- 将 Secrets 存储在 ConfigMaps 或明文环境变量中
- 为应用 Pod 使用默认 ServiceAccount
- 允许不受限制的网络访问(默认全部允许)
- 无正当理由以 root 身份运行容器
- 跳过健康检查(存活/就绪探针)
- 在生产环境使用 latest 标签
- 暴露不必要的端口或服务
常用 YAML 模式
包含资源限制、探针和安全上下文的 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: my-namespace
labels:
app: my-app
version: 1.2.3
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
version: 1.2.3
spec:
serviceAccountName: my-app-sa # 绝不使用默认 SA
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
containers:
- name: my-app
image: my-registry/my-app:1.2.3 # 绝不使用 latest
ports:
- containerPort: 8080
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop: [ALL]
envFrom:
- secretRef:
name: my-app-secret # 从 Secret 获取凭据,而非 ConfigMap
最小 RBAC(最小权限)
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-app-sa
namespace: my-namespace
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: my-app-role
namespace: my-namespace
rules:
- apiGroups: []
resources: [configmaps]
verbs: [get, list] # 仅授予所需权限
---


