ข้อจำกัดความรับผิดชอบ : โครงการนี้อยู่ในช่วงเบต้า - API อาจมีการเปลี่ยนแปลง
ตัวควบคุม Watermark Pod Autoscaler (WPA) เป็นตัวควบคุมแบบกำหนดเองที่ขยายแนวนอน Pod Autoscaler (HPA)
Watermark Pod Autoscaler Controller เป็นตัวควบคุมทางเลือกแทนตัวควบคุม Autoscaler Pod แนวนอนต้นน้ำ
หากคุณต้องการปรับขนาดแอปพลิเคชันบางส่วนของคุณโดยอัตโนมัติ แต่:
เช่น
apiVersion : datadoghq.com/v1alpha1
kind : WatermarkPodAutoscaler
[...]
spec :
algorithm : absolute
[...]
มีสองตัวเลือกในการคำนวณจำนวนเรพลิกาที่ต้องการ:
average
ตัวควบคุมจะใช้ value from the external metrics provider
/ current number of replicas
และจะเปรียบเทียบกับลายน้ำ จำนวนเรพลิกาที่แนะนำคือ value from the external metrics provider
/ watermark
(ต่ำหรือสูงขึ้นอยู่กับค่าปัจจุบัน)
อัลกอริทึม average
เหมาะสมอย่างยิ่งหากคุณใช้หน่วยเมตริกที่ไม่ขึ้นอยู่กับจำนวนเรพลิกา โดยทั่วไป จำนวนคำขอที่ ELB ได้รับสามารถระบุจำนวนเว็บเซิร์ฟเวอร์ที่เราต้องการได้ เนื่องจากเรารู้ว่าเว็บเซิร์ฟเวอร์เดียวควรจัดการ n
rq/s การเพิ่มเรพลิกาจะไม่เพิ่มหรือลดจำนวนคำขอที่โหลดบาลานเซอร์ได้รับ
absolute
ค่าเริ่มต้นคือ absolute
ควรใช้เมตริก เฉลี่ย จำนวนเรพลิกาที่แนะนำจะคำนวณเป็น current number of replicas
* value from the external metrics provider
/ watermark
อัลกอริธึม absolute
เป็นค่าเริ่มต้น เนื่องจากเป็นกรณีการใช้งานที่พบบ่อยที่สุด ตัวอย่างเช่น หากคุณต้องการให้แอปพลิเคชันของคุณทำงานระหว่าง 60% ถึง 80% ของ CPU และ avg:cpu.usage
อยู่ที่ 85% คุณจะต้องขยายขนาด เมตริกจะต้องมีความสัมพันธ์กับจำนวนเรพลิกา
หมายเหตุ : ในตัวควบคุมอัปสตรีม จะใช้เฉพาะฟังก์ชัน math.Ceil
เท่านั้นเพื่อปัดเศษจำนวนเรพลิกาที่แนะนำ
ซึ่งหมายความว่า หากคุณมีเกณฑ์ที่ 10 คุณจะต้องใช้งานให้ถึง 8.999... จากผู้ให้บริการตัววัดภายนอกเพื่อดาวน์สเกลหนึ่งแบบจำลอง อย่างไรก็ตาม การใช้งาน 10.001 จะทำให้คุณขยายขนาดได้หนึ่งเรพลิกา
ตัวควบคุม WPA จะใช้ math.Floor
หากค่าอยู่ใต้ลายน้ำด้านล่าง สิ่งนี้ทำให้มั่นใจได้ถึงพฤติกรรมที่สมมาตร เมื่อใช้ร่วมกับตัวเลือกการปรับขนาดอื่นๆ จะช่วยให้สามารถควบคุมเวลาในการลดขนาดได้ละเอียดยิ่งขึ้น
หากต้องการใช้ Watermark Pod Autoscaler ให้ปรับใช้ในคลัสเตอร์ Kubernetes ของคุณ:
ดาวน์โหลดไฟล์ zip โครงการ Watermark Pod Autoscaler สามารถดูซอร์สโค้ดได้ที่ DataDog/watermarkpodautoscaler
แตกไฟล์โปรเจ็กต์แล้วไปที่โฟลเดอร์ ./watermarkpodautoscaler
watermarkpodautoscaler
กำหนดเนมสเปซของคุณและตัวควบคุม Watermark Pod Autoscaler:
DD_NAMESPACE= " datadog "
DD_NAMEWPA= " wpacontroller "
สร้างเนมสเปซ:
kubectl create ns $DD_NAMESPACE
ติดตั้งตัวควบคุม Watermark Pod Autoscaler ด้วย Helm:
helm install $DD_NAMEWPA -n $DD_NAMESPACE ./chart/watermarkpodautoscaler
WatermarkPodAutoscaler Controler มาพร้อมกับปลั๊กอิน kubectl ซึ่งมีชุดยูทิลิตี้ตัวช่วย ข้อมูลเพิ่มเติมเกี่ยวกับหน้าเอกสารเฉพาะ: docs/kubectl-plugin.md
สร้าง WPA ของคุณในเนมสเปซเดียวกันกับการปรับใช้เป้าหมายของคุณ
Datadog Cluster Agent จะรับเหตุการณ์การสร้าง/อัปเดต/การลบ แยกวิเคราะห์ข้อมูลจำเพาะ WPA เพื่อแยกเมตริกและขอบเขตที่จะได้รับจาก Datadog
ในตัวอย่างนี้ เราใช้การกำหนดค่าข้อมูลจำเพาะต่อไปนี้:
apiVersion : datadoghq.com/v1alpha1
kind : WatermarkPodAutoscaler
metadata :
name : example-watermarkpodautoscaler
spec :
downscaleForbiddenWindowSeconds : 60
downscaleDelayBelowWatermarkSeconds : 300
upscaleForbiddenWindowSeconds : 30
upscaleDelayAboveWatermarkSeconds : 30
scaleDownLimitFactor : 30
scaleUpLimitFactor : 50
minReplicas : 4
maxReplicas : 9
scaleTargetRef :
kind : " Deployment "
name : " some_app "
apiVersion : " apps/v1 "
metrics :
- external :
highWatermark : 400m
lowWatermark : 150m
metricName : custom.request_duration.max
metricSelector :
matchLabels :
kubernetes_cluster : mycluster
service : billing
short_image : billing-app
type : External
tolerance : " 0.01 "
รองรับทั้งประเภทเมตริก External
และ Resource
ตัวควบคุม WPA ใช้รูปแบบเดียวกับ HPA ข้อมูลเพิ่มเติมที่นี่
เริ่มต้นด้วยลายน้ำ ค่าของตัวชี้วัดที่รวบรวม ( watermarkpodautoscaler.wpa_controller_value
) จาก Datadog เป็นสีม่วงเมื่ออยู่ระหว่างขอบเขต ( watermarkpodautoscaler.wpa_controller_low_watermark
และ watermarkpodautoscaler.wpa_controller_high_watermark
) จะสั่งการให้คอนโทรลเลอร์ไม่ทริกเกอร์เหตุการณ์การปรับขนาด โดยจะระบุเป็น Quantities
ดังนั้นคุณจึงใช้ m | "" | k | M | G | T | P | E
ได้ m | "" | k | M | G | T | P | E
เพื่อแสดงค่าที่คุณต้องการใช้ได้อย่างง่ายดาย
เราสามารถใช้เมตริก watermarkpodautoscaler.wpa_controller_restricted_scaling{reason:within_bounds}
เพื่อตรวจสอบว่ามันถูกจำกัดไว้จริงๆ หมายเหตุ : เมตริกถูกคูณด้วย 1,000 เพื่อให้ชัดเจนยิ่งขึ้นว่าในช่วงเวลานี้ ตัวควบคุมไม่สามารถทริกเกอร์เหตุการณ์การปรับขนาดได้
ตัวเลือกการกำหนดค่าชุดที่สองเกี่ยวข้องกับความเร็วในการปรับขนาดของการปรับใช้ของคุณ ซึ่งควบคุมโดย scaleDownLimitFactor
และ scaleUpLimitFactor
ค่าเหล่านี้เป็นจำนวนเต็มระหว่าง 0 ถึง 100 ซึ่งแสดงถึงอัตราส่วนสูงสุดของการลดขนาดและการลดขนาดตามลำดับ โดยพิจารณาจากจำนวนแบบจำลองปัจจุบัน
ในกรณีนี้ หากเรามีแบบจำลอง 10 รายการและจำนวนแบบจำลองที่แนะนำที่ 14 รายการ (ดูส่วนอัลกอริทึมสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับคำแนะนำ) โดยมี scaleUpFactor
เป็น 30 (%) เราจะต่อยอดไว้ที่แบบจำลอง 13 รายการ
ในกราฟต่อไปนี้ เราจะเห็นว่าจำนวนแบบจำลองที่แนะนำ (เป็นสีม่วง) ซึ่งแสดงโดยหน่วยเมตริก watermarkpodautoscaler.wpa_controller_replicas_scaling_proposal
สูงเกินไปเมื่อเทียบกับจำนวนแบบจำลองปัจจุบัน การดำเนินการนี้จะทริกเกอร์ตรรกะการกำหนดสูงสุดสูงสุด ซึ่งสามารถตรวจสอบได้โดยใช้เมตริก watermarkpodautoscaler.wpa_controller_restricted_scaling{reason:upscale_capping}
( หมายเหตุ : เช่นเดียวกับข้างต้น เมตริกจะถูกคูณเพื่อให้ชัดเจนยิ่งขึ้น) ดังนั้น จำนวนแบบจำลองที่มีประสิทธิผล watermarkpodautoscaler.wpa_controller_replicas_scaling_effective
จะเพิ่มขนาดขึ้น แต่เป็นไปตาม scaleUpLimitFactor
ในตัวอย่างนี้ เราหลีกเลี่ยงการลดขนาดมากเกินไป และเราสามารถใช้ชุดเมตริกเดียวกันเพื่อรับประกันว่าเราจะลดขนาดลงตามจำนวนแบบจำลองที่สมเหตุสมผลเท่านั้น
สิ่งสำคัญคือต้องทราบว่าเรามักจะตัดสินใจปรับขนาดอย่างระมัดระวัง
scaleUpLimitFactor
ที่ 29%: หากเรามีแบบจำลอง 10 รายการและแนะนำให้มี 13 รายการ เราจะอัปเกรดเป็น 12 รายการscaleDownLimitFactor
ที่ 29%: หากเรามีแบบจำลอง 10 รายการและแนะนำให้มี 7 รายการ เราจะลดขนาดลงเหลือ 8 รายการminReplicas
และ maxReplicas
จะมีความสำคัญเหนือกว่า โปรดดูส่วนลำดับความสำคัญ สุดท้าย ตัวเลือกสุดท้ายที่มีคือ downscaleForbiddenWindowSeconds
และ upscaleForbiddenWindowSeconds
สิ่งเหล่านี้แสดงถึงระยะเวลา (เป็นวินาที) หลังจาก เหตุการณ์การปรับขนาด ที่ต้องรอก่อนที่จะลดขนาดและขยายขนาดตามลำดับ เราเก็บเฉพาะเหตุการณ์การปรับขนาดครั้งล่าสุด และเราจะไม่เปรียบเทียบ upscaleForbiddenWindowSeconds
กับครั้งสุดท้ายที่เราขยายขนาดเท่านั้น
ในตัวอย่างต่อไปนี้ เราจะเห็นว่าจำนวนเรพลิกาที่แนะนำจะถูกละเว้นหากเราอยู่ในช่วงพัก ระยะคูลดาวน์ดาวน์สเกลสามารถมองเห็นได้ด้วย watermarkpodautoscaler.wpa_controller_transition_countdown{transition:downscale}
และแสดงเป็นสีเหลืองบนกราฟด้านล่าง เราจะเห็นได้ว่ากราฟของเรานั้นสูงกว่าช่วงคูลดาวน์ที่เพิ่มขึ้นอย่างมาก ( transition:upscale
) ที่เป็นสีส้ม เมื่อเราได้รับการแนะนำให้ปรับขนาด เราจะปรับขนาดเมื่อหน้าต่างคูลดาวน์ที่เหมาะสมสิ้นสุดลงเท่านั้น การดำเนินการนี้จะรีเซ็ตการนับถอยหลังทั้งสองครั้ง
เพื่อหลีกเลี่ยงการปรับขนาดจากการระเบิดคุณสามารถใช้คุณสมบัติต่อไปนี้: downscaleDelayBelowWatermarkSeconds
และ/หรือ upscaleDelayAboveWatermarkSeconds
ตัวเลือกเหล่านี้ระบุเป็นจำนวนเต็ม เมตริกจะต้องอยู่เหนือหรือใต้ลายน้ำตามลำดับตลอดระยะเวลาที่กำหนดค่าไว้ คุณสามารถติดตามเวลาที่เหลืออยู่ในสถานะของ WPA ได้:
- lastTransitionTime: "2022-11-15T02:02:09Z"
message: Allow downscaling if the value stays under the Watermark
reason: Value below Low Watermark
status: "False"
type: BelowLowWatermark
หรือในบันทึกของตัวควบคุม:
{"level":"info","ts":1668481092517.446,"logger":"controllers.WatermarkPodAutoscaler","msg":"Will not scale: value has not been out of bounds for long enough","watermarkpodautoscaler":"datadog/example-watermarkpodautoscaler","wpa_name":"example-watermarkpodautoscaler","wpa_namespace":"datadog","time_left":3209}
หมายเหตุ: หากคุณใช้หลายเมตริกด้วยคุณลักษณะนี้ เงื่อนไขด้านบน/ด้านล่างจะถือว่าใช้ OR
ของเมตริก
ตัวอย่างเช่น สมมติว่าคุณมี upscaleDelay
60 วินาทีที่มีสองเมตริก M1 และ M2 หาก M1 อยู่เหนือลายน้ำสูงเป็นเวลา 40 วินาที [t0; t40]
และ M2 จะอยู่เหนือลายน้ำสูงเป็นเวลา 30 วินาที โดยซ้อนทับกับ M1 ในช่วง 10 วินาทีสุดท้าย [t30; t60]
ซึ่งจะตรวจสอบเงื่อนไข upscaleDelay
และอนุญาตให้มีเหตุการณ์การขยายขนาดได้
ขณะที่เราดึงค่าของตัววัดภายนอก ขั้นแรกเราจะเปรียบเทียบกับผลรวม highWatermark
+ tolerance
และกับความแตกต่าง ค่า lowWatermark
- tolerance
หากเราอยู่นอกขอบเขต เราจะคำนวณจำนวนแบบจำลองที่แนะนำ จากนั้นเราจะเปรียบเทียบค่านี้กับจำนวนเรพลิกาปัจจุบันเพื่อจำกัดจำนวนเรพลิกาที่แนะนำตาม minReplicas
และ maxReplicas
สุดท้ายนี้ เราจะดูว่าเราได้รับอนุญาตให้ปรับขนาดหรือไม่ โดยพิจารณาจาก downscaleForbiddenWindowSeconds
และ upscaleForbiddenWindowSeconds
เพื่อให้สามารถควบคุมเงื่อนไขที่สามารถปรับขนาดเป้าหมายได้ละเอียดยิ่งขึ้น คุณสามารถใช้คุณสมบัติต่อไปนี้:
minAvailableReplicaPercentage
: ระบุเปอร์เซ็นต์ขั้นต่ำของเรพลิกาที่จำเป็นต้องมีเพื่อให้คอนโทรลเลอร์ปรับขนาดเป้าหมายอัตโนมัติ ตัวอย่างเช่น หากตั้งค่าไว้ที่ 50 และน้อยกว่าครึ่งหนึ่งของพ็อดด้านหลังเป้าหมายอยู่ในสถานะพร้อมใช้งาน ตัวควบคุมจะไม่ปรับขนาดเป้าหมาย
readinessDelaySeconds
: ระบุจำนวนเวลาที่ต้องรันเรพลิกา ก่อนที่จะนำมาพิจารณาในการตัดสินใจปรับขนาด
หากตรงตามเงื่อนไขทั้งหมด คอนโทรลเลอร์จะปรับขนาดออบเจ็กต์เป้าหมายใน scaleTargetRef
เป็นจำนวนเรพลิกาที่แนะนำเฉพาะในกรณีที่ไม่ได้ตั้งค่าแฟล็ก dryRun
เป็น true
มันจะระบุสิ่งนี้โดยการบันทึก:
{ "level" : " info " , "ts" : 1566327479.866722 , "logger" : " wpa_controller " , "msg" : " DryRun mode: scaling change was inhibited currentReplicas:8 desiredReplicas:12 " }
Cluster Agent กำลังเรียกใช้ตัวแจ้งกับทรัพยากร WPA และคล้ายกับ HPA เมื่อสร้าง/อัปเดต/ลบ จะแยกวิเคราะห์ข้อมูลจำเพาะเพื่อสืบค้นตัววัดจาก Datadog
ตัวแทนคลัสเตอร์ไม่เรียกใช้ตัวฟัง WPA ตามค่าเริ่มต้น หากต้องการเปิดใช้งาน WPA ใน Cluster Agent ให้ตั้งค่าตัวแปรสภาพแวดล้อม DD_EXTERNAL_METRICS_PROVIDER_WPA_CONTROLLER=true
และอัปเดต ClusterRole ที่กำหนดให้กับบัญชีบริการ Cluster Agent เพื่อให้สามารถเข้าถึงออบเจ็กต์ WatermarkPodAutoscaler:
[...]
- apiGroups : ["datadoghq.com"]
resources :
- watermarkpodautoscalers
verbs :
- get
- list
- watch
[...]
หมายเหตุ: หากต้องการเปิดใช้งาน WPA ใน Cluster Agent โดยใช้แผนภูมิ datadog helm ให้ตั้งค่า clusterAgent.metricsProvider.wpaController
เป็น true
ClusterRole จะได้รับการอัปเดตโดยอัตโนมัติ
เมื่อคุณใช้การเปลี่ยนแปลงเหล่านั้นและสร้างออบเจ็กต์ WPA แล้ว หากคุณดำเนินการในพ็อด Datadog Cluster Agent และเรียกใช้ agent status
คุณจะสามารถดูรายละเอียดเฉพาะเพิ่มเติมเกี่ยวกับข้อมูลจำเพาะของตัวปรับขนาดอัตโนมัติที่ถูกแยกวิเคราะห์ (ไม่ว่าจะเป็นแนวนอนหรือ ตัวปรับขนาดอัตโนมัติของพ็อดลายน้ำ)
* watermark pod autoscaler: default/example2-watermarkpodautoscaler
- name : example2-watermarkpodautoscaler
- namespace : default
- type : watermark
- uid : ff09b7d8-d99b-11e9-a8c1-42010a8001c4
Metric name : sinus
Labels :
- foo : bar
Value : 75.1297378540039
Timestamp : 15688259400
Valid : true
* horizontal pod autoscaler: default/nginxext
- name : nginxext
- namespace : default
- type : horizontal
- uid : 61ef3f6e-af32-11e9-a8c1-42010a8001c4
Metric name : docker.mem.rss
Labels :
- cluster-location : us-central1-a
- cluster-name : charly
Value : 263888700952
Timestamp : 15688259400
Valid : true
นอกเหนือจากตัวชี้วัดที่กล่าวถึงข้างต้น บันทึกเหล่านี้คือบันทึกที่จะช่วยให้คุณเข้าใจการทำงานที่เหมาะสมของ WPA ได้ดียิ่งขึ้น
ทุก ๆ 15 วินาที เราจะดึงข้อมูลตัววัดที่แสดงอยู่ในส่วนตัว metrics
ของข้อมูลจำเพาะจาก Datadog
{ "level" : " info " , "ts" : 1668484420515.7678 , "logger" : " controllers.WatermarkPodAutoscaler " , "msg" : " Metrics from the External Metrics Provider " , "watermarkpodautoscaler" : " datadog/example-watermarkpodautoscaler " , "wpa_name" : " example-watermarkpodautoscaler " , "wpa_namespace" : " datadog " , "metrics" :[ 33959 ]}
{ "level" : " info " , "ts" : 1668484420515.8203 , "logger" : " controllers.WatermarkPodAutoscaler " , "msg" : " Value is below lowMark " , "watermarkpodautoscaler" : " datadog/example-watermarkpodautoscaler " , "wpa_name" : " example-watermarkpodautoscaler " , "wpa_namespace" : " datadog " , "usage" : " 33959m " , "replicaCount" : 7 , "currentReadyReplicas" : 8 , "tolerance (%)" : 1 , "adjustedLM" : 34650 , "adjustedUsage" : 33959 }
{ "level" : " info " , "ts" : 1668484420515.8906 , "logger" : " controllers.WatermarkPodAutoscaler " , "msg" : " Proposing replicas " , "watermarkpodautoscaler" : " datadog/example-watermarkpodautoscaler " , "wpa_name" : " example-watermarkpodautoscaler " , "wpa_namespace" : " datadog " , "proposedReplicas" : 7 , "metricName" : " datadogmetric@datadog:example-watermarkpodautoscaler-utilization-metric{map[kube_container_name:my-container service:my-target]} " , "reference" : " Deployment/datadog/example-watermarkpodautoscaler " , "metric timestamp" : " Tue, 15 Nov 2022 03:53:20 UTC " }
{ "level" : " info " , "ts" : 1668484420515.9324 , "logger" : " controllers.WatermarkPodAutoscaler " , "msg" : " Normalized Desired replicas " , "watermarkpodautoscaler" : " datadog/example-watermarkpodautoscaler " , "wpa_name" : " example-watermarkpodautoscaler " , "wpa_namespace" : " datadog " , "desiredReplicas" : 7 }
{ "level" : " info " , "ts" : 1668484420515.946 , "logger" : " controllers.WatermarkPodAutoscaler " , "msg" : " Cooldown status " , "watermarkpodautoscaler" : " datadog/example-watermarkpodautoscaler " , "wpa_name" : " example-watermarkpodautoscaler " , "wpa_namespace" : " datadog " , "backoffUp" : false , "backoffDown" : false , "desiredReplicas" : 7 , "currentReplicas" : 8 }
{ "level" : " info " , "ts" : 1668484420515.9563 , "logger" : " controllers.WatermarkPodAutoscaler " , "msg" : " Will not scale: value has not been out of bounds for long enough " , "watermarkpodautoscaler" : " datadog/example-watermarkpodautoscaler " , "wpa_name" : " example-watermarkpodautoscaler " , "wpa_namespace" : " datadog " , "time_left" : 2335 }
ในที่นี้ จำนวนเรพลิกาปัจจุบันที่เห็นในการปรับใช้เป้าหมายคือหก จากนั้นเราจะเห็นค่าดิบที่ดึงมาจากผู้ให้บริการเมตริกภายนอก และเปรียบเทียบกับลายน้ำสูงและต่ำ จากผลลัพธ์ของการเปรียบเทียบนี้ เราจะพิมพ์แบบจำลองตามจำนวนที่แนะนำ ในกรณีนี้คือห้าวัน
หากคุณต้องการสอบถามผู้ให้บริการเมตริกภายนอกโดยตรง คุณสามารถใช้คำสั่งต่อไปนี้:
kubectl get --raw " /apis/external.metrics.k8s.io/v1beta1/namespaces// | jq ."
คุณสามารถเลือกเพิ่มตัวเลือกป้ายกำกับได้ด้วยการเพิ่ม ?labelSelector=key%3Dvalue
หากเราต้องการดึงข้อมูลตัวชี้วัดของเราในกรณีนี้ เราสามารถใช้:
kubectl get --raw " /apis/external.metrics.k8s.io/v1beta1/namespaces// | jq .?labelSelector=key%3Dvalue%2Cotherkey%3Dothervalue%2Cshort_image%3Dimage "
หากคุณเห็นบันทึกเช่น:
{ "level" : " info " , "ts" : 1566397216.8918724 , "logger" : " wpa_controller " , "msg" : " failed to compute desired number of replicas based on listed metrics for Deployment/datadog/propjoe-green: failed to get external metric dd.propjoe.request_duration.max: unable to get external metric datadog/propjoe-green/&LabelSelector{MatchLabels:map[string]string{fooa: bar,},MatchExpressions:[],}: no metrics returned from external metrics API " }
จากนั้นคุณสามารถตรวจสอบได้ว่าตัววัดนี้ไม่พร้อมใช้งานจากผู้ให้บริการตัววัดภายนอก อาจเป็นเพราะการพิมพ์ผิดในป้ายกำกับ หรือไม่สามารถดึงข้อมูลเมตริกจาก Datadog ได้ (ซึ่งอาจเกิดจากปัจจัยต่างๆ เช่น เบาบางเกินไป, API ล่ม, อัตราการเข้าถึงขีดจำกัด ฯลฯ) คุณสามารถดูบันทึกของผู้ให้บริการเมตริกภายนอกเพื่อตรวจสอบเพิ่มเติมได้
จากนั้นเราจะตรวจสอบการกำหนดความเร็วสูงสุดของสเกลและหน้าต่างคูลดาวน์ ในกรณีของการกำหนดขนาดสูงสุด คุณจะเห็นสิ่งที่ต้องการ:
{ "level" : " info " , "ts" : 1566327268.8839815 , "logger" : " wpa_controller " , "msg" : " Upscaling rate higher than limit of 50.0% up to 9 replicas. Capping the maximum upscale to 9 replicas " }
{ "level" : " info " , "ts" : 1566327268.884001 , "logger" : " wpa_controller " , "msg" : " Returning 9 replicas, condition: ScaleUpLimit reason the desired replica count is increasing faster than the maximum scale rate " }
{ "level" : " info " , "ts" : 1566327479.8845513 , "logger" : " wpa_controller " , "msg" : " -> after normalization: 9 " }
จากนั้นเราจะพิจารณาระยะเวลาคูลดาวน์ คุณจะมีบันทึกที่ระบุว่าเหตุการณ์การปรับขนาดครั้งล่าสุดเกิดขึ้นเมื่อใด รวมถึงเวลาที่กิจกรรมการปรับขนาดและการลดขนาดครั้งต่อไปจะถูกห้าม จนกว่า:
{ "level" : " info " , "ts" : 1566327479.8845847 , "logger" : " wpa_controller " , "msg" : " Too early to downscale. Last scale was at 2019-08-20 18:57:44 +0000 UTC, next downscale will be at 2019-08-20 18:58:44 +0000 UTC, last metrics timestamp: 2019-08-20 18:57:59 +0000 UTC " }
{ "level" : " info " , "ts" : 1566327479.8846018 , "logger" : " wpa_controller " , "msg" : " Too early to upscale. Last scale was at 2019-08-20 18:57:44 +0000 UTC, next upscale will be at 2019-08-20 18:58:14 +0000 UTC, last metrics timestamp: 2019-08-20 18:57:59 +0000 UTC " }
{ "level" : " info " , "ts" : 1566327479.884608 , "logger" : " wpa_controller " , "msg" : " backoffUp: true, backoffDown: true, desiredReplicas 5, currentReplicas: 6 " }
สุดท้ายนี้ เราได้รับการยืนยันว่าการปรับใช้ได้รับการปรับขนาดอัตโนมัติอย่างถูกต้อง:
{ "level" : " info " , "ts" : 1566327253.7887673 , "logger" : " wpa_controller " , "msg" : " Successful rescale of watermarkpodautoscaler, old size: 8, new size: 9, reason: cutom_metric.max{map[kubernetes_cluster:my-cluster service:my-service short_image:my-image]} above target " }
wpa.datadoghq.com/logs-attributes
เพื่อเพิ่มค่าคีย์พิเศษในบันทึกที่เกี่ยวข้องกับออบเจ็กต์ WPA ที่ซ่อนอยู่ ตัวอย่าง: apiVersion: datadoghq.com/v1alpha1
kind: WatermarkPodAutoscaler
metadata:
annotations:
wpa.datadoghq.com/logs-attributes: '{"mywpa": "isgreat"}'
name: watermarkpodautoscaler-sinus
namespace: default
[...]
จะให้ผลผลิต:
{"level":"info","ts":1643642642091.062,"logger":"controllers.WatermarkPodAutoscaler","msg":"getReadyPodsCount","watermarkpodautoscaler":"default/watermarkpodautoscaler-sinus","mywpa":"isgreat","full podList length":2,"toleratedAsReadyPodCount":2,"incorrectly targeted pods":0}
จะเกิดอะไรขึ้นถ้าฉันปรับขนาดการปรับใช้ด้วยตนเอง
ในการกระทบยอดลูปครั้งถัดไป จะมีการพิจารณาจำนวนเรพลิกาใหม่เพื่อคำนวณจำนวนเรพลิกาที่ต้องการ คุณอาจเห็นบันทึกแจ้งว่ามีบุคคลอื่นแก้ไขทรัพยากร อย่างไรก็ตาม หากจำนวนเรพลิกาที่กำหนดค่าอยู่นอกขอบเขต ตัวควบคุมจะปรับขนาดกลับเป็นจำนวนเรพลิกาภายในช่วงที่ยอมรับได้
จะปิดการใช้งาน WPA ชั่วคราวเพื่อเพิ่ม/ลดขนาดการปรับใช้ด้วยตนเองได้อย่างไร
วิธีที่แนะนำคือตั้งค่า WPA ในโหมดทดลองรัน จากนั้นปรับขนาดตามจำนวนแบบจำลองที่ต้องการ คุณสามารถตั้งค่า WPA เป็นแบบแห้งได้โดยใช้คำสั่งแพตช์นี้:
kubectl patch wpa --type='json' -p='[{"op": "replace", "path": "/spec/dryRun", "value":true}]'
อย่าลืมตั้งค่าโหมดดรายรันกลับเป็น false
เมื่อการแทนที่ชั่วคราวของคุณสิ้นสุดลง เพื่อให้ WPA กลับมาทำงานอีกครั้ง
รอยเท้าของคอนโทรลเลอร์คืออะไร?
จากการทดสอบของเรา มันเป็นปัจจัยหนึ่งของจำนวนการใช้งานในคลัสเตอร์
คอนโทรลเลอร์ไร้สัญชาติหรือไม่?
ใช่.
WPA รองรับหลายตัวชี้วัดหรือไม่
ใช่ WPA สามารถปรับขนาดได้หลายตัววัดและทำงานคล้ายกับ HPA WPA จะประเมินแต่ละตัววัดแยกกัน และเสนอจำนวนแบบจำลองที่เกี่ยวข้องกับตัววัดที่ต้องการจำนวนมากที่สุด ตัวอย่างเช่น หาก WPA ประเมินหน่วยเมตริก 1, เมตริก 2, เมตริก 3 และสำหรับแต่ละข้อเสนอ จะคำนวณข้อเสนอจำลอง 10, 20, 30 รายการตามลำดับ ข้อเสนอสุดท้ายคือ 30
เนื่องจากเราดูคำจำกัดความ WPA ทั้งหมดแบบคลัสเตอร์ เราจึงใช้คลัสเตอร์บทบาท
ตัวเลือกที่มีประโยชน์คือการแอบอ้างเป็นผู้ใช้เพื่อตรวจสอบสิทธิ์ ตัวอย่างเช่น เพื่อตรวจสอบว่าคุณมีสิทธิ์ได้รับการปรับใช้เป็นบัญชีบริการของตัวควบคุม WPA:
kubectl get deploy < your_deploy > --as system:serviceaccount:datadog:watermarkpodautoscaler -n < your_ns >
หรือสอบถามผู้ให้บริการเมตริกภายนอก:
kubectl get --raw " /apis/external.metrics.k8s.io/v1beta1/namespaces//metric --as system:serviceaccount::watermarkpodautoscaler
ความต้องการ:
หลังจากโคลนพื้นที่เก็บข้อมูล https://github.com/DataDog/watermarkpodautoscaler
แล้ว ให้ตั้งค่าตัวแปรสภาพแวดล้อมบางอย่าง:
export GO111MODULE=on
unset GOPATH
export PATH= $PATH : $( pwd ) /bin
จากนั้น เมื่อต้องการติดตั้งการพึ่งพาเครื่องมือบางอย่าง ให้รัน make install-tools
make install-tools
: ติดตั้งเครื่องมือเพื่อใช้ Operator SDKmake build
: สร้างคอนโทรลเลอร์ในเครื่องmake generate
: เรียกใช้ตัวสร้าง SDK ของโอเปอเรเตอร์หลายตัว ซึ่งสร้างโค้ดสำหรับคอนโทรลเลอร์และการลงทะเบียนของผู้แจ้งmake test
: รันการทดสอบหน่วยmake validate
: เรียกใช้ Golang linters ทั่วไป ( golangci-lint
)make e2e
: รันการทดสอบแบบ end-to-end บนคลัสเตอร์ Kubernetes ที่กำหนดค่าปัจจุบันmake container
: สร้างอิมเมจ Docker ของคอนโทรลเลอร์โดยใช้โอเปอเรเตอร์ SDKmake container-ci
: สร้างอิมเมจ Docker ของคอนโทรลเลอร์ด้วย Dockerfile แบบหลายขั้นตอนเอกสารขั้นตอนการเผยแพร่มีอยู่ที่นี่
คุณสมบัติบางอย่างได้รับแรงบันดาลใจจาก HPA หรือ CHPA ที่กำหนดค่าได้ โครงสร้างโค้ดส่วนใหญ่ยังใช้สำหรับ Watermark Pod Autoscaler แม้ว่าการบรรจุภัณฑ์โดยรวมของ CRD จะทำโดยใช้ SDK ตัวดำเนินการก็ตาม