Kubernetes集群运维Skill operating-kubernetes

这个技能专注于高效操作生产环境中的Kubernetes集群,涵盖资源管理、高级调度、网络配置、存储策略、安全硬化和自动伸缩。关键词:Kubernetes运维、容器编排、云原生、DevOps、资源管理、网络安全、自动伸缩、故障排除。

Docker/K8s 0 次安装 0 次浏览 更新于 3/23/2026

名称: operating-kubernetes 描述: 高效操作生产Kubernetes集群,包括资源管理、高级调度、网络、存储、安全硬化和自动伸缩。当部署工作负载到Kubernetes、配置集群资源、实施安全策略或故障排除操作问题时使用。

Kubernetes操作

目的

在生产中操作Kubernetes集群需要掌握资源管理、调度模式、网络架构、存储策略、安全硬化和自动伸缩。此技能提供以操作为先的框架,用于正确调整工作负载大小、实施高可用性模式、使用RBAC和Pod安全标准保护集群,以及系统化故障排除常见失败。

当部署应用程序到Kubernetes、配置集群资源、实施NetworkPolicies进行零信任安全、设置自动伸缩(HPA、VPA、KEDA)、管理持久存储或诊断操作问题如CrashLoopBackOff或资源耗尽时使用此技能。

何时使用此技能

常见触发场景:

  • “将我的应用程序部署到Kubernetes”
  • “配置资源请求和限制”
  • “为我的Pods设置自动伸缩”
  • “实施NetworkPolicies进行安全”
  • “我的Pod卡在Pending/CrashLoopBackOff状态”
  • “配置最小权限的RBAC”
  • “为我的数据库设置持久存储”
  • “跨可用区分布Pods”

覆盖的操作:

  • 资源管理(CPU/内存、QoS类、配额)
  • 高级调度(亲和性、污点、拓扑分布)
  • 网络(NetworkPolicies、Ingress、Gateway API)
  • 存储操作(StorageClasses、PVCs、CSI)
  • 安全硬化(RBAC、Pod安全标准、策略)
  • 自动伸缩(HPA、VPA、KEDA、集群自动伸缩器)
  • 故障排除(系统化调试手册)

资源管理

服务质量(QoS)类

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

保证型(最高优先级):

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

可突增型(中等优先级):

  • 请求小于限制(或仅设置请求)
  • 可以突发超过请求
  • 在节点压力下被驱逐
  • 用于Web服务器、大多数应用程序
resources:
  requests:
    memory: "256Mi"
    cpu: "250m"
  limits:
    memory: "512Mi"  # 2倍请求
    cpu: "500m"

尽力型(最低优先级):

  • 未设置请求或限制
  • 在压力下首先被驱逐
  • 仅用于开发/测试

决策框架:选择哪个QoS类?

工作负载类型 QoS类 配置
关键API/数据库 保证型 请求 == 限制
Web服务器、服务 可突增型 限制为请求的1.5-2倍
批量作业 可突增型 低请求、高限制
开发/测试环境 尽力型 无限制

资源配额和LimitRanges

使用ResourceQuotas(命名空间限制)和LimitRanges(每个容器默认值)强制执行多租户:

# ResourceQuota: 命名空间级别限制
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

高级调度

节点亲和性

使用必需(硬)或偏好(软)约束控制Pods调度到哪些节点:

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: node.kubernetes.io/instance-type
          operator: In
          values:
          - g4dn.xlarge  # GPU实例

污点和容忍

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

# 污点GPU节点以防止非GPU工作负载
kubectl taint nodes gpu-node-1 workload=gpu:NoSchedule
# Pod容忍GPU污点
tolerations:
- key: "workload"
  operator: "Equal"
  value: "gpu"
  effect: "NoSchedule"

拓扑分布约束

跨故障域(区域、节点)均匀分布Pods:

topologySpreadConstraints:
- maxSkew: 1  # Pod计数最大差异
  topologyKey: topology.kubernetes.io/zone
  whenUnsatisfiable: DoNotSchedule
  labelSelector:
    matchLabels:
      app: critical-app

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

网络

NetworkPolicies(零信任安全)

使用NetworkPolicies实施默认拒绝安全:

# 默认拒绝所有流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: production
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
# 允许特定入站(前端→后端)
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 vs. Gateway API

Ingress(传统):

  • 广泛支持、成熟生态系统
  • 表达能力有限
  • 用于现有应用程序

Gateway API(现代):

  • 角色导向设计(集群运维vs.应用开发)
  • 更强大表达能力(HTTPRoute、TCPRoute、TLSRoute)
  • 推荐用于新应用程序(在Kubernetes 1.29+中GA)
# Gateway API示例
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(高性能)
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

存储决策矩阵

工作负载 性能 访问模式 Storage Class
数据库 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(命名空间范围)
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(将角色分配给用户)
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: production
subjects:
- kind: User
  name: jane@example.com
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Pod安全标准

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

# 命名空间带有限制PSS(最安全)
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安全级别:

  • 限制型: 最安全,移除所有特权提升(用于应用程序)
  • 基线型: 最小限制,防止已知提升
  • 特权型: 无限制(仅用于系统工作负载)

有关详细安全模式,包括策略强制执行(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  # 等待5分钟后再缩小

KEDA(事件驱动自动伸缩)

基于事件(队列、cron计划、Prometheus指标)扩展,超出CPU/内存:

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: rabbitmq-scaler
spec:
  scaleTargetRef:
    name: message-processor
  minReplicaCount: 0   # 队列空时缩放到零
  maxReplicaCount: 30
  triggers:
  - type: rabbitmq
    metadata:
      queueName: tasks
      queueLength: "10"  # 当>10条消息时扩展

自动伸缩决策矩阵

场景 使用HPA 使用VPA 使用KEDA 使用集群自动伸缩器
有流量峰值的无状态Web应用 可能
单实例数据库 可能
队列处理器(事件驱动) 可能
Pods待定(节点不足)

有关详细自动伸缩模式,包括VPA和集群自动伸缩器配置,请参阅references/autoscaling.md

故障排除

常见Pod问题

Pod卡在Pending状态:

kubectl describe pod <pod-name>

# 常见原因:
# - CPU/内存不足:减少请求或添加节点
# - 节点选择器不匹配:修复nodeSelector或添加标签
# - PVC未绑定:创建PVC或修复名称
# - 污点不容忍:添加容忍或移除污点

CrashLoopBackOff:

kubectl logs <pod-name>
kubectl logs <pod-name> --previous  # 检查先前崩溃

# 常见原因:
# - 应用程序崩溃:修复代码或配置
# - 缺少环境变量:添加到部署
# - 存活探针失败:增加initialDelaySeconds
# - OOMKilled:增加内存限制或修复泄漏

ImagePullBackOff:

kubectl describe pod <pod-name>

# 常见原因:
# - 镜像不存在:修复镜像名称/标签
# - 需要认证:创建imagePullSecrets
# - 网络问题:检查NetworkPolicies、防火墙规则

服务不可访问:

kubectl get endpoints <service-name>  # 应列出Pod IPs

# 如果endpoints为空:
# - 服务选择器不匹配Pod标签
# - Pods未就绪(就绪探针失败)
# - 检查NetworkPolicies阻塞流量

有关系统化故障排除手册,包括网络和存储问题,请参阅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、PVCs、CSI驱动、卷快照
  • references/security.md - RBAC、Pod安全标准、策略强制执行、密钥
  • references/autoscaling.md - HPA、VPA、KEDA、集群自动伸缩器配置
  • references/troubleshooting.md - 系统化调试手册用于常见失败

示例

  • examples/manifests/ - 复制粘贴就绪的YAML清单
  • examples/python/ - 自动化脚本(审计、成本分析、验证)
  • examples/go/ - 操作器开发示例

工具

  • scripts/validate-resources.sh - 审计无资源限制的Pods
  • 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进行自动调整大小
  • 每个命名空间实施资源配额
  • 监控实际使用情况 vs. 请求

调度:

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

网络:

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

存储:

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

安全:

  • 强制执行Pod安全标准(应用程序使用限制型)
  • 实施最小权限的RBAC
  • 使用策略引擎进行护栏(Kyverno/OPA)
  • 扫描镜像漏洞

自动伸缩:

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