<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Kubernetes APIServer 限流方案

          共 7630字,需瀏覽 16分鐘

           ·

          2021-03-18 20:33

          為了防止突發(fā)流量影響 apiserver 可用性,k8s 支持多種限流配置,包括:

          • MaxInFlightLimit,server 級(jí)別整體限流
          • Client 限流
          • EventRateLimit, 限制 event
          • APF,更細(xì)力度的限制配置

          MaxInFlightLimit

          MaxInFlightLimit 限流,apiserver 默認(rèn)可設(shè)置最大并發(fā)量(集群級(jí)別,區(qū)分只讀與修改操作),通過參數(shù) --max-requests-inflight--max-mutating-requests-inflight,可以簡(jiǎn)單實(shí)現(xiàn)限流。

          Client 限流

          例如 client-go 默認(rèn)的 qps 為5,但是只支持客戶端限流,集群管理員無法控制用戶行為。

          EventRateLimit

          EventRateLimit 在1.13之后支持,只限制 event 請(qǐng)求,集成在 apiserver 內(nèi)部 webhoook 中,可配置某個(gè)用戶、namespace、server 等 event 操作限制,通過 webhook 形式實(shí)現(xiàn)。

          具體原理可以參考提案(https://kubernetes.io/zh/docs/reference/access-authn-authz/admission-controllers/#eventratelimit),每個(gè) eventratelimit 配置使用一個(gè)單獨(dú)的令牌桶限速器,每次event操作,遍歷每個(gè)匹配的限速器檢查是否能獲取令牌,如果可以允許請(qǐng)求,否則返回429。

          優(yōu)點(diǎn)

          • 實(shí)現(xiàn)簡(jiǎn)單,允許一定量的并發(fā)
          • 可支持server/namespace/user等級(jí)別的限流

          缺點(diǎn)

          • 僅支持event,通過webhook實(shí)現(xiàn)只能攔截修改類請(qǐng)求
          • 所有namespace的限流相同,沒有優(yōu)先級(jí)

          API 優(yōu)先級(jí)和公平性

          apiserver默認(rèn)的限流方式太過簡(jiǎn)單,一個(gè)錯(cuò)誤的客戶端發(fā)送大量請(qǐng)求可能造成其他客戶端請(qǐng)求異常,也不支持突發(fā)流量。

          API 優(yōu)先級(jí)和公平性(APF)是 MaxInFlightLimit 限流的一種替代方案,設(shè)計(jì)文檔見提案。

          API 優(yōu)先級(jí)和公平性(1.15以上,alpha版本), 以更細(xì)粒度(byUser,byNamespace)對(duì)請(qǐng)求進(jìn)行分類和隔離。支持突發(fā)流量,通過使用公平排隊(duì)技術(shù)從隊(duì)列中分發(fā)請(qǐng)求從而避免饑餓。

          APF限流通過兩種資源,PriorityLevelConfigurations定義隔離類型和可處理的并發(fā)預(yù)算量,還可以調(diào)整排隊(duì)行為。FlowSchemas用于對(duì)每個(gè)入站請(qǐng)求進(jìn)行分類,并與一個(gè) PriorityLevelConfigurations相匹配。

          可對(duì)用戶或用戶組或全局進(jìn)行某些資源某些請(qǐng)求的限制,如限制 default namespace 寫 services put/patch 請(qǐng)求。

          優(yōu)點(diǎn)

          • 考慮情況較全面,支持優(yōu)先級(jí),白名單等
          • 可支持 server/namespace/user/resource 等細(xì)粒度級(jí)別的限流

          缺點(diǎn)

          • 配置復(fù)雜,不直觀,需要對(duì)APF原理深入了解
          • 功能較新,缺少生產(chǎn)環(huán)境驗(yàn)證

          APF 測(cè)試

          開啟APF,需要在apiserver配置--feature-gates=APIPriorityAndFairness=true --runtime-config=flowcontrol.apiserver.k8s.io/v1alpha1=true

          開啟后,獲取默認(rèn)的 FlowSchemas

          $ kubectl get flowschemas.flowcontrol.apiserver.k8s.io 
          NAME                           PRIORITYLEVEL     MATCHINGPRECEDENCE   DISTINGUISHERMETHOD   AGE    MISSINGPL
          system-leader-election         leader-election   100                  ByUser                152m   False
          workload-leader-election       leader-election   200                  ByUser                152m   False
          system-nodes                   system            500                  ByUser                152m   False
          kube-controller-manager        workload-high     800                  ByNamespace           152m   False
          kube-scheduler                 workload-high     800                  ByNamespace           152m   False
          kube-system-service-accounts   workload-high     900                  ByNamespace           152m   False
          health-for-strangers           exempt            1000                 <none>                151m   False
          service-accounts               workload-low      9000                 ByUser                152m   False
          global-default                 global-default    9900                 ByUser                152m   False
          catch-all                      catch-all         10000                ByUser                152m   False

          FlowShema 配置

          apiVersion: flowcontrol.apiserver.k8s.io/v1alpha1
          kind: FlowSchema
          metadata:
            name: health-for-strangers
          spec:
            matchingPrecedence: 1000 #匹配優(yōu)先級(jí),1~1000,越小優(yōu)先級(jí)越高
            priorityLevelConfiguration: #關(guān)聯(lián)的PriorityLevelConfigurations
              name: exempt #排除rules,即不限制當(dāng)前flowshema的rules
            rules: #請(qǐng)求規(guī)則
            - nonResourceRules: #非資源
              - nonResourceURLs:
                - "/healthz"
                - "/livez"
                - "/readyz"
                verbs:
                - "*"
              subjects: #對(duì)應(yīng)的用戶或用戶組
              - kind: Group
                group:
                  name: system:unauthenticated

          PriorityLevelConfiguration 配置

          apiVersion: flowcontrol.apiserver.k8s.io/v1alpha1
          kind: PriorityLevelConfiguration
          metadata:
            name: leader-election
          spec:
            limited: #限制策略
              assuredConcurrencyShares: 10 
              limitResponse: #如何處理被限制的請(qǐng)求
                queuing: #類型為Queue時(shí),列隊(duì)的設(shè)置
                  handSize: 4 #隊(duì)列
                  queueLengthLimit: 50 #隊(duì)列長(zhǎng)度
                  queues: 16 #隊(duì)列數(shù)
                type: Queue #Queue或者Reject,Reject直接返回429,Queue將請(qǐng)求加入隊(duì)列
            type: Limited #類型,Limited或Exempt, Exempt即不限制

          總結(jié)

          以上是k8s相關(guān)的限流策略,通過多種策略來保證集群的穩(wěn)定性。

          目前 MaxInFlightLimit 可以輕松開啟,但是限制策略不精細(xì),而 APF 功能較新,實(shí)現(xiàn)較復(fù)雜,在充分驗(yàn)證后,可通過 APF 對(duì)全集群進(jìn)行限流。

          原文鏈接:https://qingwave.github.io/k8s-rate-limit/


          K8S 進(jìn)階訓(xùn)練營(yíng)


           點(diǎn)擊屏末  | 即刻學(xué)習(xí)
          瀏覽 132
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲国产精品二二三三区 | 黄色三级黄色毛片 | 欧美日韩国产在线手机 | 国产人妻性生交大片 | 学生妹毛片视频 |