หมายเหตุ : (14 ตุลาคม 2021) Linode ได้เปิดตัว Kubernetes Autoscaler ไปยัง LKEs ทั้งหมดแล้ว ในขณะที่เครื่องอัตโนมัตินี้ยังคงมีการใช้งานอยู่บ้าง (โดยเฉพาะอย่างยิ่งถ้าคุณต้องการที่จะปรับสภาพอัตโนมัติอย่างจริงจังและล่วงหน้า) มันจะไม่ได้รับการดูแลอย่างแข็งขันอีกต่อไป
-
นี่คือยูทิลิตี้การปรับสภาพแบบง่าย ๆ สำหรับการปรับขนาด linodes ในแนวนอนในพูลคลัสเตอร์ LKE โดยใช้หน่วยความจำหรือการใช้งาน CPU นี่หมายความว่าคุณสามารถใช้พ็อดพ็อดในแนวนอนของ Kubernetes เพื่อขยายพ็อดของคุณและยูทิลิตี้นี้เพื่อเพิ่มขนาด linodes ของคุณ - เพื่อให้คุณสามารถตั้งค่านี้และปล่อยให้คลัสเตอร์ของคุณเพิ่มขึ้นหรือลงตามต้องการ
แต่ละอินสแตนซ์ของยูทิลิตี้นี้จะอัตโนมัติตามหน่วยความจำหรือ CPU ในการใช้ทั้งสองอย่างคุณสามารถปรับใช้ 2 อินสแตนซ์ของยูทิลิตี้นี้ (โดยปกติ 1 ก็เพียงพอแล้ว)
มันเป็น Dockerised เต็มรูปแบบ (แต่เขียนด้วย PHP) และมีพื้นที่ทรัพยากรต่ำดังนั้นคุณสามารถปรับใช้ในพื้นที่หรือบนคลัสเตอร์เอง
ภาพสำหรับยูทิลิตี้นี้เผยแพร่ @ Docker Hub เป็น meezaan/linode-k8s-autoscaler (https://hub.docker.com/r/meezaan/linode-k8s-autoscaler)
แท็กล่าสุดมีรหัสล่าสุดเสมอ นอกจากนี้แท็กฮับ Docker ยังเชื่อมโยงกับแท็กในพื้นที่เก็บข้อมูล Git นี้เป็นรุ่น
คอนเทนเนอร์ Docker ใช้การกำหนดค่าทั้งหมดผ่านตัวแปรสภาพแวดล้อม นี่คือรายการของสิ่งที่แต่ละคนทำ:
| ชื่อตัวแปรสภาพแวดล้อม | คำอธิบาย |
|---|---|
| linode_personal_access_token | โทเค็นการเข้าถึงส่วนบุคคลของคุณพร้อมขอบเขต LKE |
| linode_lke_cluster_id | ID ของคลัสเตอร์ LKE ไปยัง Autoscale |
| linode_lke_cluster_pool_id | รหัสพูลโหนดภายในคลัสเตอร์ LKE ไปยังอัตโนมัติ |
| linode_lke_cluster_pool_minimum_nodes | โหนดขั้นต่ำที่จะเก็บไว้ในคลัสเตอร์ คลัสเตอร์จะไม่ถูกปรับขนาดลงด้านล่างนี้ |
| autoscale_trigger | 'CPU' หรือ 'หน่วยความจำ' ค่าเริ่มต้นเป็น memmory |
| autoscale_trigger_type | 'ร้องขอ' หรือ 'ใช้' ค่าเริ่มต้นที่จะร้องขอ สิ่งนี้จะบอกให้ผู้ใช้เครื่องอัตโนมัติใช้หน่วยความจำ ที่ร้องขอ หรือหน่วยความจำ ที่ใช้ในปัจจุบัน หรือ CPU เพื่อขยายหรือลงหากมันละเมิด threshhold |
| autoscale_up_percentage | เปอร์เซ็นต์ของ 'CPU' หรือ 'หน่วยความจำ' เพื่อขยายพูลโหนด ตัวอย่าง: 65 |
| autoscale_down_percentage | เปอร์เซ็นต์ของ 'CPU' หรือ 'หน่วยความจำ' เพื่อลดระดับพูลโหนด ตัวอย่าง: 40 |
| autoscale_resource_request_up_percentage | เปอร์เซ็นต์ของ 'CPU' หรือ 'หน่วยความจำ' ของที่ร้องขอ / พร้อมใช้งานเพื่อขยายคลัสเตอร์ ค่าเริ่มต้น: 80 |
| autoscale_resource_request_down_percentage | เปอร์เซ็นต์ของ 'CPU' หรือ 'หน่วยความจำ' ของที่ร้องขอ / พร้อมใช้งานเพื่อลดขนาดคลัสเตอร์ ค่าเริ่มต้น: 70 |
| autoscale_query_interval | ต้องรอกี่วินาทีก่อนการโทรแต่ละครั้งไปยัง Kubernetes API เพื่อตรวจสอบ CPU และการใช้หน่วยความจำ ตัวอย่าง: 10 |
| autoscale_threshold_count | หลังจากการจับคู่ติดต่อกันของ autoscale_up_percentage หรือ autoscale_down_percentage จำนวนเท่าใดเพื่อปรับขนาดคลัสเตอร์ขึ้นหรือลง |
| autoscale_number_of_nodes | มีกี่โหนดที่จะเพิ่มในครั้งเดียวเมื่อปรับสเกลคลัสเตอร์ ตัวอย่าง: 1 หรือ 2 หรือ 3 หรือ N |
| autoscale_wait_time_after_scaling | ต้องรอกี่วินาทีหลังจากปรับขนาดขึ้นหรือลงเพื่อเริ่มตรวจสอบ CPU และหน่วยความจำ สิ่งนี้ควรตั้งค่าเพื่อให้คลัสเตอร์มีเวลาพอที่จะปรับตัวเองด้วยจำนวนโหนดที่อัปเดต ตัวอย่าง: 150 |
เพื่อทำความเข้าใจเกี่ยวกับข้างต้นโดยสมมติว่าเราได้กำหนดค่าต่อไปนี้
ด้วยการตั้งค่านี้ยูทิลิตี้อัตโนมัติจะสืบค้น Kuberenetes API ทุก ๆ 10 วินาที หากมีการโทรติดต่อกัน 3 ครั้งไปยัง API (มีความหมายอย่างมีประสิทธิภาพมากกว่า 30 วินาที) หน่วยความจำที่ร้องขอเกิน 80% ของหน่วยความจำทั้งหมดที่มีอยู่ในคลัสเตอร์จะมีการเพิ่มอีก 2 โหนดลงในพูลโหนดที่ระบุ ยูทิลิตี้จะรอ 180 วินาทีจากนั้นเริ่มสอบถาม API ทุก ๆ 10 วินาทีอีกครั้ง
หากมีการโทรติดต่อกัน 3 ครั้งไปยัง API (มีความหมายอย่างมีประสิทธิภาพมากกว่า 30 วินาที) หน่วยความจำที่ร้องขอต่ำกว่า 70% ของหน่วยความจำทั้งหมดที่มีอยู่ในคลัสเตอร์ 1 โหนดจะถูกลบออก ( โหนดจะถูกลบออกทีละครั้ง ยูทิลิตี้จะรอ 180 วินาทีจากนั้นเริ่มสอบถาม API ทุก ๆ 10 วินาทีอีกครั้ง
ตัวอย่างเดียวกันกับประเภททริกเกอร์ที่แตกต่างกัน
ด้วยการตั้งค่านี้ยูทิลิตี้อัตโนมัติจะสืบค้น Kuberenetes API ทุก ๆ 10 วินาที หากมีการโทรติดต่อกัน 3 ครั้งไปยัง API (มีความหมายอย่างมีประสิทธิภาพมากกว่า 30 วินาที) การใช้หน่วยความจำจะสูงกว่า 65% ของหน่วยความจำทั้งหมดที่มีอยู่ในคลัสเตอร์จะเพิ่มอีก 2 โหนดลงในพูลโหนดที่ระบุ ยูทิลิตี้จะรอ 180 วินาทีจากนั้นเริ่มสอบถาม API ทุก ๆ 10 วินาทีอีกครั้ง
หากมีการโทรติดต่อกัน 3 ครั้งไปยัง API (มีความหมายอย่างมีประสิทธิภาพมากกว่า 30 วินาที) การใช้หน่วยความจำต่ำกว่า 30% ของหน่วยความจำทั้งหมดที่มีอยู่ในคลัสเตอร์ 1 โหนดจะถูกลบออก ( โหนดจะถูกลบออกทีละครั้งเพื่อให้แน่ใจว่าคุณจะไม่หมดกำลังการผลิตทั้งหมดในทันที ) ยูทิลิตี้จะรอ 180 วินาทีจากนั้นเริ่มสอบถาม API ทุก ๆ 10 วินาทีอีกครั้ง
คุณจะต้องกำหนดค่าอิมเมจ Docker ด้วยตัวแปร Env และ Kubectl Config
เพื่อทำงานในพื้นที่:
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
สำหรับการผลิตคุณสามารถสร้างอิมเมจนักเทียบท่าส่วนตัวและส่งไฟล์กำหนดค่า kubectl พร้อมข้อมูลรับรองของบัญชีบริการลงในภาพ ดังนั้น Dockerfile ของคุณอาจมีลักษณะเช่น:
FROM meezaan/linode-k8s-autoscaler
COPY configfile /root/.kube/config
เมื่อคุณสร้างภาพ (และสมมติว่ามันเรียกว่า YourSpace/K8S-autoscaler: ล่าสุด) คุณสามารถปรับใช้กับรายการต่อไปนี้:
---
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
รายการข้างต้นใช้ความลับสำหรับโทเค็นการเข้าถึงส่วนบุคคลของคุณและข้อมูลการลงทะเบียนรีจิสทรี Docker
คุณจะต้องสร้างสิ่งเหล่านี้
POD ด้านบนใช้เวลา 0.01 CPU และ 15MB ของหน่วยความจำในการรัน หน่วยความจำอาจเพิ่มขึ้นตามขนาดของการตอบสนอง API แต่จะส่งคืน JSON ดังนั้นแม้ว่าคุณจะมีเซิร์ฟเวอร์มากกว่า 100 เซิร์ฟเวอร์ในคลัสเตอร์ของคุณคุณก็ยังดูเพียง 30MB หรือมากกว่านั้น
ยูทิลิตี้นี้ไม่เกี่ยวข้องกับ linode