その1の続きです。
前回書き忘れましたが、5台のノードのうち3台にはFloating IPを振ってあります。
hostname | IP | Floating IP | |
---|---|---|---|
rancher-k8s-1 | 10.0.0.25 | FIP1 | Rancher Server |
rancher-k8s-2 | 10.0.0.26 | FIP2 | LBを動かしたい |
rancher-k8s-3 | 10.0.0.27 | FIP3 | LBを動かしたい |
rancher-k8s-4 | 10.0.0.28 | ||
rancher-k8s-5 | 10.0.0.29 |
3 サンプルアプリケーションを動かしてみる
3.1 とりあえずカタログからデプロイしてみる
[CATALOG]メニューから、"K8s Example Guestbook"をデプロイしてみます。
フロントがPHP、後ろでredisが動くスタックになっているようです。せっかく5ノードあるので、フロントのレプリカ数を5個にしてみます。
[Launch]を押すと上がってきます。メニューの[KUBERNETES]-[Service]を見ると、
こうなっていて、
- "frontend"というLoadBalancerタイプのサービスがひとつ
- Podが5つ(各ノードに分散配置されてますね)
- 各Podにはコンテナがひとつ
- Podが5つ(各ノードに分散配置されてますね)
あとバックエンドのサービスとして
redisのMasterとSlaveが動いています。
3.2 LoadBalancerの確認
[KUBERNETES]-[System]で"kubernetes-loadbalancers"を見るとこうなってます。Rancherが作るこのLoadBalancerタイプのサービスは、要するにhaproxyのコンテナです。
わかりやすいですね。でも残念ながらこの10.0.0.28というIPアドレスを持つノード(rancher-k8s-4)はFloating IPを持っていないので、外からはこのサービスにアクセスできません。
なので別途LoadBalancerサービスを作ってみます。
3.3 Hostにラベルをつける
LoadBalancerサービスを作っても、スケジューラがそのコンテナを外部ネットワークに繋がっていない(Floating IPを持っていない)Hostで動かしてしまうと意味がありません。なのでFloating IPを持つHostにlabelをつけて、スケジューリングの条件とします。
[INFRASTRUCTURE]-[Hosts]で、Floating IPを持つHostの[Edit]から
こんな感じで適当にラベルをつけます。
3.4 LoadBalancerサービスをつくる
もちろんまじめにトラフィックの負荷分散を考えると、ハードウェアのロードバランサーを使うとか、それをNeutronのLBaaSに組み込むとか、いろいろ設計が必要になるわけですが、ここでは単純に「2つのFloating IPに入ってくるアクセスをhaproxyで5つのHost上のポートに振り分ける」ということを行います。
[KUBERNETES]-[System]のkubernetes-loadbalancersのところにAdd Load Balancerというメニューがあるので・・・
こんな感じで作ります。GuestBookのフロントのWebはポート31481をListenしてます。2つのHostで動かしたいのでスケールを2とします。
先ほどつけたHost Labelをスケジューリングルールに設定します。
で[Create]を押すと
できた。ちゃんとラベルをつけたHostで動いてますね。もともとあったほうは消してしまおう。
で、10.0.0.26 および 10.0.0.27 に対応するFloating IPにブラウザからアクセスしてみると
めでたしめでたし。
まだ続くぞよ。