关于 operating-kubernetes
面向 Kubernetes 运维人员的生产集群操作技能,涵盖资源配置、调度、网络、存储、安全与自动扩缩容,并提供故障排查方法和示例。
主要功能
- 01CPU、内存请求与限制配置
- 02高级调度与高可用布局
- 03NetworkPolicies 与网络配置
- 04持久化存储管理
- 05RBAC 与 Pod 安全加固
- 06HPA、VPA、KEDA 自动扩缩容
适用场景
- 01为生产工作负载配置资源配额
- 02跨故障域分布 Pod
- 03为集群实施最小权限访问
- 04排查 Pending 或 CrashLoopBackOff
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ancoleman/ ai-design-components --skill operating-kubernetes安装后在 Claude Code 中输入/operating-kubernetes确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
outputs.yamlexamples/manifests/hpa-cpu-memory.yamlkeda-rabbitmq.yamlnetworkpolicy-allow-frontend.yamlnetworkpolicy-default-deny.yamlpod-security-restricted.yamlqos-burstable.yamlqos-guaranteed.yamlrbac-least-privilege.yamlstorageclass-ssd.yamlexamples/python/generate_cost_report.pylist_pods_without_limits.pyvalidate_rbac.pyreferences/autoscaling.mdnetworking.mdresource-management.mdscheduling-patterns.mdsecurity.mdstorage.mdtroubleshooting.mdscripts/audit-networkpolicies.shcost-analysis.shvalidate-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/数据库 | Guaranteed | requests == 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
存储决策矩阵
| 工作负载 | 性能 | 访问模式 | 存储类别 |
|---|---|---|---|
| 数据库 | 高 | ReadWriteOnce | SSD (gp3/io2) |
| 共享文件 | 中 | ReadWriteMany | NFS/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,防止过度中断