Open2

コンテナワークロード向け OS の比較

zenogawazenogawa

コンテナワークロード向け, kubernetes 向けの OS はいくつかあるがそれぞれの特徴を比較する。

  • flatcar
  • talos
  • bottlerocket
  • fedora coreos

共通概念

いずれの OS も以下の概念は共通している。

  • immutable
    • ファイルシステムの一部または全部を read-only にすることで変更不可能な構成にしているものが多い。
    • 構成を変更できなくすることでセキュリティ性や以下の宣言性を高めている。
  • atomic
    • ここでの atomic は分割できない最小単位という意味で用いられているっぽい。
    • 例えば talos ではハイスされているイメージは 不変で単一の自己完結型イメージという意味で atomic としている。
  • minimal
    • パッケージやコマンドを必要最小限にすることで軽量にしている。
  • secure
    • 依存パッケージの脆弱性対応を最小限にしてセキュアな環境にしている。
    • k8s 向け OS では SSH もできずシェルも入っていないので侵入経路がより少ない。
  • declarative
    • OS 内部の構成 (パッケージ等) OS 内で変更せず、userdata や構成ファイルを通じて宣言的に記述する。

talos

コンテナ向けかつ kubernetes 向けの OS

  • 内部コンポーネントは socket を通じて gRPC で相互通信。
  • 外部からの操作もエンドポイントに対して gRCP で通信する。これには独自の talosctl CLI を使う、
  • API driven

参考

bottlerocket

コンテナ向けかつ kubernetes 向けの OS

  • API driven
  • socket を通じて HTTP で API リクエストを送る。
  • 管理用のホストコンテナとユーザーのコンテナワークロードから構成される。
  • もともと AWS が開発していたので ECS や EKS での使用に関する記述が多い。
  • userdata 等のカスタマイズはなさそう。カスタムが必要な場合は自前でイメージビルドする。

参考

fedora core os

コンテナワークロード向け OS. k8s でも使えるが必ずしも k8s 向けというわけではない。

  • 自動アップデートに対応
  • だいたい flatcar の機能に近い。

参考

fkatcar は記事にしたので割愛


flatcar と fedora CoreOS は package manager がない等の特徴があるものの、シェルも入っているので汎用的な OS とだいたい同じように使える。
一方で k8s 向け OS の bottlerocket と talos は API-driven だけあって通常の OS とかなり構成が異なる。

zenogawazenogawa

比較表

  • 正確でない部分もありそうだが一旦まとめ
  • flatcar, fedora CoreOS がソースコードを公開している github repo が見当たらない。そのためか github star が多い repo もそこまでない。
  • 適宜更新
- Flatcar Talos Bottlerocket Fedora CoreOS
管理元 Flatcar Sidero Labs Bottlerocket Fedora
Github star - 6.8 k 8.7 k -
デフォルト CRI docker + containerd containerd containerd docker + containerd + podman
kubernetes 対応 ✔️ ✔️ ✔️ ✔️
userdata の形式 Ignition talosconfig (独自 yml) - Ignition
デバッグツール toolbox talosctl ホストコンテナ toolbox
ssh 可能 ✔️ - ホストコンテナ経由で可能 ✔️
シェルがある ✔️ - ホストコンテナ経由で可能 ✔️
ファイルシステムが Read only ✔️ ✔️ ✔️ ✔️
自動アップデートに対応 ✔️ - EKS, SSM 経由で可 ✔️
アップデートの管理ツール CLI, nebraska CLI (talosctl) EKS, SSM rpm-ostree, zincat