ملاحظة : (14 أكتوبر 2021) أصدر Linode الآن Kubernetes Autoscaler لجميع LKEs. في حين لا يزال لدى Autoscaler هذا بعض الاستخدام (خاصةً إذا كنت ترغب في الحصول على Autoscale بقوة ومسبق) ، فلن يتم الحفاظ عليه بنشاط.
===
هذه أداة تلقائية بسيطة لتوسيع نطاق linodes أفقيا في مجموعة الكتلة LKE بناءً على استخدام الذاكرة أو استخدام وحدة المعالجة المركزية. هذا يعني بشكل فعال أنه يمكنك استخدام kubernetes 'Pod Finding Autoscaling لتوسيع نطاق القرون الخاصة بك وهذه الأداة لزيادة Linodes الخاصة بك - حتى تتمكن من إعداد هذا الأمر والسماح للمجموعة بأعلى أو لأسفل حسب الحاجة.
كل مثيل من هذه الأداة المساعدة سوف يعتمد على الذاكرة أو وحدة المعالجة المركزية. لاستخدام كليهما ، يمكنك نشر حالتين من هذه الأداة (عادة ما تكون 1 كافية).
يتم التقيد بالكامل (ولكن مكتوب في PHP) ولديه بصمة مورد منخفضة ، بحيث يمكنك نشرها محليًا أو على المجموعة نفسها.
يتم نشر صورة هذه الأداة المساعدة @ Docker Hub باسم Meezaan/Linode-K8S-Autoscaler (https://hub.docker.com/r/meezaan/linode-k8s-autoscaler).
أحدث علامة تحتوي دائمًا على أحدث الكود. أيضًا ، ترتبط علامات Docker Hub بالعلامات في مستودع GIT هذا كإصدارات.
تأخذ حاوية Docker جميع تكوينها عبر متغيرات البيئة. إليك قائمة بما يفعله كل واحد:
| اسم متغير البيئة | وصف |
|---|---|
| linode_personal_access_token | رمز الوصول الشخصي الخاص بك مع نطاق LKE |
| linode_lke_cluster_id | معرف مجموعة LKE إلى AutoScale |
| linode_lke_cluster_pool_id | معرف تجمع العقدة داخل مجموعة LKE إلى AutoScale |
| linode_lke_cluster_pool_minimum_nodes | الحد الأدنى العقد للحفاظ على الكتلة. لن يتم تقليص المجموعة أسفل هذا. |
| autoscale_trigger | "وحدة المعالجة المركزية" أو "الذاكرة". الإعدادات الافتراضية إلى Memmory. |
| autoscale_trigger_type | "مطلوب" أو "مستعمل". الإعدادات الافتراضية المطلوبة. هذا يطلب من Autoscaler استخدام إما الذاكرة المطلوبة أو المستخدمة حاليًا أو وحدة المعالجة المركزية لتوسيع نطاق أو لأسفل إذا انتهك العتبة. |
| autoscale_up_percentage | في أي نسبة من "وحدة المعالجة المركزية" أو "الذاكرة" لتوسيع نطاق تجمع العقدة. مثال: 65 |
| autoscale_down_percentage | في أي نسبة من "وحدة المعالجة المركزية" أو "الذاكرة" لتوسيع نطاق تجمع العقدة. مثال: 40 |
| autoscale_resource_request_up_percentage | في أي نسبة من "وحدة المعالجة المركزية" أو "ذاكرة" المطلوبة / المتاحة لتوسيع نطاق المجموعة. الافتراضي: 80 |
| autoscale_resource_request_down_percentage | في أي نسبة من "وحدة المعالجة المركزية" أو "ذاكرة" المطلوبة / المتاحة لتوسيع نطاق الكتلة. الافتراضي: 70 |
| autoscale_query_interval | كم ثانية للانتظار قبل كل مكالمة إلى API Kubernetes للتحقق من وحدة المعالجة المركزية واستخدام الذاكرة. مثال: 10 |
| autoscale_threshold_count | بعد عدد المباريات المتتالية لـ AutoScale_UP_Percentage أو AutoScale_Down_Percentage لتوسيع نطاق المجموعة لأعلى أو لأسفل. |
| autoscale_number_of_nodes | كم عدد العقد التي يجب إضافتها في وقت واحد عند تحجيم المجموعة. مثال: 1 أو 2 أو 3 أو N |
| autoscale_wait_time_after_scaling | كم ثوانٍ للانتظار بعد التوسع أو لأسفل لبدء التحقق من وحدة المعالجة المركزية والذاكرة. يجب تعيين هذا لإعطاء الكتلة وقتًا كافيًا لضبط نفسها مع العدد المحدث من العقد. مثال: 150 |
لفهم ما سبق على افتراض أننا وضعنا القيم التالية.
مع هذا الإعداد ، ستقوم الأداة المساعدة Autoscaler بالاستعلام عن API Kuberenetes كل 10 ثوانٍ. إذا كان مع 3 مكالمات متتالية إلى واجهة برمجة التطبيقات (المعنى بشكل فعال أكثر من 30 ثانية) ، تتجاوز الذاكرة المطلوبة 80 ٪ من إجمالي الذاكرة المتاحة على الكتلة ، وسيتم إضافة عقدين آخرين إلى تجمع العقدة المحدد. ستنتظر الأداة 180 ثانية ثم تبدأ في الاستعلام عن واجهة برمجة التطبيقات كل 10 ثوانٍ مرة أخرى.
إذا كان مع 3 مكالمات متتالية إلى واجهة برمجة التطبيقات (المعنى بشكل فعال أكثر من 30 ثانية) ، فإن الذاكرة المطلوبة أقل من 70 ٪ من إجمالي الذاكرة المتوفرة على المجموعة ، ستتم إزالة عقدة واحدة ( تتم إزالة العقد دائمًا واحدة تلو الأخرى للتأكد من عدم نفاد السعة المفاجئة ) من مجموعة العقدة المحددة. ستنتظر الأداة 180 ثانية ثم تبدأ في الاستعلام عن واجهة برمجة التطبيقات كل 10 ثوانٍ مرة أخرى.
نفس المثال ، مع نوع الزناد مختلف.
مع هذا الإعداد ، ستقوم الأداة المساعدة Autoscaler بالاستعلام عن API Kuberenetes كل 10 ثوانٍ. إذا كان مع 3 مكالمات متتالية إلى واجهة برمجة التطبيقات (المعنى بشكل فعال أكثر من 30 ثانية) ، فإن استخدام الذاكرة أعلى من 65 ٪ من إجمالي الذاكرة المتوفرة على المجموعة ، سيتم إضافة عقد إضافيين إلى تجمع العقدة المحدد. ستنتظر الأداة 180 ثانية ثم تبدأ في الاستعلام عن واجهة برمجة التطبيقات كل 10 ثوانٍ مرة أخرى.
إذا كان مع 3 مكالمات متتالية إلى واجهة برمجة التطبيقات (المعنى بشكل فعال أكثر من 30 ثانية) ، فإن استخدام الذاكرة أقل من 30 ٪ من إجمالي الذاكرة المتوفرة على الكتلة ، ستتم إزالة عقدة واحدة ( تتم إزالة العقد دائمًا واحدة تلو الأخرى للتأكد من عدم نفاد السعة بشكل مفاجئ ) من مجموعة العقدة المحددة. ستنتظر الأداة 180 ثانية ثم تبدأ في الاستعلام عن واجهة برمجة التطبيقات كل 10 ثوانٍ مرة أخرى.
ستحتاج إلى تكوين صورة Docker مع متغيرات ENV وتكوين KUBECTL.
لتشغيل محليا:
docker run -v ~/.kube/config:/root/.kube/config
-e LINODE_PERSONAL_ACCCESS_TOKEN='xxxx'
-e LINODE_LKE_CLUSTER_ID='xxxx'
-e LINODE_LKE_CLUSTER_POOL_ID='xxxx'
-e LINODE_LKE_CLUSTER_POOL_MINIMUM_NODES='3'
-e AUTOSCALE_TRIGGER='cpu'
-e AUTOSCALE_UP_PERCENTAGE='60'
-e AUTOSCALE_DOWN_PERCENTAGE='30'
-e AUTOSCALE_RESOURCE_REQUEST_UP_PERCENTAGE='70'
-e AUTOSCALE_RESOURCE_REQUEST_DOWN_PERCENTAGE='70'
-e AUTOSCALE_QUERY_INTERVAL='10'
-e AUTOSCALE_THRESHOLD_COUNT='3'
-e AUTOSCALE_NUMBER_OF_NODES='1'
-e AUTOSCALE_WAIT_TIME_AFTER_SCALING='180' meezaan/linode-k8s-autoscaler
بالنسبة للإنتاج ، يمكنك إنشاء صورة Docker خاصة ودفع ملف تكوين KUBECTL مع بيانات اعتماد حساب الخدمة في الصورة. لذلك ، قد يبدو Dockerfile الخاص بك شيئًا مثل:
FROM meezaan/linode-k8s-autoscaler
COPY configfile /root/.kube/config
بمجرد قيامك ببناء الصورة (ودعنا نفترض أنها تسمى yourspace/k8s-atoscaler: الأحدث) ، يمكنك نشرها مع البيان التالي:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-autoscaler
namespace: name-of-namespace ####### Change this to the actual namespace
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: k8s-autoscale
template:
metadata:
labels:
app: k8s-autoscale
spec:
imagePullSecrets:
- name: regcred ####### Docker registry credentials secret
containers:
- name: k8s-autoscale
image: yourspace/k8s-autoscaler:latest ####### CHANGE THIS TO YOUR ACTUAL DOCKER IMAGE
env:
- name: LINODE_PERSONAL_ACCCESS_TOKEN
valueFrom:
secretKeyRef:
name: linode-personal-access-token-k8s-autoscaler ####### LINODE PERSONAL ACCESS TOKEN SECRET
key: token
- name: LINODE_LKE_CLUSTER_ID
value: ""
- name: LINODE_LKE_CLUSTER_POOL_ID
value: ""
- name: AUTOSCALE_TRIGGER
value: "memory"
- name: AUTOSCALE_UP_PERCENTAGE
value: "60"
- name: AUTOSCALE_DOWN_PERCENTAGE
value: "30"
- name: AUTOSCALE_QUERY_INTERVAL
value: "30"
- name: AUTOSCALE_THRESHOLD_COUNT
value: "3"
- name: AUTOSCALE_NUMBER_OF_NODES
value: "1"
- name: AUTOSCALE_WAIT_TIME_AFTER_SCALING
value: "150"
resources:
requests:
memory: 32Mi
limits:
memory: 32Mi
يستخدم البيان أعلاه سرًا لرمز الوصول الشخصي للوصول الشخصي Linode الخاص بك و Docker.
ستحتاج إلى إنشاء هذه.
يستغرق POD أعلاه 0.01 وحدة المعالجة المركزية و 15 ميجابايت من الذاكرة لتشغيل. قد تزداد الذاكرة بناءً على حجم استجابة API ، ولكنها تُرجع JSON ، لذلك حتى لو كان لديك أكثر من 100 خادم في المجموعة الخاصة بك ، فأنت لا تزال تبحث فقط عن 30 ميجابايت أو نحو ذلك.
هذه الأداة لا تنتمي إلى linode.