將水平Pod自動縮放器與Kubernetes EKS集群一起使用

這是續集。
您可以通過以下鏈接以PDF格式下載本文來支持我們。

以PDF格式下載指南


這是續集。

這是續集。
這是續集。

水平吊艙自動定標器 根據觀察到的CPU使用率,或 自定義指標 支持。水平吊艙自動縮放僅適用於可縮放對象。它不能用於不可縮放的對象,例如DaemonSet。

Horizo​​ntal Pod Autoscaler被實現為Kubernetes API資源和控制器。資源決定了控制器的行為。控制器會定期調整部署中的複製控制器或副本的數量,以使觀察到的平均CPU使用率與用戶指定的目標相匹配。

將水平Pod自動縮放器與Kubernetes EKS集群一起使用

必須先安裝Metrics Server,然後才能將Horizo​​ntal Pod Autoscaler與EKS群集一起使用。請按照以下指南獲取完整的安裝說明。

在Amazon EKS集群上安裝Kubernetes Metrics Server

使用以下命令驗證Metrics服務器是否正在運行:

$ kubectl get apiservice v1beta1.metrics.k8s.io -o yaml

apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"apiregistration.k8s.io/v1beta1","kind":"APIService","metadata":{"annotations":{},"name":"v1beta1.metrics.k8s.io"},"spec":{"group":"metrics.k8s.io","groupPriorityMinimum":100,"insecureSkipTLSVerify":true,"service":{"name":"metrics-server","namespace":"kube-system"},"version":"v1beta1","versionPriority":100}}
  creationTimestamp: "2020-08-12T11:27:13Z"
  name: v1beta1.metrics.k8s.io
  resourceVersion: "130943"
  selfLink: /apis/apiregistration.k8s.io/v1/apiservices/v1beta1.metrics.k8s.io
  uid: 83c44e41-6346-4dff-8ce2-aff665199209
spec:
  group: metrics.k8s.io
  groupPriorityMinimum: 100
  insecureSkipTLSVerify: true
  service:
    name: metrics-server
    namespace: kube-system
    port: 443
  version: v1beta1
  versionPriority: 100
status:
  conditions:
  - lastTransitionTime: "2020-08-12T11:27:18Z"
    message: all checks passed
    reason: Passed
    status: "True"
    type: Available

部署示例應用程序以測試HPA

讓我們部署一個測試應用程序,用它來演示Horizo​​ntal Pod Autoscaler的行為。

為演示創建演示名稱空間。

$ kubectl create ns demo
namespace/demo created

$ kubectl get ns
NAME              STATUS   AGE
default           Active   2d20h
demo              Active   22s
kube-node-lease   Active   2d20h
kube-public       Active   2d20h
kube-system       Active   2d20h

通過在終端中運行以下命令來部署示例Apache Web服務器應用程序。

$ kubectl apply -f https://k8s.io/examples/application/php-apache.yaml -n demo
deployment.apps/php-apache created
service/php-apache created

您還可以使用kubectl run命令來部署應用程序並創建服務。

$ kubectl run php-apache 
  --generator=run-pod/v1 
  --image=k8s.gcr.io/hpa-example 
  --requests=cpu=200m 
  --limits=cpu=500m 
  --expose 
  --port=80

檢查應用程序的狀態。

$ kubectl get pods -n demo
NAME                          READY   STATUS    RESTARTS   AGE
php-apache-79544c9bd9-wccnj   1/1     Running   0          40s

創建Kubernetes HPA資源

您可以在應用程序運行時創建HPA資源。

$ kubectl autoscale deployment php-apache --cpu-percent=70 --min=1 --max=5 -n demo
horizontalpodautoscaler.autoscaling/php-apache autoscaled

上面的命令創建一個自動縮放器,當CPU使用率超過70%時,該縮放器將擴展Pod。豆莢的最小數量是 1個 最大值是 五。

使用以下命令獲取自動定標器詳細信息:

$ kubectl get hpa -n demo
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/70%    1         5         1          80s

$ kubectl describe hpa -n demo
Name:                                                  php-apache
Namespace:                                             demo
Labels:                                                
Annotations:                                           
CreationTimestamp:                                     Fri, 14 Aug 2020 21:38:12 +0300
Reference:                                             Deployment/php-apache
Metrics:                                               ( current / target )
  resource cpu on pods  (as a percentage of request):  0% (1m) / 70%
Min replicas:                                          1
Max replicas:                                          5
Deployment pods:                                       1 current / 1 desired
Conditions:
  Type            Status  Reason               Message
  ----            ------  ------               -------
  AbleToScale     True    ScaleDownStabilized  recent recommendations were higher than current one, applying the highest recent recommendation
  ScalingActive   True    ValidMetricFound     the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)
  ScalingLimited  False   DesiredWithinRange   the desired count is within the acceptable range
Events:           

負荷增加

從多個位置訪問在Kubernetes上部署的服務,以增加負載。因此,我們將使用busybox容器來生成負載。

kubectl run -it --rm load-generator --image=busybox /bin/sh --generator=run-pod/v1 -n demo

您已登錄到容器終端。運行以下命令以運行while循環,該循環到達http的服務端點:/// php-apache。

/ # while true; do wget -q -O - http://php-apache; done

打開另一個終端,查看隨着負載增加,自動縮放器如何在部署中創建容器。

$ kubectl get hpa -n demo
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   83%/70%   1         5         5          9m

只要實際CPU百分比高於目標百分比,副本數就會增加到5。在這種情況下, 83%所以數量 REPLICAS 它繼續增加。

使用以下命令停止加載 CTRL + C

查看Autoscaler如何縮減您的部署規模。

$ kubectl get hpa -n demo -w 

吊艙可能需要幾分鐘才能運行。回到1。完成後,清理設置。

$ kubectl delete -f https://k8s.io/examples/application/php-apache.yaml -n demo
deployment.apps "php-apache" deleted
service "php-apache" deleted

卸下自動定標器。

$ kubectl delete hpa php-apache -n demo
horizontalpodautoscaler.autoscaling "php-apache" deleted

最後,刪除演示名稱空間。

$ kubectl delete ns demo
namespace "demo" deleted

使用相同的方法在帶有Metrics Server的HPA中自動縮放應用程序。

其他Kubernetes文章:

在EKS Kubernetes集群上啟用CloudWatch Logs

使用Cephfs的Kubernetes的Ceph永久存儲

如何創建管理員用戶以訪問Kubernetes儀錶板

這是續集。
您可以通過以下鏈接以PDF格式下載本文來支持我們。

以PDF格式下載指南


這是續集。

這是續集。
這是續集。

Sidebar