Kubernetesクラスタ水平拡張——HPA(自動伸縮)


Kubernetesクラスタは、Replication Controlのscaleメカニズムによってサービスの拡張または縮小を完了し、伸縮性のあるサービスを実現することができる.
Kubernetesクラスタの自動伸縮は次のように分けられます.
  • sacle手動伸縮:K 8 sリソースオブジェクトの基本管理の使用コマンドラインの方式(アップグレード、ロールバック、拡張、縮小)を参照することができる.
  • autoscale自動伸縮:つまり本編の博文で紹介したHPA;

  • Kubernetes自動拡張は主に以下に分けられる.
  • 水平拡張:インスタンス数の増減;
  • 垂直拡張:つまり、CPU、メモリの増加など、単一のインスタンスで使用できるリソースの増減.

  • 一、HPA紹介
    HPAのフルネーム(Horizontal Pod Autoscaling)は、現在のpodリソースの使用率(CPU、ディスク、メモリなど)に応じて、コピー数の動的な拡張と縮小を行い、各podの圧力を軽減することができます.pod負荷が一定のしきい値に達すると、拡張容量のポリシーに従ってより多くの新しいpodが生成され、圧力が分担され、podの使用が比較的空いている場合、一定の時間が経過すると、podのコピー数が自動的に減少する.
    自動拡張機能を実現するには、リソースの利用率を収集および統計するためにheapsterサービスを導入し、kubectl topコマンドをサポートする必要があります.heapsterサービスはprometheus(プロメテウス)MetricServerサービスに統合されているので、便宜上、ここではprometheusサービスの環境に基づいてHPA(ダイナミック拡張容量)のサービスを導入します.
    博文Kubernetesの3つの可視化UIインタフェースの3番目の配置Prometheusサービスを参照してprometheusサービスを実行し、prometheusを配置したくない場合はgithubを参照してheapsterサービスを個別に配置することができます.
    これだけ言うと、つまりHPAを使用するには、masterノードで次のコマンドを実行できることを保証する必要があります.
    [root@master ~]# kubectl top node      #           
    NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
    master   1317m        65%    1383Mi          80%       
    node01   1237m        61%    1082Mi          62%       
    node02   1146m        57%    1045Mi          60%   

    二、pod自動拡容と縮容を実現する
    1)HPAコントローラの生成
    [root@master ~]#  kubectl run php-apache --image=mirrorgooglecontainers/hpa-example --requests=cpu=200m --expose --port=80
    #  hpa  ,   php-apache,     CPU    200m     80  
    [root@master ~]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
    # hpa   deployment     CPU     50% ,     ,       10 
    [root@master ~]# kubectl get svc | grep php-apache    #  php-apache   svc  IP
    php-apache   ClusterIP   10.97.45.108           80/TCP    44m
    [root@master ~]#  kubectl get pod | grep php-apa    #     pod    
    php-apache-867f97c8cb-9mpd6   1/1     Running   0          44m

    2)php-apacheを消費するリソースをシミュレートし、podが自動的に拡張および縮小するかどうかを検証する
    新たに複数の端末(nodeノードも使用可能)を開き、php-apacheのpodに対してデッドサイクル要求を行います.以下のようにします(もしあなたのシステム資源が十分であれば、複数の端末を開き、podに対してデッドサイクル要求を行うことができます.私はここで2つのnodeの端末を開き、同時にphp-apacheのpodを求めます):
    [root@node01 ~]# while true; do wget -q -O- 10.97.45.108; done              #    ok      
    #      php-apache pod       
    [root@master ~]# kubectl get  hpa   #  hpa   cpu     
    #    “-w”   CPU          
    NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
    php-apache   Deployment/php-apache   416%/50%   1         10        10         56m
    [root@master ~]#  kubectl get pod
    #             ,  pod  ,    -w   pod          
    NAME                          READY   STATUS    RESTARTS   AGE
    php-apache-867f97c8cb-6jsjq   1/1     Running   0          4m9s
    php-apache-867f97c8cb-7xd5x   1/1     Running   0          51s
    php-apache-867f97c8cb-9mpd6   1/1     Running   0          56m
    php-apache-867f97c8cb-dhng7   1/1     Running   0          3m8s
    php-apache-867f97c8cb-qc9hr   1/1     Running   0          2m22s
    php-apache-867f97c8cb-rj494   1/1     Running   0          3m38s
    php-apache-867f97c8cb-sbn9n   1/1     Running   0          3m38s
    php-apache-867f97c8cb-vzfbg   1/1     Running   0          4m9s
    php-apache-867f97c8cb-vzfbg   1/1     Running   0          5m19s
    php-apache-867f97c8cb-vzfbg   1/1     Running   0          3m39s
    #           10 pod,            10 pod

    デッドサイクル要求を停止した後もpod数を直ちに減少させることはなく,しばらく待つとpod数を減少させ,流量の再急増を防止する.
    これでHPAはpodコピー数の自動拡張と縮小を実現した.
    ————————ここで終わります.読んでくれてありがとう——————