LoginSignup
3

More than 1 year has passed since last update.

posted at

updated at

Organization

【2021年4月版】Kubernetes ナビ その1: ディストリいろいろ

Kubernetes ナビ

本シリーズでは kubernetes クラスタを構成する様々なコンポーネント・技術をざっとご紹介しております。

今回はその1となります。

Kubernetes ざっくり

クラウド技術の集大成である Kubernetes は非常に多くのレイヤ、プロダクトが組み合わされており、全体像をしっかり把握するだけでも非常に困難なプロダクトであります。
というわけで、このシリーズでは Kubenetes 関連の OSS プロダクト、サービスをできるだけ簡潔に把握しやすくご紹介してみたいと思います。

ディストリビューション

オープンソースである Kubernetes には、Linux 同様いろいろなディストリビューションがあります。そこでまずは Kubernetes パッケージ丸ごとのディストリビューションについて、以下、筆者が気になるものをご紹介いたします。
各社の Kubernetes ディストリについて比較・検討できる資料になれば幸いです。

比較するレイヤー・コンポーネント

k8sはいくつかのレイヤー・コンポーネントで構成されていることは上記で述べたとおりですが、各ディストリを比較する上で、主に以下のレイヤー・コンポーネントをメインに比較してみたいと思います。

  1. CRI (Container Runtime Interface) … デフォルトで対応するもしくは同梱のコンテナ・ランタイム
  2. コントロールプレーンストレージ … クラスタの設定そのものを保存・同期するKVSもしくはDBサービス
  3. CNI (Container Networking Interface) … デフォルトで対応するもしくは同梱のコンテナ通信インタフェース
  4. CSI (Container Storage Interface) … デフォルトで対応するもしくは同梱の永続化インタフェース
  5. DNS … デフォルトで対応するもしくは同梱のDNS、サービスディスカバリサービス

それでは以下で代表的なディストリビューションをご紹介します。

1. 本家 Kubernetes

スペック概要
公式サイト https://kubernetes.io/
リポジトリ https://github.com/kubernetes/kubernetes
開発団体 Cloud Native Computing Foundation
最新バージョン 1.21.0
対応CRI containerd, CRI-O, Dockerなど
コントロールプレーンストレージ etcd
CNIプロバイダ CNI純正?のプラグイン
CSIプロバイダ ×
DNS CoreDNS

公式が配布するすっぴんのKubernetesですが、フルスタックのパッケージなのでサイズ(容量、必要なメモリ、CPU)が大きいです。
単一のPCで動かすのは kind でも可能ですが、あまりお勧めしないのでローカルでの学習には正直なところ、向かないと思います。すっぴんのKubernetesをローカルで試すのであれば Minikube をお勧めします。
こちらはKubernetesをフルカスタマイズして自前で運用したり、Kubernetesのプラグインを開発するようなガチ勢向けであると思っています。

2. K3s

スペック概要
公式サイト https://k3s.io/
リポジトリ https://github.com/k3s-io/k3s
開発団体 Rancher
K8s バージョン互換 1.20.5
対応CRI containerd & runc
コントロールプレーンストレージ kine
CNIプロバイダ flannel
CSIプロバイダ × ※ストレージはLocal-path-provisionerを使用
DNS CoreDNS
その他 metrics-server, Traefik for ingress, Klipper-lb as an embedded service loadbalancer provider, Kube-router for network policy, Helm-controller to allow for CRD-driven deployment of helm manifests

インストールと動作が簡単・軽量なので個人的にはおすすめのディストリです。
まずKubernetesを使うことが第一目標であれば docker にて k3s を立ち上げればkubernetes構築完了です。
開発環境の構築などでKubernetesの内部の理解よりもとにかくさっさと運用スタートしてしまいたい場合には重宝します。

3. Microk8s

スペック概要
公式サイト https://microk8s.io/
リポジトリ https://github.com/ubuntu/microk8s
開発団体 Canonical
K8s バージョン互換 1.20
対応CRI containerd & runc
コントロールプレーンストレージ 不明。 dqliteか?
CNIプロバイダ CNI純正?のプラグイン
CSIプロバイダ × ※プラグインとしてOpenEBSが利用可能
DNS × ※ プラグインとしてCoreDNSが利用可能
その他 Service Mesh: Istio, Linkerd, Serverless: Knative, Monitoring: Fluentd, Prometheus, Grafana, Metrics, Ingress, Dashboard, Clustering,Automatic updates to the latest Kubernetes version,GPGPU bindings for AI/ML,Kubeflow!

Uuntuでおなじみ Canonical 御謹製の K8s です。Ubuntu & Canonical 好きな方、抵抗のない方はどうぞご利用ください。自分はちょっと遠慮しておきます・・・笑

5. K0s

スペック概要
公式サイト https://k0sproject.io/
リポジトリ https://github.com/k0sproject/k0s
開発団体 Mirantis
K8s バージョン互換 1.20
対応CRI containerd & runc
コントロールプレーンストレージ sqlite, etcd, kine
CNIプロバイダ Calico
CSIプロバイダ ×
DNS CoreDNS

たぶんミニマルな K8sとしては今のところ最後発で絶賛開発中の k0s です。ご覧の通り極めてミニマルな構成です。
実際、Kubernetesはプラグインそのものが自分にコンテナをデプロイして動作することになるので、初期構成はこんなもんでいいのです。ただし絶賛開発中ですので個人の実験はともかく、案件での開発環境として採用するのはまだまだかな、というところでございます。半年後、どうなっているか、が期待です。

6. GKE, EKS, AKS

Google の GKE、AWS の EKS、MS Azureの AKS についてはディストリと同列の比較はできないので、名前だけ上げておきます。

正直なところ、Kubernetes の運用、つまりこれを載せるサーバーのハードウェアを自前で運用するのはかなりしんどいです。
特に案件で開発環境に構築するとなると、落ちるのが前提の単一ノードクラスタ を運用することになり、これはリスクでしかないです。
K8sサービスを使えば札束で安全が買えるのです。実際の案件では開発環境から各社のサービスを利用することをお勧めします。

雑感

Kubernetes は間違いなく学習するべき技術ですが、クラウド技術の集大成なだけあって非常にハードルが高いです。
とりあえず手元で k8s を動かしてみて学ぶ、ということが必要ですので、MinikubeやMicroK8sのような "小さなクラスタ"は学習用に必要でした。
ところが RaspberryPi を代表とする IoT のエッジ向けのコンテナベースアプリ開発のために、k3sやk0sのような"ミニマルなクラスタ"が発展してきてしまいました。ARM で K8s を動かすのがもはやメインストリームですよ。いやぁ・・・まいった。

上記で代表的なディストリとそのコンポーネントを挙げていますが、まさにOSSのオールスターのようですね。数も多いがそれぞれ第一級の機能と特徴と設定を持ってますので個々の内容も濃いわけです。いやぁ・・・まいった。

以降のシリーズではそれぞれのレイヤーについて代表的なOSSをご紹介していきたいと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3