前回に続いて、Kubernetesのエコシステムをまとめていく。

今回はKubernetesのバリエーションとコンテナホストOSについて書く。

(2021/1/24更新)

Kubernetesディストリビューション

オリジナルのKubernetesにいろいろくっつけてソリューションとして提供されているものたち。

OpenShift v3+、OKD

OpenShiftはRed Hatが提供するプロダクトで、エンタープライズ対応のアプリケーションを開発、デプロイできるプラットフォーム。 v3からRHEL + Docker + Kubernetesの構成になって、Kubernetesコンテナアプリケーションプラットフォームと名乗るようになった。 v4からはRHELに代わって、買収したCoreOS社のContainer Linuxを使うようになった。

OpenShiftは普通のKubernetesに、OAuth認証機能、コンテナレジストリ、ロギングスタック(Elasticsearch + Kibana + Fluentd)、Prometeusによる監視機能、ダッシュボード、JenkinsによるCI/CD機能などをまとめて、シュっとエンタープレイズでセキュアに使える感じに仕上げたもの。

KubernetesのMinikubeに相当するMinishiftというのがあって、Minikubeと同じようなハイパバイザの上で簡単にシングルノードOpenShiftを動かせる。

OpenShiftのアップストリームがOSSのOrigin Community Distribution of Kubernetes (OKD)。 OKDは機能的にはOpenShiftとあまり変わらないらしいけど、サポートの有無が大きい。

IBM Cloud Private (ICP)

ICPはIBMが提供するプロダクトで、エンタープライズ対応のアプリケーションを開発、デプロイできるプラットフォーム。 Kubernetesによるコンテナ環境だけでなく、VMwareとかのハイパバイザ環境、OpenStackのIaaS、Cloud FoundryによるPaaSなんかも統合的に扱える。

普通のKubernetes + Docker + Istioのコンテナ基盤に、LDAP連携認証機能とコンテナレジストリとHelmのパッケージカタログを乗っけて、そのカタログからElastic StackとPrometeusとGrafanaをデプロイしてロギングと監視機能とダッシュボードを付けたり、MicroclimateとJenkinsをデプロイしてCI/CDできるようにしたり、 各種ミドルウェア(e.g. WebSphereRabbitMQ)とフレームワーク(e.g. MicroProfileKituraSpring)によるアプリケーションをデプロイしたりできる。

Pivotal Container Service (PKS)

PKSはVMwareとPivotalが提供するプロダクト。 pkdコマンドでエンタープライズ用途向けKubernetesクラスタを構築、管理できる。 Cloud FoundryのコンポーネントでもあるBOSHを利用していて、オンプレミス環境やGCPなどのクラウドやOpenStackによるPaaS環境といった色々な環境でのクラスタ構築をサポートしている。

特に、VMwareのプロダクトだけあってvSphereとの統合が強く、NSX-Tネットワーク仮想化によってセキュアでプログラマブルなネットワークを利用できる。 ストレージや監視回りなど、VMwareエコシステムの様々なツールとの連携もしやすくなっている。

Pivotal Services MarketplaceからアドオンをデプロイできるサービスブローカやコンテナレジストリであるHarborも付いてくる。

Tectonic

TectonicはCoreOS社が開発していたもの。 オンプレミス環境やGCPなどのクラウドやOpenStackによるPaaS環境といった色々な環境でのクラスタ構築をサポート。 Kubernetesクラスタや、そのホストマシンの管理をGUIでできたり、PrometheusとAlertmanagerとGrafanaを載せてくれるのでメトリック監視もできる。 ホストOSは当然CoreOS(下記)なので、セキュアで運用が楽。

CoreOS社がRed Hatに買収されたため、TectonicはOpenShiftに吸収されることになった。

Cisco Container Platform

Cisco Container PlatformはCiscoによるKubernetesディストリビューション。

プロダクション向けのKubernetesとして、モニタリングやログ管理やGUIとかを付けてくれているのは他のディストリビューションと同じだけど、特徴としてはHyperFlexというCiscoのハイパーコンバージドインフラストラクチャに最適化されていること。 CNIプラグインが自前のContivというやつでACIと連携するし、HyperFlexのストレージドライバを積んでいてPodにマウントできる。

Stackube

StackubeはOpenStackコミュニティによるもので、Kubernetesディストリビューションの章にいれたけど実際はKubernetesを組み込んだOpenStackディストリビューション。

OpenStackにおいてVMの作成・管理をするNovaがKubernetesに置き換わっていて、VMがPodに代わっている。 Podの永続化ボリュームであるPersistentVolumeがCinderに対応していて、Cinderが管理するボリュームをPodにマウントできる。 また、Neuron CNIプラグインが組み込まれていて、PodからNeuronのネットワークを使える。

2017年5月くらいにGitHubに公開されたけど、リリースが作られることなく3か月くらいで開発止まった。

Konvoy

もともとMesosベースのDC/OSを提供していたMesosphere社が、Mesos以外も頑張るという決意を込めて社名をD2iQに変えた

同時に発表したのがKsphereというKubernetesソリューションサービスで、Konvoyはその構成要素。

Konvoyは、Calicoによるネットワーク制御、MetalLBによるロードバランシング、Traefikによるトラフィック制御、TelegrafとPrometeusとGrafanaによるモニタリング、ElasticスタックとFluent Bitによるログ管理、AnsibleTerraformによるオートメーション、Veleroによるバックアップを詰め込んだ、エンタープライズ向けのKubernetesディストリビューション。

MicroK8s

MicroK8sはCanonical社によるKubernetesディストリビューション。 snapパッケージとして配布されていて、Kubernetesに加えてcontainerdやnvidia-container-runtimeが同梱されているので、簡単にGPUが使えるKubernetesをインストールできる。

アドオンなどを扱えるmicrok8sコマンドが提供されていて、PrometheusとかGrafanaとかDockerレジストリとかIstioとかをシュっと有効化・無効化できる。

シングルノードクラスタのみサポートで、テスト・開発環境用途向け。

Rancher

RancherはRancher社によるプロダクト。 v1系はKubernetes、Mesos、Docker Swarmに加えて自前のCattleと、様々なコンテナオーケストレーションツールを一元的に扱うためのツールで、インフラレイヤの抽象化も自前で実装していた模様。

v2になってKubernetes以外を切り捨て、インフラレイヤの制御もKubernetesに任せて、アーキテクチャを洗練させた。

v2はRancherサーバが主たるコンポーネントで、これがKubernetesクラスタを管理したりAPIやGUIを提供したりする。 Rancher Kubernetes Engine (RKE)というコンポーネントもあって、これを使うとプロダクションレディなKubernetesクラスタを簡単目にインストールできる。

Rancherサーバの管理対象のクラスタは、GCPやEKSなどのマネージドのものや、RKEで構築したものの他、既存の任意のKubernetesクラスタをインポートすることもできる。 Rancherの管理下に入れたクラスタは、RancherのGUIからHelmのチャートをインストールしたり、etcdのバックアップ・リストアが出来たり、いい感じに運用できる。

KubernetesディストリビューションというよりかはKubernetesクラスタ管理ツールと言うべきかも。

HPE Container Platform

HPE Container PlatformはHPE社によるKubernetesディストリビューション。 クラウドでもオンプレでも動き、HPEが以前から推進するハイブリッドクラウド戦略を支えるもの。

OSSのKubernetesに、簡単にセキュアで安定したマルチクラスタを構築して監視できるというのが売り。 HPEのストレージ、ネットワーク、サーバ、ネットワーク、HCI、エッジ機器なんかとがんがん連携していくものと思われる。

Diamanti

DiamantiはKubernetes搭載ハイパーコンバージドインフラ(HCI)。 国内ではネットワールドがディストリビュータとして展開している。

搭載するKubernetesは普通のKubernetesかOpenShiftで、ネットワークインターフェースやストレージなどがコンテナやKubernetesに最適化されていて、高速にワークロードを処理できる。

Tanzu Kubernetes Grid

Tanzu Kubernetes GridはVMwareによるKubernetesディストリビューション。下記vSphere 7 with KubernetesのSupervisor Kubernetes Clusterに使われている。

upstream-alignedなKubernetesということなので、オリジナルのKubernetesからは多少手が入っていると思われる。 また、FluentbitとかContourとかがデフォルトで乗ってくるのと、tkgという管理用コマンドライン(兼Web GUIサーバ)ツールが付いてくる。

k0s

k0sは2020年11月13日にMirantis社の中の人が発表したKubernetesディストリビューション。

単一のバイナリを実行すると、etcd、Kubernetes、containerdなどのバイナリを展開し、k0sプロセスからそれらを子プロセスとして立ち上げてKubernetesクラスタを構築してくれる。 Kubernetesとかはオリジナルのままで手が入っているわけではないし、オペレータとかサービスがもりもりデプロイされるわけでもないので、kubeadmみたいなKubernetesクラスタ構築ツールとして見てもいいかもしれない。

因みにコンテナイメージはk0sバイナリに含まれてないので、CoreDNSとかが普通にpullされる。

EKS Distro (EKS-D)

EKS-Dは2020年12月1日にAWSが発表したKubernetesディストリビューション。 EKSで使われてるやつ。

Kubernetesにセキュリティ脆弱性等のパッチがあてられたもの、CoreDNS、etcd、metrics-server、CNIプラグイン、CSIプラグインとかが含まれていて、それらのコンテナイメージはAmazon Linux 2ベースになっている。

オリジナルのKubernetesより長いサポートがAWSから提供されるのが大きな利点の一つ。 といっても、最長14ヶ月。 オリジナルのKubernetesが1.19からサポート期間が1年になったので、そんなに変わらないかも。

Kubernetes亜種

Kubernetes自体に改造が入っていたり、Kubernetes(の一部)っぽく動くものたち。

k3s

k3sはRancher社が開発した組込み向け軽量Kubernetes。 ケースリーエスと読む。

Kubernetesと完全互換(を目指し)ながら、組込み向けの以下のような特徴がある。

  • etcdの代わりにSQLiteを使える。
  • Kubernetesの全コンポーネント、SQLite、containerd、Flannel、CoreDNSとさらにiptablesなどのライブラリを全部静的リンクして単一バイナリになってる。
    • このためメモリ使用量が少ない。
    • バイナリひとつ置いて実行するだけでKubernetesが動く。
  • ARMをサポート。もちろんx64でも動く。

CIとかにも便利。

Usernetes

Usernetesはroot権限無しで動くKubernetesとDockerとcontainerdとかを作っているプロジェクト。

k3sが使っている。

Dockerは19.03でrootlessモードを搭載したし、その他のもrootlessで動かすためのパッチがアップストリームに提示されているので、その内それぞれの本家がrootlessで動けるようになって、Usernetesプロジェクトは役目を終えることになりそう。

virtual-kubelet

virtual-kubeletはMicrosoftが中心になって開発しているkubeletの実装。

virtual-kubeletはエージェントとして働き、kube-apiserverからはkubeletに見えるけど、自身がPodを起動する代わりにどこかのAPIを呼んでPodの起動を委譲する。 virtual-kubeletを使うことで、普通のkubeletが動けるLinuxマシン以外の計算リソースもKubernetesのノードとして扱えるようになる。 例えば以下のようなのをノードにできる。

  • AWS Fargate
  • Azure Container Instances
  • HashiCorp Nomad
  • OpenStack Zun

k3v

k3vはRancherが開発中のKubernetesの仮想コントロールプレーン(controllerとapi-server)。

k3vはkubectlからは普通のKubernetesに見えるけど、k3vに対して作成されたPodやボリュームなどのリソースは、k3vが参照する実Kubernetesクラスタ上で構成される。

マルチテナンシーやKubernetesアプリケーションのパッケージングに使えるはずとのことだけど、まだほとんどドキュメントが無くてよくわからない…

まだ出たてでPoCレベルの品質。

vSphere 7 with Kubernetes (Project Pacific)

Project PacificVMware Tanzuの構成要素で、VMware vSphereにKubernetesを統合したもの。

Project Pacificの肝はSupervisor Kubernetes Clusterというもので、これは、vSphereのハイパバイザ(i.e. ESXi)上で動くシステム管理用Kubernetesクラスタ。 Supervisor Kubernetes ClusterのマスターコンポーネントはESXi上のマイクロVMで動き、ノードコンポーネントとしてはkubeletの代わりにvsphereletというのがESXi直上で動く。 Supervisor Kubernetes Clusterにはカスタムコントローラが沢山組み込んであり、つまりカスタムリソースが色々使えるようになっていて、VMとかKubernetesクラスタとかNSX-Tネットワークとかストレージなんかを、KubernetesのAPIでデプロイできるようになっている。 Supervisor Kubernetes ClusterにPodをデプロイすると、ESXi上にマイクロVMが立ち上がり、そこでコンテナが実行される。

これがVMwareの本気か…と感嘆する。

Project Pacificは、2020年3月にvSphere 7 with KubernetesとしてTanzuとともに正式リリースされた。

Krustlet

KrustletはMicrosoftが開発しているkubeletのRust実装。 Podでコンテナで動かす代わりにwasmtimeベースのWebAssemblyランタイムでWebAssemblyアプリを動かす。

WebAssemblyアプリはwasm-to-ociというツールで事前にOCIイメージにしてコンテナレジストリに入れておいて、Podのデプロイ時にKrustletがpullして起動する。

コンテナで動かす非WebAssemblyアプリに比べて、省メモリで省ディスクで高パフォーマンスでセキュアにできるのが売り。

まだhighly experimental。

コンテナホストOS

コンテナをホストするためのOS。 いずれもコンテナを動かす以外の機能を削り、軽くてセキュアになっている。

Container Linux (a.k.a. CoreOS)

Container LinuxはCoreOS社が開発しているOSで、昔はCoreOSという名前だった(はず)。 コンテナホストOSとして最も広く使われている。

Linuxカーネルにsystemd、dockerなど最低限のサービスを載せて、それ以外のサービスやアプリは全部コンテナとして動かすのが特徴。 OS部分のコンテナやdockerは自動アップデートされるので、たくさんマシンがあっても運用が楽。

OCIランタイムはrktっぽい。

CoreOS社がRed Hatに買収された影響で消えゆく運命にある。

Atomic Host

Red Hatが主導するProject AtmicによるコンテナホストOSがAtomic Host。 Dockerでコンテナを動かせる他、Kubernetesもサポートされている。

OSS版としてはCentOS Atomic HostFedora Atomic Hostがあり、プロダクション向けにはRHEL Atomic Hostがある。 それぞれ名前についているRHEL系OSがベースになっている。

Red HatがCoreOS社を買収してContainer Linuxを手に入れたため、Atomic Hostの開発は停止する方向になった。

CoreOS (Red Hat製)

CoreOSは、CoreOS社を買収したRed Hatが自身のAtomic HostとCoreOS社のContainer Linuxを統合して後継にすべく開発しているコンテナホストOS。

Project Atmicと同様、Red Hat CoreOS、Fedora CoreOS、CentOS CoreOSというバリエーションが出てくるはずだけど、今のところFedora版しか見当たらないような…

と思ってたらいつの間にかでてた。 Red Hat Enterprise Linux CoreOS、略してRHCOSと呼ぶ。 なんて読むんだろう…

RancherOS

RancherOSはRancher社によるコンテナホストOS。

Dockerを動かすことに特化していて、それ以外の機能は全てDockerコンテナとして動かす。 システムサービスもDocker Composeで動かす。 このDocker Compose上のシステムサービスのひとつとしてDockerがもうひとつ動き、そのDockerでユーザアプリケーションのコンテナは動くため、システムとの分離が強い。

LinuxKit

LinuxKitはDocker社が主導して開発したもの。 コンテナホストOSそのものではなくて、コンテナホストOSを開発するためのツールキット。 もともとDocker社は、Docker for WindowsとかDocker for AWSとかプラットフォームごとのDocker for Xを開発してたけど、それをもっと効率よくやりたいという欲求からLinuxKitは生まれた。

LinuxKitによって作られたOSは、ベアメタル、AWSなどのクラウド、Hyper-Vなどのハイパバイザ上で動き、コンテナを動かすのに最低限の環境を提供する。 その上でinitプロセスとかcontainerdとかのサービスがコンテナで動き、それらがユーザアプリケーションのコンテナを管理するような感じ。 OS上に置くファイルはOS起動時に指定する形で、起動後はシステム全体がイミュータブルになる。

Docker Desktopとかで使われている。

LCOW

LinuxKitで作られた、Windows上でLinuxコンテナを動かすためのOSがLCOWWindows ContainersのHyper-V分離モードで動かせる。

Ubuntu Core (aka. Snappy Ubuntu Core)

Ubuntu CoreはCanonical社によるUbuntuベースのミニマルOS。 Container Linuxよりもさらに小さいのが売りの一つ。

snapというパッケージシステムが大きな特徴の一つで、これによってアプリケーション毎の依存ライブラリを分離して管理できる。

Ubuntu Core自体はコンテナホスト向けというよりはIoT向けという感じだけど、軽量でセキュアなのでsnapでDockerやKubernetesを入れればコンテナホストOSとしていい感じになる。

k3OS

k3OSはRancher社が開発したKubernetes OS。

RancherOSと同様のアーキテクチャっぽくて、システムサービスを動かすのにDocker Composeの代わりにk3sを使うっぽい。

Container-Optimized OS

Container-Optimized OSはGoogleによるChromium OSベースのコンテナホストOSで、GCP専用。

Bottlerocket

BottlerocketはAWSが2020年3月に発表したOSSのコンテナホストOS。 現時点のものはLinux Kernel 5.4ベースで、EKSで使えるのはもちろん、ベアメタルにもインストールできる。

Talos

TalosはTalos Systems社によるKubernetesクラスタ向けOS。 セキュアでイミュータブルでミニマル。

shellがなく、全部APIで管理できるようになっている。

Flatcar Container Linux

Flatcar Container Linuxは開発停止したContainer Linuxのフォーク。