mcpField
K
kubernetes-specialist

kubernetes-specialist

github.com/jeffallan云与 DevOps12.1k14.2k 次安装今天更新
代码仓库

关于 kubernetes-specialist

kubernetes-specialist 是用于设计、部署和排查 Kubernetes 工作负载的技能。它为开发者和运维人员提供声明式清单、安全控制及部署验证方面的指导。

主要功能

  1. 01工作负载与架构规划
  2. 02声明式 YAML 清单指导
  3. 03网络、配置与存储管理
  4. 04RBAC 与安全实践
  5. 05部署健康状态验证

适用场景

  1. 01部署带健康检查的工作负载
  2. 02配置集群网络与存储
  3. 03实施最小权限访问控制
  4. 04诊断工作负载和发布问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jeffallan/claude-skills --skill kubernetes-specialist

安装后在 Claude Code 中输入/kubernetes-specialist确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
configuration.md
cost-optimization.md
custom-operators.md
gitops.md
helm-charts.md
multi-cluster.md
networking.md
service-mesh.md
storage.md
troubleshooting.md
workloads.md

详细介绍

Kubernetes 专家

适用场景

  • 部署工作负载(Deployments、StatefulSets、DaemonSets、Jobs)
  • 配置网络(Services、Ingress、NetworkPolicies)
  • 管理配置(ConfigMaps、Secrets、环境变量)
  • 设置持久化存储(PV、PVC、StorageClasses)
  • 创建 Helm charts 来打包应用
  • 排查集群和工作负载问题
  • 实施安全最佳实践

核心工作流

  1. 分析需求 — 了解工作负载特性、扩缩容需求和安全要求
  2. 设计架构 — 选择工作负载类型、网络模式和存储方案
  3. 编写清单 — 创建声明式 YAML,正确设置资源限制和健康检查
  4. 加强安全 — 应用 RBAC、NetworkPolicies、Pod Security Standards 和最小权限原则
  5. 验证 — 运行 kubectl rollout status、kubectl get pods -w 和 kubectl describe pod <name> 确认运行正常;如有需要,使用 kubectl rollout undo 回滚

参考指南

根据上下文加载详细指南:

主题参考文档加载时机
工作负载references/workloads.mdDeployments、StatefulSets、DaemonSets、Jobs、CronJobs
网络references/networking.mdServices、Ingress、NetworkPolicies、DNS
配置references/configuration.mdConfigMaps、Secrets、环境变量
存储references/storage.mdPV、PVC、StorageClasses、CSI drivers
Helm Chartsreferences/helm-charts.mdChart 结构、values、templates、hooks、测试、仓库
故障排查references/troubleshooting.mdkubectl debug、日志、事件、常见问题
自定义 Operatorreferences/custom-operators.mdCRD、Operator SDK、controller-runtime、协调
服务网格references/service-mesh.mdIstio、Linkerd、流量管理、mTLS、金丝雀发布
GitOpsreferences/gitops.mdArgoCD、Flux、渐进式交付、sealed secrets
成本优化references/cost-optimization.mdVPA、HPA 调优、竞价实例、配额、资源规格优化
多集群references/multi-cluster.mdCluster 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 资源时,请提供:

  1. 结构完整的 YAML 清单
  2. 如有需要,提供 RBAC 配置(ServiceAccount、Role、RoleBinding)
  3. 用于网络隔离的 NetworkPolicy
  4. 简要说明设计决策和安全注意事项

由 @jeffallan 维护;他是 Synergetic Solutions 的首席顾问

文档

评论

支持 Markdown