どこにでもある逸般の誤家庭のk8s

今まで仮想化といえばkvm+virshで仮想マシンを増殖させていたんですが、そろそろアプリ増える度に仮想マシン作るのも効率悪いというか仮想マシン増えすぎで管理が億劫になってきたのと、いい加減コンテナ仮想化のお勉強もしないと思い始めてきたのでk8sを導入。といっても導入しただけなメモ。

Nodeは、とりあえずMaster兼Node×3+Node×1でコンテナホストはCentOS7.6-x86。kubesprayで設定をバラ巻いたんだけどかなり色々ハマった。コンテナエンジンは、Docker嫌いなのでcri-oを採用。

ハマリどころ1:余計な物は導入しない

kubesprayで導入する場合は、コンテキストにDocker/etcd/flannel/weave/cri-o/kubeletはyumリポジトリも含めて導入しない。入っていたらアンインストールしないと、kubesrayでばら撒いた設定と思いっきり競合する。しかも競合して動かない理由やログはansibleの実行結果から読み解くのは至難の業。

ハマリどころ2:SELinux, Firewalldはオフに

SELinuxは推奨されていない&kubesprayのplaybookで無効化してくれると思いきやAnsibleが途中で止まる。Firewalldも動いているとWarningが出て途中までは導入できるけど、flannelやweaveが導入された後に設定される仮想I/FがFirewalldに止められるので事前にそれも含めて許可設定しておくか無効にしておいて後から設定のほうが良さげ。

ハマリどころ3:Pythonのバージョンが酷い

CentOSに導入されているAnsibleは2.7.5でPython2.7.5をデフォルトで使おうとするけど、hosts.iniを自動生成するinventory.pyはPython 3.xを要求する。CentOS標準の3.4とepelにある3.6のいずれかなんだけど3.6にはraumel-yamlが必要なのにsubesprayのrequiements.txtにはraumel-yamlがない。そして、公式ドキュメントにあるhosts.iniはエラーが出て生成してくれずissueを見るとhosts.yamlを生成しろと書いてる。hosts.yamlは生成できたけど、cluster.ymlのPlaybookを実行するためのAnsibleで使うraumel-yamlだとやはり動かない。結局、サンプルを参考に手動でhosts.iniを作成してkubesprayのcluster.ymlのplaybookを実行。

他にもcri-oだとkubesprayのnode追加(scale)や削除(remove)が対応していないとか制約があるとか、コンテナ内からどうも名前解決が微妙な挙動をしているとか、Storageが未構成だとか、とりあえずdashboardが動く状態までは持って行けたけど、あと2~3回試行錯誤しながら作り直して設計をちゃんと考えないと仮想マシンを移植するのは非常に怖い。