Container

[超簡単!]kubernetesでオートスケール

2019/02/10


kubernetes1.10ではCPUベースの水平オートスケーリングが可能です。
Deployment,ReplicaSet,Podに対して設定可能。
ただBareMetalに構築したkubernetesクラスタでは、ちょこちょこ追加でインストールしたり設定する必要があったのでまとめました。

ゴール

CPUベースでNginxのPodを水平オートスケーリングする。

前提

kubernetesのクラスタを物理マシンに構築済み
構築していない方はこちらを参考に
ansibleでkubernetes環境の構築 1
ansibleでkubernetes環境の構築 2

説明しないこと

kubernetesの使い方
kubernetesの基本的なサービスの説明(Podとはなんぞや。みたいな)

環境

物理マシン
Ubuntu18.04
kubernetes 1.10

やっていく

オートスケーリングするためにはkubectl topコマンドでPodのリソースを取得できている必要があります。     なんで???
とりあえずエラー内容にheapsterがどうのこうのといっているのでheapsterをインストールしてみます。
※後述しますが、heapsterのデプロイは必要ありませんでした!

heapsterのinstallgit

cloneしてきてstandaloneのheapsterをデプロイします。   再度、topコマンドでPodのリソースを取得します。   おお、動いた。 ダッシュボードにも取得したメトリクスが表示されていい感じに。

負荷テスト用にnginxのDeploymentをデプロイします。   デプロイしたnginxにオートスケーリングの設定をします。
で,それぞれ実行。  

オートスケールを試す

デプロイしたNginxに負荷をかけます。
最近Golangにハマりかけているので、Golangで実行。   負荷いってらっしゃい!   .....負荷はあがってきたけど、オートスケーリングしない。
ダッシュボードに次のような出力がありました。
unable to get metrics for resource cpu
heapsterをデプロイしたのに、なぜかPodのcpuが取得できていないです。 githubのissue漁りました。
kubernetes1.8以降はheapsterの代わりに、metrics-serverを使うみたいです。もっと調べておけばよかった。。

metrics-serverのインストール

ということでmetrics-serverのデプロイをします。   超簡単に終わりました。 これでもう一度負荷をかけます。
感動。。。

まとめ

heapsterのインストールの必要はなし!
heapsterの代わりにmetrics-serverのインストールが必要
できたら感動する!
現状はCPUベースのスケーリングしかできないが、ロードマップにはtraficやmemory,discなどがあるのでそのうちもっといろいろできるようになるはず! AWSのEKSのHPA,heapsterについて書かれている記事がありました。
なんとAWSではどちらも使えないとのこと。
もしかしてEKSではオートスケーリング使えないのかもしれないです。
AWS好きじゃないので別にいいんやけど


追記 2019/02/09
EKSでオートスケールできました!

Docker,Kubernetesについてもっと知りたい方はココナラからご連絡ください!

Reference

 

-Container
-, , ,

Translate »