k3osを入れてみる

PROXMOXクラスタもとりあえずは動くようになった、ということで、コンテナ駆動基盤をどうしようかと。

ちょっと前ならContainer Linuxを大喜びで入れたことでしょうが、残念ながらContainer LinuxはRedHatに買収され、Fedora Atomicと結合しました。今はFedora CoreOSを名乗っています。

こいつのコンテナ基盤には(当然ですが)Podmanが採用されており、見た目はDockerコンパチブルではあるものの、その中身は全くの別物です。癖も強く、決して悪いプロダクトではないものの、完全な互換かというとそうでもありません。Podman自体は悪くはないんだよ、悪くは。いいセンスだと思うんだよ。

しかしながら、そもそも世の中はk8sに流れ切っており、Podmanがデファクトスタンダードを確保するかというとまったくそうとも思えず。ええい、仕方ない。k8s入れるか。とはいえ、k8s動かすのにUbuntuとか巨大な化け物を動かしたくありません。AlpineでいいんだよAlpineで。

というわけで、k3osを引っ張り出してきました。これは、クラスタ管理ツールで有名なrancherさんのプロダクトしたディストリビューションで、Alpineをベースにコンパクトなk8sであるところのk3sを構成します。k3sは、CNCF認定を受けている超コンパクトKubernatesディストリビューション。それを、AlpineLinuxとセットしたものがk3osというわけです。

なんといってもそのコンパクトさは大したもので、IoTデバイスにk8sを組み込む、ということを目的とするだけあります。すっごい小さい。いくら6台構成のPROXMOXとはいえ、一台を空っぽのHA逃げ先と考えていた私にとってみれば、3~4台のk8sクラスタといいうことを想定していた感じなので、そんなにメモリもCPUもディスクも献上したくないのです。

コントロールプレーンもシングルでいいし(どうせHAでどっかいくから)、ノードもシンプルに仕上げておきたい。フルセットのk8sとかオーバースペックもいいところです。というか、まともに自宅の隅っこのクラスタにk8sフルセットなんか組んで、維持運用できる自信が全くありません。

できるだけ手のかからない、シンプルなもので済ませておきたい、というのが本音。それでもk8sの機能セットとしてはそれなりに持っていますし、rancherも入れてしまえばクラスタ管理もGUIからできるんじゃない?という目論見で、さくっとk3osのisoを落としてきてセットアップ。

とはいえ、実はこの作業前にFedora CoreOSもためしては見たのですが、ignition書くのが死ぬほどめんどくさくなったのと、そもそもetcdやFlunnelがないのでどう動くかがろくろく見当もつかないうえに、設計に頭使うのがめんどくさくなりました。というかignition配るのにhttp立てないといけないとか、もうOpenStackのheatを思い出して辛い気持ちになりました。というかignitionないとインストールデザインできないってわりと面倒ですね。

いや、http立てるとこまではやったよ、立てるとこまでは…。コンテナで建てようかと思って、自分がコンテナ基盤作ろうとしてるということに気が付いて、何この鶏と卵。とか思うまでは。

もちろん、S3にでもおいて取ってくればいい話ですし、別に適当なVM(Kali試してるのでその上に立ててた)でやってればいいんですが、なんか管理が散逸してて気持ちが悪い。クラスタ内で完結してほしい。で、調べてたらサービスディスカバリはどっか別で建てろとか言っているし。etcdなくすなよ、そういうこと言うなら。

というわけで、RedHat信者ではあるんですが、さすがにこれはねぇわ、となりk3osに逃げた次第。

ネットワークの設定に四苦八苦しましたが(イーサの名前の付け方とか、なんだよconnmanって?とか)、まあVLANからは離れているのでそこまで困りません。k3sの反映がどのタイミングがいまいちわからなくてリブートしまくったりしましたが、とりあえず無事にコントロールプレーンx1、エージェントx1で最小クラスタにしたところで、helm経由でcert-managerをぶち込み、何も考えずにrancherのlatestを入れます。ホストネームとか適当です。

k3os203 [~]# helm install rancher rancher-latest/rancher --namespace cattle-system --set hostname=rancher.my.org --set replicas=3
Error: INSTALLATION FAILED: chart requires kubeVersion: < 1.22.0-0 which is incompatible with Kubernetes v1.22.2+k3s2

お…おう。そっか。対応待つわ。急いでないし。はやいとこ頼むわ。やらなきゃならなかったことを忘れそうだし。相変わらずk8s界隈はバージョンがシビアですね。

とりあえずCLIは問題ないですし、rancherないからって別に視覚的な問題だけなので、いくつかagent追加したら、コンテナでいろいろ展開するつもりです。

今のところ考えているのはgraylogなんかのログストレージと、Graphiteでしょうか。InfluxDBはクラスタ組めないからどうしようかと思っています。まあクラスタなくても困りはしないんですが…。あとは内部向けになんか展開するときのためのnginxをぽつんと置いておきたいかなとは思っていますが、Kali Linuxに入れてしまったのでこのままでもいいような気もしています。Kaliは何かと使いそうですしね。

graylogはTrueNASのPluginで入れとこうかと思ったんですが、こっちはこっちでバグっていてごにょごにょしないといけないとか、もうね。心底面倒になったので、あきらめ。VMでやったほうがましですね。TrueNASにVM立ててPROXMOX入れれるかな? VT-x、上に継承してくれているだろうか。on ESXiとかon proxmoxはいくらでも見るが、TrueNASのVMについてはほとんど情報がない。

というわけで、今度試そう、そうしよう。いつかやる。たぶん遠い未来に。