关于 kubernetes-specialist
kubernetes-specialist 是用于设计、部署和排查 Kubernetes 工作负载的技能。它为开发者和运维人员提供声明式清单、安全控制及部署验证方面的指导。
主要功能
- 01工作负载与架构规划
- 02声明式 YAML 清单指导
- 03网络、配置与存储管理
- 04RBAC 与安全实践
- 05部署健康状态验证
适用场景
- 01部署带健康检查的工作负载
- 02配置集群网络与存储
- 03实施最小权限访问控制
- 04诊断工作负载和发布问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill kubernetes-specialist安装后在 Claude Code 中输入/kubernetes-specialist确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/configuration.mdcost-optimization.mdcustom-operators.mdgitops.mdhelm-charts.mdmulti-cluster.mdnetworking.mdservice-mesh.mdstorage.mdtroubleshooting.mdworkloads.md详细介绍
Kubernetes 专家
适用场景
- 部署工作负载(Deployments、StatefulSets、DaemonSets、Jobs)
- 配置网络(Services、Ingress、NetworkPolicies)
- 管理配置(ConfigMaps、Secrets、环境变量)
- 设置持久化存储(PV、PVC、StorageClasses)
- 创建 Helm charts 来打包应用
- 排查集群和工作负载问题
- 实施安全最佳实践
核心工作流
- 分析需求 — 了解工作负载特性、扩缩容需求和安全要求
- 设计架构 — 选择工作负载类型、网络模式和存储方案
- 编写清单 — 创建声明式 YAML,正确设置资源限制和健康检查
- 加强安全 — 应用 RBAC、NetworkPolicies、Pod Security Standards 和最小权限原则
- 验证 — 运行
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 drivers |
| Helm Charts | references/helm-charts.md | Chart 结构、values、templates、hooks、测试、仓库 |
| 故障排查 | references/troubleshooting.md | kubectl debug、日志、事件、常见问题 |
| 自定义 Operator | 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 调优、竞价实例、配额、资源规格优化 |
| 多集群 | 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 # never use default SA
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
containers:
- name: my-app
image: my-registry/my-app:1.2.3 # never use 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 # pull credentials from Secret, not 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"] # grant only what is needed
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my-app-rolebinding
namespace: my-namespace
subjects:
- kind: ServiceAccount
name: my-app-sa
namespace: my-namespace
roleRef:
kind: Role
name: my-app-role
apiGroup: rbac.authorization.k8s.io
NetworkPolicy(默认拒绝 + 明确允许)
# Deny all ingress and egress by default
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: my-namespace
spec:
podSelector: {}
policyTypes: ["Ingress", "Egress"]
---
# Allow only specific traffic
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-my-app
namespace: my-namespace
spec:
podSelector:
matchLabels:
app: my-app
policyTypes: ["Ingress"]
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
验证命令
部署后,验证运行状况和安全状态:
# Watch rollout complete
kubectl rollout status deployment/my-app -n my-namespace
# Stream pod events to catch crash loops or image pull errors
kubectl get pods -n my-namespace -w
# Inspect a specific pod for failures
kubectl describe pod <pod-name> -n my-namespace
# Check container logs
kubectl logs <pod-name> -n my-namespace --previous # use --previous for crashed containers
# Verify resource usage vs. limits
kubectl top pods -n my-namespace
# Audit RBAC permissions for a service account
kubectl auth can-i --list --as=system:serviceaccount:my-namespace:my-app-sa
# Roll back a failed deployment
kubectl rollout undo deployment/my-app -n my-namespace
输出模板
实现 Kubernetes 资源时,请提供:
- 结构完整的 YAML 清单
- 如有需要,提供 RBAC 配置(ServiceAccount、Role、RoleBinding)
- 用于网络隔离的 NetworkPolicy
- 简要说明设计决策和安全注意事项
由 @jeffallan 维护;他是 Synergetic Solutions 的首席顾问
评论
支持 Markdown