Knative Autoscaler 自定義彈性伸縮
本文分享自天翼雲開發者社群@《 Knative Autoscaler 自定義彈性伸縮 》,作者: 我是小朋友
背景
如今各大雲廠商都開始提供 Serverless Kubernetes 服務,簡化叢集管理,降低運維管理負擔,讓 Kubernetes 更加簡單。那麼問題來了,一個系統到底需要具備怎樣的能力才能更好地支撐 Serverless 應用呢?
Serverless 應用需要的是面向應用的管理功能,比如:升級、回滾、灰度釋出、流量管理以及彈性伸縮等功能。
Knative 就是建立在 Kubernetes 之上的 Serverless 應用編排框架。Knative 的主要功能之一是自動縮放應用程式的副本,包括在沒有收到流量時將應用程式縮放為 0。預設 Autoscaler 元件監視流向應用程式的流量,並根據配置的指標向上或向下擴充套件副本。本期主要講解 Knative Autoscaler 的原理和使用。
說明:
如需實踐 Knative Autoscaler 的使用,您可以先了解以下內容。
Kubernetes:需要準備一個 Kubernetes 的叢集,並學習相關的命令。
Knative Serving:您可以按照入門指南安裝 Knative 。
Autoscaler 原理
Autoscaler 根據監控到的指標(concurrency、rps、cpu等),並根據配置的指標來放大或縮小副本,從而實現自動擴縮容。
(來源:Kubernetes Autoscaler)
KPA VS HPA
Knative Serving 支援 Knative Pod Autoscaler(KPA)和 Kubernetes 的 Horizontal Pod Autoscaler(HPA)。以下是不同 scaler 的功能和侷限性。
KPA
Knative Serving 核心的一部分,並且在安裝 Knative Serving 後預設啟用;
支援從 0 擴充套件功能;
不支援基於 CPU 的自動縮放。
HPA
不是 Knative Serving 核心的一部分,安裝 Kubernetes 後預設啟動;
不支援從 0 擴充套件功能;
支援基於 CPU 的自動縮放。
scaling 配置
透過以上介紹,我們初步瞭解了 Autoscaler執行原理,接下來介紹如何配置KP A 或 HPA。
scaling 配置用於指定放大和縮小的行為,可以為兩個方向指定一個穩定視窗,以防止縮放目標中的副本數量波動。類似地,指定擴充套件策略可以控制擴充套件時副本的變化率。
可以使用 annotations 配置 Autoscaler 實現的型別(KPA 或 HPA);
Global settings key:pod-autoscaler-class;
Per-revision annotation key:autoscaling.knative.dev/class;
Possible values:“kpa.autoscaling.knative.dev” or “hpa.autoscaling.knative.dev”;
Default:“kpa.autoscaling.knative.dev”;
配置示例:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/class: "kpa.autoscaling.knative.dev"
spec:
containers:
- image: gcr.io/knative-samples/helloworld-go
配置指標說明
度量標準配置定義自動定標器監視哪種度量標準型別,配置引數說明如下:
· Setting metrics per revision: 對於 per-revision 配置,這是使用 autoscaling.knative.dev/metric 註解確定的。可以 per-revision 配置的可能的度量標準型別取決於使用的 Autoscaler 實現的型別:
· 預設的 KPA Autoscaler 支援併發和 rps 指標;
· HPA Autoscaler 支援 cpu 指標。
· Targets:配置 Targets 會為 Autoscaler 提供一個值,它會嘗試為 revision 的配置指標維護該值。
· Configuring scale to zero:只有在使用 Knative Pod Autoscaler(KPA) 時才能啟用縮放為零,並且只能全域性配置。
· Enable scale to zero:scale to zero 值控制 Knative 是否允許副本縮小到零(如果設定為 true),或者如果設定為 false 則停止在 1 個副本。
· Scale to zero grace period:指定一個上限時間限制,系統將在內部等待從零開始縮放的機器在刪除最後一個副本之前就位。
· Configuring concurrency:併發性決定了應用程式的每個副本在任何給定時間可以處理的併發請求數。
· Soft versus hard concurrency limits:可以設定軟或硬併發限制。如果同時指定了軟限制和硬限制,則將使用兩個值中較小的一個。這可以防止 Autoscaler 具有硬限制值不允許的目標值。
· Target utilization:指定 Autoscaler 實際應針對的先前指定目標的百分比。這也稱為指定副本執行的熱度,這會導致 Autoscaler 在達到定義的硬限制之前擴充套件。
· Configuring scale bounds:配置上限和下限以控制自動縮放行為。還可以指定在建立後立即將 revision 縮放到的初始比例。
· Lower bound:每個修訂版應具有的最小副本數。
· Upper bound:每個修訂版應具有的最大副本數。
· Initial scale:revision 在建立後必須立即達到的初始目標比例,然後再將其標記為就緒。
· Scale Down Delay:縮減延遲指定了一個時間視窗,在應用縮減決策之前,該時間視窗必須以降低的併發性透過。
配置示例
在使用預設配置情況下的 Knative Serving (KPA)。
建立一個 demo 服務。
cat <<-EOF | kubectl apply -f -
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: test
spec:
template:
metadata:
annotations:
initial-scale: "1"
allow-zero-initial-scale: "false"
enable-scale-to-zero: "false"
spec:
containers:
- image: wentevill/demo:latest
EOF
檢視 pod 狀態,在一段時間沒有流量的情況下,scale 到 0。
kubectl get pods
NAME READY STATUS RESTARTS AGE
test-00001-deployment-c4546964-mjwqm 2/2 Running 0 15s
檢視 ksvc 狀態。
kubectl get ksvc
NAME URL LATESTCREATED LATESTREADY READY REASON
test test-00001 test-00001 True
說明:
這裡使用的是 magicDNS,使用其他的地址可能會不一樣,請以實際使用為準。
訪問 service 。
curl
a. pod 存在:執行並返回結果。
b. pod 不存在:autoscaler 擴容(冷啟動)到 1,然後執行並返回結果。
說明:
冷啟動時長從毫秒到分鐘級別,第一批流量可能會超時。
總結
以上就是 Knative Autoscale 的內容,透過 KPA 技術實現真正意義上的 Severless。
引用連結
[1] Knavtive Serving:https://knative.dev/docs/serving
[2] Horizontal Pod Autoscaler:
[3] Kubernete Autoscaler:
原文連結: https://blog.csdn.net/Qingcloudedu/article/details/120292685
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014251/viewspace-2934724/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Fluid 給資料彈性一雙隱形的翅膀 -- 自定義彈性伸縮UI
- 彈性佈局(伸縮佈局)
- AutoScaling彈性伸縮配置重大升級
- AutoScaling彈性伸縮附加與分離RDS例項
- AutoScaling 彈性伸縮附加與分離RDS例項
- Kubernetes彈性伸縮全場景解讀(五) - 定時伸縮元件釋出與開源元件
- 如何使用 Kubernetes 實現應用程式的彈性伸縮
- Effective HPA:預測未來的彈性伸縮產品
- EMQX Operator 如何快速建立彈性伸縮的 MQTT 叢集MQQT
- 使用 tke-autoscaling-placeholder 實現秒級彈性伸縮
- AutoScaling彈性伸縮附加與分離負載均衡例項負載
- Serverless:基於個性化服務畫像的彈性伸縮實踐Server
- 如何基於容器網路流量指標進行彈性伸縮指標
- SpringCloud 應用在 Kubernetes 上的最佳實踐 —— 高可用(彈性伸縮)SpringGCCloud
- 阿里云云計算ACP認證重點梳理3—彈性伸縮阿里
- 一個例子體會Kubernetes內容器的高可用性和彈性伸縮
- 彈性伸縮:高可用架構利器(架構+演算法+思維)架構演算法
- 雲端乾貨|降本必備—彈性伸縮的基本原理
- Node.js的可伸縮性Node.js
- RDS for MySQL Serverless公測上線:彈性伸縮,最高可降成本超80%MySqlServer
- KubeVela + KEDA:為應用帶來“與生俱來”的彈性伸縮能力
- 基於Kubernetes和Istio的Serverless框架Knative解析之AutoscalerServer框架
- 雲原生的彈性 AI 訓練系列之三:藉助彈性伸縮的 Jupyter Notebook,大幅提高 GPU 利用率AIGPU
- 透過HPA+CronHPA組合應對業務複雜彈性伸縮場景
- 我們總結了彈性伸縮的五個條件與六個教訓
- avalonia自定義彈窗
- 在騰訊雲容器服務 TKE 中利用 HPA 實現業務的彈性伸縮
- vue2 - element彈框自定義指令 實現拖動、縮放Vue
- uniapp 自定義彈窗元件APP元件
- 自定義版本更新彈窗
- 【朝花夕拾】Android自定義View篇之(十一)View的滑動,彈性滑動與自定義PagerViewAndroidView
- 免運維、彈性伸縮、按需付費...Serverless還有多少驚喜是我不知道的?運維Server
- WPF 自定義MessageBox 彈窗提示 彈窗載入
- 大型網站的可伸縮性架構如何設計?網站架構
- win10怎麼開啟自定義縮放 win10怎麼自定義縮放Win10
- avalonia實現自定義小彈窗
- Redis 叢集伸縮原理Redis
- CSS-伸縮佈局CSS