K8S中的APF是怎么用的

发布时间:2021-12-16 09:26:20 作者:柒染
来源:亿速云 阅读:430
# K8S中的APF是怎么用的

## 一、什么是APF

API Priority and Fairness(APF)是Kubernetes 1.20+引入的API请求流量管理机制,属于API Server的流量控制子系统。它通过以下核心机制优化集群稳定性:

1. **多级优先级划分**:将API请求分为不同优先级类别
2. **公平排队算法**:相同优先级的请求按公平性原则分配资源
3. **动态配额调整**:根据系统负载自动调整流量分配

## 二、为什么需要APF

### 传统限流方案的不足
```bash
# 旧版max-requests-inflight配置示例
apiVersion: kubescheduler.config.k8s.io/v1beta2
kind: KubeSchedulerConfiguration
...
maxRequestsInflight: 200

传统方案存在三大缺陷: 1. 粗粒度控制(仅能限制全局请求数) 2. 无法区分请求重要性 3. 缺乏突发流量处理能力

APF带来的改进

三、核心概念解析

1. Flow Schema

定义请求分类规则,典型配置示例:

apiVersion: flowcontrol.apiserver.k8s.io/v1beta2
kind: FlowSchema
metadata:
  name: kube-controller-manager
spec:
  priorityLevelConfiguration:
    name: workload-high
  matchingPrecedence: 800
  rules:
    - resourceRules:
        - apiGroups: ["*"]
          resources: ["*"]
          verbs: ["*"]
      subjects:
        - kind: User
          user:
            name: system:kube-controller-manager

关键字段说明: - matchingPrecedence:匹配优先级(数值越小优先级越高) - resourceRules:资源匹配规则 - subjects:请求主体标识

2. Priority Level

定义处理优先级,配置示例:

apiVersion: flowcontrol.apiserver.k8s.io/v1beta2
kind: PriorityLevelConfiguration
metadata:
  name: global-default
spec:
  type: Limited
  limited:
    assuredConcurrencyShares: 20
    limitResponse:
      type: Queue
      queuing:
        queues: 16
        queueLengthLimit: 50
        handSize: 8

参数含义: - assuredConcurrencyShares:并发份额权重 - queues:排队队列数 - handSize:哈希分配参数

四、配置实战指南

1. 查看当前配置

kubectl get flowschemas.flowcontrol.apiserver.k8s.io
kubectl get prioritylevelconfigurations.flowcontrol.apiserver.k8s.io

2. 自定义配置示例

为CI系统创建专用流:

# ci-flow-schema.yaml
apiVersion: flowcontrol.apiserver.k8s.io/v1beta2
kind: FlowSchema
metadata:
  name: ci-jobs
spec:
  priorityLevelConfiguration:
    name: ci-priority
  matchingPrecedence: 900
  rules:
    - resourceRules:
        - apiGroups: ["batch"]
          resources: ["jobs"]
          verbs: ["create"]
      subjects:
        - kind: Group
          group:
            name: "ci-service-accounts"

# ci-priority-level.yaml
apiVersion: flowcontrol.apiserver.k8s.io/v1beta2
kind: PriorityLevelConfiguration
metadata:
  name: ci-priority
spec:
  type: Limited
  limited:
    assuredConcurrencyShares: 50
    limitResponse:
      type: Queue
      queuing:
        queues: 8
        queueLengthLimit: 100

3. 应用配置

kubectl apply -f ci-flow-schema.yaml
kubectl apply -f ci-priority-level.yaml

五、监控与调优

1. 监控指标

关键Prometheus指标: - apiserver_flowcontrol_current_inqueue_requests - apiserver_flowcontrol_request_execution_seconds - apiserver_flowcontrol_rejected_requests_total

Grafana看板配置示例:

{
  "panels": [{
    "title": "APF Queue Depth",
    "targets": [{
      "expr": "sum by(priority_level) (apiserver_flowcontrol_current_inqueue_requests)"
    }]
  }]
}

2. 性能调优

常见调整参数: - 增加高优先级FlowSchema的assuredConcurrencyShares - 调整queueLengthLimit防止内存溢出 - 优化handSize改善哈希分布

六、最佳实践

  1. 分级配置原则

    • 系统组件:workload-high优先级
    • 用户请求:按业务重要性分级
    • 批量作业:单独分配优先级
  2. 容量规划建议

    单优先级并发量 = (总并发量 × assuredConcurrencyShares) / ∑所有份额
    
  3. 异常处理

    • 监控apiserver_flowcontrol_rejected_requests_total激增
    • 设置合理的queueLengthLimit
    • 重要服务配置备用FlowSchema

七、常见问题排查

1. 请求被限流

检查步骤:

kubectl get --raw /debug/api_priority_and_fairness/dump_requests

2. 配置不生效

验证方法:

kubectl get --raw /metrics | grep apiserver_flowcontrol

3. 性能下降

优化方向: - 减少FlowSchema数量(合并相似规则) - 增加PriorityLevel并发份额 - 调整排队参数

八、版本兼容性说明

Kubernetes版本 APF特性状态
1.18-1.19 Alpha
1.20+ Beta(默认启用)
1.26+ GA

总结

APF机制通过精细化的流量分类和优先级管理,显著提升了K8S集群的稳定性。合理配置FlowSchema和PriorityLevelConfiguration可以实现: - 关键系统组件的高可用保障 - 多租户环境下的公平资源分配 - 突发流量的优雅降级处理

建议生产环境至少为以下组件配置独立FlowSchema: 1. kube-controller-manager 2. kube-scheduler 3. cluster-autoscaler 4. 核心业务组件 “`

推荐阅读:
  1. Tungsten Fabric实战中基于K8s的部署是怎样的
  2. docker中k8s怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kubernetes apf

上一篇:golang刷leetcode动态规划之如何编辑距离

下一篇:Linux sftp命令的用法是怎样的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》