إخلاء المسؤولية : هذا المشروع في مرحلة تجريبية - قد تتغير واجهة برمجة التطبيقات.
وحدة التحكم Watermark Pod Autoscaler (WPA) هي وحدة تحكم مخصصة تعمل على توسيع Horizontal Pod Autoscaler (HPA).
وحدة التحكم Watermark Pod Autoscaler هي وحدة تحكم بديلة لوحدة التحكم Horizontal Pod Autoscaler.
إذا كنت تريد توسيع نطاق بعض تطبيقاتك تلقائيًا، ولكن:
على سبيل المثال
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 الخاصة بك:
قم بتنزيل الملف المضغوط لمشروع Watermark Pod Autoscaler. يمكن العثور على كود المصدر في DataDog/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 حدث الإنشاء/التحديث/الحذف. يقوم بتوزيع مواصفات 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
لتمثيل القيمة التي تريد استخدامها بسهولة.
يمكننا استخدام المقياس المائي watermarkpodautoscaler.wpa_controller_restricted_scaling{reason:within_bounds}
للتحقق من أنه مقيد بالفعل. ملاحظة : تم ضرب المقياس بـ 1000 لتوضيح أنه خلال هذا الوقت، لم يكن من الممكن تشغيل أي حدث قياس بواسطة وحدة التحكم.
تتعلق المجموعة الثانية من خيارات التكوين بسرعة التوسع في عملية النشر الخاصة بك، والتي يتم التحكم فيها بواسطة 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
ForbiddenWindowSeconds والمستوى 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 " }
يقوم وكيل المجموعة بتشغيل مخبر مقابل موارد WPA، وكما هو الحال مع HPA، عند الإنشاء/التحديث/الحذف سوف يقوم بتحليل المواصفات للاستعلام عن المقياس من Datadog.
لا يقوم "عامل الكتلة" بتشغيل وحدة إصغاء WPA بشكل افتراضي. لتمكين WPA في وكيل المجموعة، قم بتعيين متغير البيئة DD_EXTERNAL_METRICS_PROVIDER_WPA_CONTROLLER=true
وقم بتحديث ClusterRole المعين لحساب خدمة Cluster Agent للوصول إلى كائنات WatermarkPodAutoscaler:
[...]
- apiGroups : ["datadoghq.com"]
resources :
- watermarkpodautoscalers
verbs :
- get
- list
- watch
[...]
ملاحظة: لتمكين WPA في وكيل المجموعة باستخدام مخطط رأس datadog، قم بتعيين 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 (والذي قد يرجع إلى عوامل مختلفة: متناثر جدًا، أو تعطل واجهة برمجة التطبيقات، أو الوصول إلى الحد الأقصى للمعدل، وما إلى ذلك). يمكنك الاطلاع على سجلات موفر المقاييس الخارجية لمزيد من التحقيق.
نقوم بعد ذلك بالتحقق من تحديد سقف لسرعة القياس ونوافذ التهدئة. في حالة وضع حد أقصى للقياس، سترى شيئًا مثل:
{ "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، وmetric2، وmetric3، واحتسب لكل منها 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
: قم بتثبيت الأدوات لاستخدام مشغل SDK.make build
: قم ببناء وحدة التحكم محليًا.make generate
: قم بتشغيل مولد SDK متعدد المشغلين، والذي يقوم بإنشاء رمز لوحدة التحكم وتسجيل المخبر.make test
: تشغيل اختبارات الوحدة.make validate
: قم بتشغيل نسالات Golang الشائعة ( golangci-lint
).make e2e
: إجراء اختبارات شاملة على مجموعة Kubernetes التي تم تكوينها حاليًا.make container
: أنشئ صورة Docker لوحدة التحكم باستخدام مشغل SDK.make container-ci
: أنشئ صورة Docker لوحدة التحكم باستخدام ملف Dockerfile متعدد المراحل.وثائق عملية الإصدار متاحة هنا.
بعض الميزات مستوحاة من HPA أو CHPA القابل للتكوين. تم أيضًا استخدام معظم بنية التعليمات البرمجية لـ Watermark Pod Autoscaler، على الرغم من أن التعبئة الشاملة لـ CRD تم إجراؤها باستخدام مشغل SDK.