Kubernetes - Tự động định tỷ lệ
Autoscalinglà một trong những tính năng chính trong Kubernetes cluster. Đây là một tính năng trong đó cụm có khả năng tăng số lượng nút khi nhu cầu đáp ứng dịch vụ tăng lên và giảm số lượng nút khi yêu cầu giảm. Tính năng tự động mở rộng quy mô này hiện được hỗ trợ trong Google Cloud Engine (GCE) và Google Container Engine (GKE) và sẽ sớm bắt đầu với AWS.
Để thiết lập cơ sở hạ tầng có thể mở rộng trong GCE, trước tiên chúng ta cần có một dự án GCE đang hoạt động với các tính năng giám sát đám mây của Google, ghi nhật ký đám mây của Google và trình xếp chồng được bật.
Đầu tiên, chúng tôi sẽ thiết lập cụm với vài nút chạy trong đó. Sau khi hoàn tất, chúng ta cần thiết lập biến môi trường sau.
Biến môi trường
export NUM_NODES = 2
export KUBE_AUTOSCALER_MIN_NODES = 2
export KUBE_AUTOSCALER_MAX_NODES = 5
export KUBE_ENABLE_CLUSTER_AUTOSCALER = true
Sau khi hoàn tất, chúng tôi sẽ bắt đầu cụm bằng cách chạy kube-up.sh. Điều này sẽ tạo một cụm cùng với tính năng bổ sung tự động vô hướng cụm.
./cluster/kube-up.sh
Khi tạo cụm, chúng ta có thể kiểm tra cụm của mình bằng lệnh kubectl sau.
$ kubectl get nodes
NAME STATUS AGE
kubernetes-master Ready,SchedulingDisabled 10m
kubernetes-minion-group-de5q Ready 10m
kubernetes-minion-group-yhdx Ready 8m
Bây giờ, chúng ta có thể triển khai một ứng dụng trên cụm và sau đó kích hoạt tính năng tự động phân loại pod ngang. Điều này có thể được thực hiện bằng cách sử dụng lệnh sau.
$ kubectl autoscale deployment <Application Name> --cpu-percent = 50 --min = 1 --
max = 10
Lệnh trên cho thấy rằng chúng tôi sẽ duy trì ít nhất một và tối đa 10 bản sao của POD khi tải trên ứng dụng tăng lên.
Chúng tôi có thể kiểm tra trạng thái của autoscaler bằng cách chạy $kubclt get hpachỉ huy. Chúng tôi sẽ tăng tải trên các nhóm bằng lệnh sau.
$ kubectl run -i --tty load-generator --image = busybox /bin/sh
$ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done
Chúng tôi có thể kiểm tra hpa bằng cách chạy $ kubectl get hpa chỉ huy.
$ 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
Chúng ta có thể kiểm tra số lượng pod đang chạy bằng lệnh sau.
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
Và cuối cùng, chúng ta có thể nhận được trạng thái nút.
$ 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