mcpField
O
operating-kubernetes

operating-kubernetes

github.com/ancoleman云与 DevOps52563 次安装46 周前更新
代码仓库

关于 operating-kubernetes

面向 Kubernetes 运维人员的生产集群操作技能,涵盖资源配置、调度、网络、存储、安全与自动扩缩容,并提供故障排查方法和示例。

主要功能

  1. 01CPU、内存请求与限制配置
  2. 02高级调度与高可用布局
  3. 03NetworkPolicies 与网络配置
  4. 04持久化存储管理
  5. 05RBAC 与 Pod 安全加固
  6. 06HPA、VPA、KEDA 自动扩缩容

适用场景

  1. 01为生产工作负载配置资源配额
  2. 02跨故障域分布 Pod
  3. 03为集群实施最小权限访问
  4. 04排查 Pending 或 CrashLoopBackOff

安装

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

$npx skills add https://github.com/ancoleman/ai-design-components --skill operating-kubernetes

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

包含的文件

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

outputs.yaml
examples/manifests/
hpa-cpu-memory.yaml
keda-rabbitmq.yaml
networkpolicy-allow-frontend.yaml
networkpolicy-default-deny.yaml
pod-security-restricted.yaml
qos-burstable.yaml
qos-guaranteed.yaml
rbac-least-privilege.yaml
storageclass-ssd.yaml
examples/python/
generate_cost_report.py
list_pods_without_limits.py
validate_rbac.py
references/
autoscaling.md
networking.md
resource-management.md
scheduling-patterns.md
security.md
storage.md
troubleshooting.md
scripts/
audit-networkpolicies.sh
cost-analysis.sh
validate-resources.sh

详细介绍

Kubernetes 运维

目的

在生产环境中运维 Kubernetes 集群,需要精通资源管理、调度模式、网络架构、存储策略、安全加固和自动扩缩容。本技能提供以运维为先的框架,用于为工作负载调整合适的资源规格、实施高可用模式、使用 RBAC 和 Pod Security Standards 加固集群,以及系统化排查常见故障。

在将应用部署到 Kubernetes、配置集群资源、实施 NetworkPolicies 以实现零信任安全、设置自动扩缩容(HPA、VPA、KEDA)、管理持久化存储,或诊断 CrashLoopBackOff、资源耗尽等运维问题时,请使用本技能。

何时使用此技能

常见触发场景:

  • “将我的应用部署到 Kubernetes”
  • “配置资源请求和限制”
  • “为我的 Pod 设置自动扩缩容”
  • “实施 NetworkPolicies 以保障安全”
  • “我的 Pod 卡在 Pending/CrashLoopBackOff”
  • “按照最小权限原则配置 RBAC”
  • “为我的数据库设置持久化存储”
  • “将 Pod 分散到不同的可用区”

涵盖的运维内容:

  • 资源管理(CPU/内存、QoS 类别、配额)
  • 高级调度(亲和性、污点、拓扑分布)
  • 网络(NetworkPolicies、Ingress、Gateway API)
  • 存储运维(StorageClasses、PVC、CSI)
  • 安全加固(RBAC、Pod Security Standards、策略)
  • 自动扩缩容(HPA、VPA、KEDA、集群自动扩缩容器)
  • 故障排查(系统化调试手册)

资源管理

服务质量(QoS)类别

Kubernetes 根据资源请求和限制分配 QoS 类别:

Guaranteed(最高优先级):

  • CPU 和内存的请求等于限制
  • 除非超过限制,否则绝不会被驱逐
  • 用于关键生产服务
resources:
  requests:
    memory: "512Mi"
    cpu: "500m"
  limits:
    memory: "512Mi"  # Same as request
    cpu: "500m"

Burstable(中优先级):

  • 请求低于限制(或仅设置请求)
  • 可以突发使用超过请求量的资源
  • 节点压力过大时会被驱逐
  • 用于 Web 服务器和大多数应用
resources:
  requests:
    memory: "256Mi"
    cpu: "250m"
  limits:
    memory: "512Mi"  # 2x request
    cpu: "500m"

BestEffort(最低优先级):

  • 未设置请求或限制
  • 压力过大时最先被驱逐
  • 仅用于开发/测试
决策框架:选择哪种 QoS 类别?
工作负载类型QoS 类别配置
关键 API/数据库Guaranteedrequests == limits
Web 服务器、服务Burstable限制为请求的 1.5-2 倍
批处理作业Burstable低请求、高限制
开发/测试环境BestEffort不设限制
ResourceQuotas 和 LimitRanges

使用 ResourceQuotas(命名空间限制)和 LimitRanges(每个容器的默认值)实施多租户管控:

# ResourceQuota: Namespace-level limits
apiVersion: v1
kind: ResourceQuota
metadata:
  name: team-quota
  namespace: team-alpha
spec:
  hard:
    requests.cpu: "10"
    requests.memory: "20Gi"
    limits.cpu: "20"
    limits.memory: "40Gi"
    pods: "50"

关于更详细的资源管理模式,包括 Vertical Pod Autoscaler(VPA),请参阅 references/resource-management.md。

高级调度

节点亲和性

通过必需(硬性)或首选(软性)约束,控制 Pod 调度到哪些节点:

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: node.kubernetes.io/instance-type
          operator: In
          values:
          - g4dn.xlarge  # GPU instance
污点和容忍度

为特定工作负载预留节点(与亲和性相反):

# Taint GPU nodes to prevent non-GPU workloads
kubectl taint nodes gpu-node-1 workload=gpu:NoSchedule
# Pod tolerates GPU taint
tolerations:
- key: "workload"
  operator: "Equal"
  value: "gpu"
  effect: "NoSchedule"
拓扑分布约束

将 Pod 均匀分布到不同故障域(可用区、节点):

topologySpreadConstraints:
- maxSkew: 1  # Max difference in pod count
  topologyKey: topology.kubernetes.io/zone
  whenUnsatisfiable: DoNotSchedule
  labelSelector:
    matchLabels:
      app: critical-app

关于更高级的调度模式,包括 Pod 优先级和抢占,请参阅 references/scheduling-patterns.md。

网络

NetworkPolicies(零信任安全)

使用 NetworkPolicies 实施默认拒绝策略:

# Default deny all traffic
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: production
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
# Allow specific ingress (frontend → backend)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: backend-allow-frontend
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 8080
Ingress 与 Gateway API

Ingress(旧版):

  • 支持广泛,生态成熟
  • 表达能力有限
  • 用于现有应用

Gateway API(现代):

  • 面向角色的设计(集群运维人员与应用开发人员)
  • 表达能力更强(HTTPRoute、TCPRoute、TLSRoute)
  • 推荐用于新应用(Kubernetes 1.29+ 中已正式发布)
# Gateway API example
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: app-routes
spec:
  parentRefs:
  - name: production-gateway
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /api
    backendRefs:
    - name: backend
      port: 8080

关于更详细的网络模式,包括服务网格集成,请参阅 references/networking.md。

存储

StorageClasses(定义性能层级)

StorageClasses 定义存储层级,以满足不同工作负载的需求:

# AWS EBS SSD (high performance)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: ebs.csi.aws.com
parameters:
  type: gp3
  iopsPerGB: "50"
  encrypted: "true"
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
reclaimPolicy: Delete
存储决策矩阵
工作负载性能访问模式存储类别
数据库高ReadWriteOnceSSD (gp3/io2)
共享文件中ReadWriteManyNFS/EFS
日志(临时)低ReadWriteOnce标准 HDD
ML 模型高ReadOnlyMany对象存储 (S3)

访问模式:

  • ReadWriteOnce (RWO): 单个节点读写(最常见)
  • ReadOnlyMany (ROX): 多个节点只读
  • ReadWriteMany (RWX): 多个节点读写(需要网络存储)

如需了解包括卷快照和 CSI 驱动程序在内的详细存储操作,请参阅 references/storage.md。

安全

RBAC(基于角色的访问控制)

使用 RBAC 实施最小权限访问:

# Role (namespace-scoped)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-reader
  namespace: production
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log"]
  verbs: ["get", "list", "watch"]
---
# RoleBinding (assign role to user)
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: production
subjects:
- kind: User
  name: [email protected]
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
Pod 安全标准

在命名空间级别强制执行安全的 Pod 配置:

# Namespace with Restricted PSS (most secure)
apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted

Pod 安全级别:

  • Restricted: 安全性最高,移除所有权限提升(用于应用程序)
  • Baseline: 限制最少,可防止已知的权限提升
  • Privileged: 不受限制(仅用于系统工作负载)

如需了解包括策略强制执行 (Kyverno/OPA) 和密钥管理在内的详细安全模式,请参阅 references/security.md。

自动扩缩

Horizontal Pod Autoscaler (HPA)

根据 CPU、内存或自定义指标扩缩 Pod 副本:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300  # Wait 5min before scaling down
KEDA(事件驱动的自动扩缩)

根据 CPU/内存以外的事件扩缩(队列、cron 计划、Prometheus 指标):

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: rabbitmq-scaler
spec:
  scaleTargetRef:
    name: message-processor
  minReplicaCount: 0   # Scale to zero when queue empty
  maxReplicaCount: 30
  triggers:
  - type: rabbitmq
    metadata:
      queueName: tasks
      queueLength: "10"  # Scale up when >10 messages
自动扩缩决策矩阵
场景使用 HPA使用 VPA使用 KEDA使用 Cluster Autoscaler
流量突增的无状态 Web 应用✅❌❌视情况而定
单实例数据库❌✅❌视情况而定
队列处理器(事件驱动)❌❌✅视情况而定
Pod 等待调度(节点不足)❌❌❌✅

如需了解包括 VPA 和集群自动扩缩器配置在内的详细自动扩缩模式,请参阅 references/autoscaling.md。

故障排查

常见 Pod 问题

Pod 卡在 Pending 状态:

kubectl describe pod <pod-name>

# Common causes:
# - Insufficient CPU/memory: Reduce requests or add nodes
# - Node selector mismatch: Fix nodeSelector or add labels
# - PVC not bound: Create PVC or fix name
# - Taint intolerance: Add toleration or remove taint

CrashLoopBackOff:

kubectl logs <pod-name>
kubectl logs <pod-name> --previous  # Check previous crash

# Common causes:
# - Application crash: Fix code or configuration
# - Missing environment variables: Add to deployment
# - Liveness probe failing: Increase initialDelaySeconds
# - OOMKilled: Increase memory limit or fix leak

ImagePullBackOff:

kubectl describe pod <pod-name>

# Common causes:
# - Image doesn't exist: Fix image name/tag
# - Authentication required: Create imagePullSecrets
# - Network issues: Check NetworkPolicies, firewall rules

无法访问服务:

kubectl get endpoints <service-name>  # Should list pod IPs

# If endpoints empty:
# - Service selector doesn't match pod labels
# - Pods aren't ready (readiness probe failing)
# - Check NetworkPolicies blocking traffic

如需了解包括网络和存储问题在内的系统化故障排查手册,请参阅 references/troubleshooting.md。

参考文档

深入说明
  • references/resource-management.md - 资源请求/限制、QoS 类别、ResourceQuotas、VPA
  • references/scheduling-patterns.md - 节点亲和性、污点/容忍度、拓扑分布、优先级
  • references/networking.md - NetworkPolicies、Ingress、Gateway API、服务网格集成
  • references/storage.md - StorageClasses、PVC、CSI 驱动程序、卷快照
  • references/security.md - RBAC、Pod 安全标准、策略强制执行、密钥
  • references/autoscaling.md - HPA、VPA、KEDA、集群自动扩缩器配置
  • references/troubleshooting.md - 针对常见故障的系统化调试手册
示例
  • examples/manifests/ - 可直接复制粘贴的 YAML 清单
  • examples/python/ - 自动化脚本(审计、成本分析、验证)
  • examples/go/ - Operator 开发示例
工具
  • scripts/validate-resources.sh - 审计未设置资源限制的 Pod
  • scripts/audit-networkpolicies.sh - 查找未配置 NetworkPolicies 的命名空间
  • scripts/cost-analysis.sh - 按命名空间划分的资源成本明细

相关技能

  • building-ci-pipelines - 从 CI/CD 部署到 Kubernetes(kubectl apply、Helm、GitOps)
  • observability - 监控集群和工作负载(Prometheus、Grafana、追踪)
  • secret-management - 在 Kubernetes 中保护密钥(External Secrets、Sealed Secrets)
  • testing-strategies - 测试清单和部署(Kubeval、Conftest、Kind)
  • infrastructure-as-code - 配置 Kubernetes 集群(Terraform、Cluster API)
  • gitops-workflows - 声明式集群管理(Flux、ArgoCD)

最佳实践摘要

资源管理:

  • 始终设置 CPU 和内存请求与限制
  • 使用 VPA 自动调整资源配置
  • 为每个命名空间实施资源配额
  • 监控实际用量与请求量的差异

调度:

  • 使用拓扑分布约束来实现高可用性
  • 应用污点隔离工作负载(GPU、竞价实例)
  • 为关键工作负载设置 Pod 优先级

网络:

  • 实施默认拒绝的 NetworkPolicies
  • 为新应用使用 Gateway API
  • 在入口层应用速率限制

存储:

  • 使用 CSI 驱动(而非旧版供应器)
  • 按性能层级定义 StorageClasses
  • 为有状态应用启用卷快照

安全:

  • 强制执行 Pod 安全标准(应用使用 Restricted 级别)
  • 遵循最小权限原则实施 RBAC
  • 使用策略引擎设置防护措施(Kyverno/OPA)
  • 扫描镜像中的漏洞

自动扩缩:

  • 对无状态工作负载使用 HPA
  • 对事件驱动型工作负载使用 KEDA
  • 启用并设置集群自动扩缩器的限制
  • 设置 PodDisruptionBudgets,防止过度中断

评论

支持 Markdown