Kubernetes(K8S) 自动缩放

  • Kubernetes 自动缩放

    自动缩放是Kubernetes集群的主要功能之一。它是一种功能,其中群集能够随着对服务响应的需求的增加而增加节点的数量,并随着需求的减少而减少节点的数量。Google Cloud Engine(GCE)和Google Container Engine(GKE)当前支持此自动缩放功能,并且很快将在AWS上启动。
    为了在GCE中设置可扩展的基础架构,我们首先需要有一个活动的GCE项目,该项目具有Google云监控,Google Cloud日志记录和启用了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
    
    上面的命令显示,随着应用程序负载的增加,我们将至少维护一个POD副本,最多10个副本。
    我们可以通过运行$kubclt get hpa命令来检查自动定标器的状态。我们将使用以下命令来增加Pod的负载。
    
    $ 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
    
    我们可以使用以下命令检查正在运行的Pod的数量。
    
    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