CKADのテスト勉強をしている。事前に試験対象のクラスタの概要が提示されているのだけど、そのクラスタが4つあって、CNIが「flannel」と「calico」のどちらかだった。そもそもCNIというものを詳しく知らないし、flannelとcalicoの差は全くわからなかったのでメモ。
CNIとは
上記がCNIの仕様書
CNI=the Container Networking Interface
Kubernetes ネットワーキング | 技術文書 | 技術情報 | VA Linux Systems Japan株式会社 こちらによると、CNIプラグインとは、何らかの単一のバイナリの実行ファイルのことを指す
CNI_COMMAND 等の環境変数を指定した上で標準入力に json を与えると結果が標準出力に json 形式で返ってくるという仕様になっています。
CNI Pluginが満たすべき振る舞い
- コンテナをネットワークに追加する
- コンテナをネットワークから削除する
- コンテナのネットワークが期待通りかをチェックする
- バージョンを返す
これができればいいらしい。
こちらによると、flannelが広く使われている。CoreOSはflannelを使う calicoはBGPを使ってピュアなL3ネットワークを作る。
このスライドにも書いてあるが、実装自体もどんどん変わっていっていて、過去の記述が現在ではすでにあてはまらないケースがありそう。
- flannelはネットワーク機能のみを提供
- calicoはそれに加えてポリシー管理も提供
- calicoのほうがパフォーマンスがいい?
- 現時点では、flannelもcalicoもそこまで本質的に差異はないぽい? くらいの理解で大丈夫そう。