[Virtualization][Linux][k8s] Project Calicoの設定を変更する

近況報告

ちょい前辺りから、こんな風にコンテナ環境を組んでいるわけですが

あれからいろいろ増強しまして、

  • ESXiサーバを1台追加(PRIMERGY TX120 S3を増設)
    • Core2Duo P8700x1(1P/2C)/ 8GB RAM/ 146GB SAS x2(RAID1)
  • Cephを構築
    • 4ノード構成
      • 1号機:NAS上のデータストアで構築(ESXi#2を使用)
      • 2号機:ローカルデータストアで構築(ESXi#1を使用)
      • 3号機:NexentaStorの重複排除データストアで構築(ESXi#2を使用)
      • 4号機:ローカルデータストアで構築(ESXi#3を使用)
  • Workerノードを増設
    • ESXi#3に増設。結果、全体として1Master/5Worker構成に

となりました。成長したなぁ、知らないうちに。

特にCephは面白いストレージで、オブジェクトストレージでありながらNFS/CIFS/Block(RBD)/REST APIなんでもござれな分散オブジェクトストレージとなっています。ハードパワー不足も有り、どうやらOpenEBSを安定的に動作させるのは難しかったようで、安定した小規模ブロックストレージを構成するべく、導入したというのもあります。

パフォーマンス評価はまだできてないんですが、それはそれでそのうちやりたいなーと思っています。いまのところは比較的安定して動いていて、MastodonのPostgreSQLデータ領域として大活躍中です。

今回やること

今回は、個々のネットワークを構成しているSDNコンポーネントである、Project Calicoの相互iBGP接続モードの変更をしたいなと思っとります。

[root@Rahu ~]# calicoctl get ipPool -o wide
NAME CIDR NAT IPIPMODE DISABLED
default-ipv4-ippool 10.240.0.0/16 true Always false
default-ipv6-ippool fd75::/112 true Never false

default-ipv4-ippoolですが、現状「IPIPMODE」が「Always」となっており、各ノードのBIRDはiBGPフルメッシュ接続をしています。これは、常にiBGP接続をする際、IPIP接続したトンネル越しに接続をしますよーということを意味していて、その分通信オーバーヘッドが発生することになり、通信信頼性の低下に繋がります。

そこで、こいつのIPIPモードを解除するというのが本記事の目指すゴールです。

calicoctlを使用して、設定を変更する

使用するのはcalicoctlです。導入の手順は以下のサイトを参考にしてください。

https://docs.projectcalico.org/v3.1/usage/calicoctl/install

calicoctlコマンドは余りkubectlと使い方は変わらず、設定を変更する際はYAMLファイルを作成し、これを指定して「calicoctl apply」をしてあげることで反映することが可能です。今回、こんなファイルを作りました。

- apiVersion: projectcalico.org/v3
  kind: IPPool
  metadata:
    name: default-ipv4-ippool
  spec:
    cidr: 10.240.0.0/16
    ipipMode: CrossSubnet
    natOutgoing: true
    disabled: false

ここで「ipipMode: CrossSubnet」としているのは、「異なるサブネットをまたがる場合に限り、IPIPを使用する」というのを意味しています。これを「Never」にすることで「IPIPを使用しない」、「Always」にすることで「IPIPを必ず使用する」となります。

で、反映します。

[root@Rahu project-calico]# calicoctl apply -f ippool-ipv4.yaml
Successfully applied 1 'IPPool' resource(s)

反映されたようです。状態を確認してみます。

[root@Rahu project-calico]# calicoctl get IPPool -o wide
NAME CIDR NAT IPIPMODE DISABLED
default-ipv4-ippool 10.240.0.0/16 true CrossSubnet false
default-ipv6-ippool fd75::/112 true Never false

IPIPモードが変わっているのが分かるかと思います。その後の接続状況を確認します。

[root@Rahu project-calico]# calicoctl node status
Calico process is running.

IPv4 BGP status
+-----------------+-------------------+-------+------------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+-----------------+-------------------+-------+------------+-------------+
| 192.168.100.174 | node-to-node mesh | up | 2018-05-27 | Established |
| 192.168.100.171 | node-to-node mesh | up | 2018-05-27 | Established |
| 192.168.100.173 | node-to-node mesh | up | 2018-05-27 | Established |
| 192.168.100.172 | node-to-node mesh | up | 2018-05-27 | Established |
| 192.168.100.175 | node-to-node mesh | up | 2018-05-27 | Established |
+-----------------+-------------------+-------+------------+-------------+

IPv6 BGP status
+----------------------------------------+-------------------+-------+------------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+----------------------------------------+-------------------+-------+------------+-------------+
| 2403:bd80:c102:100:b76f:eb70:523c:e6de | node-to-node mesh | up | 2018-05-27 | Established |
| 2403:bd80:c102:100:4d51:db18:be19:785a | node-to-node mesh | up | 2018-05-27 | Established |
| 2403:bd80:c102:100:1d6b:e1c3:98c7:5ede | node-to-node mesh | up | 2018-05-27 | Established |
| 2403:bd80:c102:100:9244:9b33:606a:e003 | node-to-node mesh | up | 2018-05-27 | Established |
| 2403:bd80:c102:100:7998:9c56:a9a3:dc98 | node-to-node mesh | up | 2018-05-27 | Established |
+----------------------------------------+-------------------+-------+------------+-------------+

・・・・た、多分接続状況は維持されているとは思います・・・

Calicoは面白い

WeavenetもVXLANを駆使してL2ネットワークを形成していて面白いのですが、CalicoはびっくりするほどL2通信を行わない、行うにしても極力限定的にするよう作られていて、非常に興味深いアーキテクチャとなっています。

そのおかげか、IPv6への適用が最もしやすく、MastodonでIPv6対応していたインスタンスをk8s基盤に載せ、かつ、IPv6対応を復帰させられたのはぶっちゃけこれのおかげです。

いずれにしても、Kubernetesの持つ各種機能とその連携コンポーネントは最新技術の塊で、慣れてしまえばどこまでもハマり込めるものがありますので、ぜひぜひお試しくださいまし。

SaaS系ソリューションなどでは、結構用いられているのではないかなーと思います。こういうの。