Tự động mở rộng pod(Horizontal Pod Autoscaler)

Như bạn biết thì để auto scale pod hay node,thì thông số CPU và RAM rất là quan trọng nó quyết định là có nên tạo thêm node hay pod hay không, cái tham số RAM, CPU, Network, etc người ta gọi là metric mặc định kubernetes chưa có cài sẵn do đó bạn cần phải cài vào.

Trước tiên bạn cần truy cập https://github.com/kubernetes-incubator/metrics-server/ để cấu hình metric cho kubernetes.

git clone https://github.com/kubernetes-incubator/metrics-server.git
kubectl create -f deploy/1.8+/

Nếu như bạn nào triển khai trên AWS bởi EKS hoặc Google GKE sẽ không bị gặp lỗi Metrics server issue with hostname resolution of kubelet and apiserver unable to communicate with metric-server clusterIP, nhưng nếu bạn dùng kubeadm để cài đặt trên bare metal sẽ gặp lỗi đó, thì chỉ việc thêm:

command:
   - /metrics-server
   - --kubelet-insecure-tls
   - --kubelet-preferred-address-types=InternalIP

vào tập tin metrics-server-deployment.yaml và sau đó deploy lại

kubectl apply -f deploy/1.8+/

Chúng tôi nghĩ tới bước này thì các bạn đã cấu hình song metric cho kube:) Sau khi bạn cấu hình metric cho kube xong, thì bạn tạo một deployment hpa như sau:

kubectl apply -f https://raw.githubusercontent.com/gsviec/kubernetes-training/master/deployments/hpa-example.yaml

Trong demo trên chúng tôi chạy đơn giản là vòng lặp để tăng CPU, với một đoạn script php

<?php
  $x = 0.0001;
  for ($i = 0; $i <= 1000000; $i++) {
	$x += sqrt($x);
	echo "OK!";
  }	
?>

Sau khi bạn deploy xong thì bạn đăng nhập vào trang quản trị kubernetes bạn sẽ thấy kết quả giống như thế này demo auto scale pod

Tạo pod tự động(Horizontal Pod Autoscaler)

Hiện tại pod chúng ta đã chạy, bây giờ chúng ta hãy autoscaler bằng kubectl, trong ví dụ dưới đây chúng tôi muốn khi CPU mà tăng lên 50% của một pod, thì sẽ phải tự tạo thêm 1 pod, và giá trị tăng tối đa của pod là 10.

#kubectl autoscale deployment deployment --cpu-percent=50 --min=1 --max=10
kubectl autoscale deployment hpa-example --cpu-percent=50 --min=1 --max=10

Hãy kiểm tra lại bạn đã tạo auto scale thành công chưa:

$ kubectl get hpa
NAME          REFERENCE                TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-example   Deployment/hpa-example   0%/50%    1         10        1          3h27m
thien at thien in ~

Ok chúng ta cùng kiểm tra xem nó có làm việc không bằng cách cho chạy một vòng lặp bash shell như sau, có 2 cách để chạy bash shell này:

Cách 1: Là bạn truy cập service này bên ngoài kubenertes bằng lệnh sau

$ kubectl get svc  |grep hpa
hpa-example                     NodePort    10.106.66.197    <none>        80:31394/TCP                    3h59m

sau đó bạn gõ lệnh này

while true; do wget -q -O- http://192.168.10.10:31394; done

Cách 2: Là bạn truy cập service này bên trong kuberntes

kubectl run -i --tty load-generator --image=busybox /bin/sh
while true; do wget -q -O- http://hpa-example; done

Với khoảng vài phút thì bạn sẽ thấy kết quả như sau:

$ kubectl get hpa -w
NAME          REFERENCE                TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-example   Deployment/hpa-example   0%/50%    1         10        1          3h30m
hpa-example   Deployment/hpa-example   150%/50%   1     10    1     3h31m
hpa-example   Deployment/hpa-example   150%/50%   1     10    3     3h32m
hpa-example   Deployment/hpa-example   64%/50%   1     10    3     3h32m
hpa-example   Deployment/hpa-example   67%/50%   1     10    3     3h33m
hpa-example   Deployment/hpa-example   67%/50%   1     10    5     3h34m
hpa-example   Deployment/hpa-example   49%/50%   1     10    5     3h34m

Bạn cũng có thể xem demo video của chúng tôi tại đây asciicast

Nice, bạn đã cấu hình và chạy cơ bản thành công auto scale trên kuberntes, nếu bạn nào có thắc mắc gì hãy để bình luận bên dưới chúng tôi sẽ trả lời.

Leave a Reply

Your email address will not be published. Required fields are marked *