Kubernetes - การปรับขนาดอัตโนมัติ
Autoscalingเป็นคุณลักษณะหลักอย่างหนึ่งในคลัสเตอร์ Kubernetes เป็นคุณลักษณะที่คลัสเตอร์สามารถเพิ่มจำนวนโหนดได้เมื่อความต้องการในการตอบสนองบริการเพิ่มขึ้นและลดจำนวนโหนดเมื่อความต้องการลดลง ปัจจุบันคุณลักษณะของการปรับขนาดอัตโนมัตินี้รองรับใน Google Cloud Engine (GCE) และ Google Container Engine (GKE) และจะเริ่มต้นด้วย AWS ในไม่ช้า
ในการตั้งค่าโครงสร้างพื้นฐานที่ปรับขนาดได้ใน GCE ก่อนอื่นเราต้องมีโครงการ GCE ที่ใช้งานอยู่ซึ่งมีคุณลักษณะของการตรวจสอบระบบคลาวด์ของ Google การบันทึกบนคลาวด์ของ Google และการเปิดใช้งาน stackdriver
ขั้นแรกเราจะตั้งค่าคลัสเตอร์โดยมีโหนดไม่กี่โหนดทำงานอยู่ เมื่อเสร็จแล้วเราต้องตั้งค่าตัวแปรสภาพแวดล้อมต่อไปนี้
ตัวแปรสภาพแวดล้อม
export NUM_NODES = 2
export KUBE_AUTOSCALER_MIN_NODES = 2
export KUBE_AUTOSCALER_MAX_NODES = 5
export KUBE_ENABLE_CLUSTER_AUTOSCALER = true
เมื่อเสร็จแล้วเราจะเริ่มคลัสเตอร์โดยการเรียกใช้ kube-up.sh. สิ่งนี้จะสร้างคลัสเตอร์พร้อมกับการเพิ่มสเกลาร์อัตโนมัติของคลัสเตอร์
./cluster/kube-up.sh
ในการสร้างคลัสเตอร์เราสามารถตรวจสอบคลัสเตอร์ของเราโดยใช้คำสั่ง kubectl ต่อไปนี้
$ kubectl get nodes
NAME STATUS AGE
kubernetes-master Ready,SchedulingDisabled 10m
kubernetes-minion-group-de5q Ready 10m
kubernetes-minion-group-yhdx Ready 8m
ตอนนี้เราสามารถปรับใช้แอปพลิเคชันบนคลัสเตอร์จากนั้นเปิดใช้งานตัวปรับขนาดอัตโนมัติแนวนอน ซึ่งสามารถทำได้โดยใช้คำสั่งต่อไปนี้
$ kubectl autoscale deployment <Application Name> --cpu-percent = 50 --min = 1 --
max = 10
คำสั่งดังกล่าวแสดงให้เห็นว่าเราจะคงไว้อย่างน้อยหนึ่งตัวและสูงสุด 10 แบบจำลองของ POD เมื่อโหลดแอปพลิเคชันเพิ่มขึ้น
เราสามารถตรวจสอบสถานะของตัวปรับขนาดอัตโนมัติได้โดยเรียกใช้ไฟล์ $kubclt get hpaคำสั่ง เราจะเพิ่มภาระในพ็อดโดยใช้คำสั่งต่อไปนี้
$ kubectl run -i --tty load-generator --image = busybox /bin/sh
$ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done
เราสามารถตรวจสอบไฟล์ hpa โดยการวิ่ง $ kubectl get hpa คำสั่ง
$ kubectl get hpa
NAME REFERENCE TARGET CURRENT
php-apache Deployment/php-apache/scale 50% 310%
MINPODS MAXPODS AGE
1 20 2m
$ kubectl get deployment php-apache
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
php-apache 7 7 7 3 4m
เราสามารถตรวจสอบจำนวนพ็อดที่ทำงานได้โดยใช้คำสั่งต่อไปนี้
jsz@jsz-desk2:~/k8s-src$ kubectl get pods
php-apache-2046965998-3ewo6 0/1 Pending 0 1m
php-apache-2046965998-8m03k 1/1 Running 0 1m
php-apache-2046965998-ddpgp 1/1 Running 0 5m
php-apache-2046965998-lrik6 1/1 Running 0 1m
php-apache-2046965998-nj465 0/1 Pending 0 1m
php-apache-2046965998-tmwg1 1/1 Running 0 1m
php-apache-2046965998-xkbw1 0/1 Pending 0 1m
และสุดท้ายเราจะได้รับสถานะโหนด
$ kubectl get nodes
NAME STATUS AGE
kubernetes-master Ready,SchedulingDisabled 9m
kubernetes-minion-group-6z5i Ready 43s
kubernetes-minion-group-de5q Ready 9m
kubernetes-minion-group-yhdx Ready 9m