Kubernetes ナビ
本シリーズでは kubernetes クラスタを構成する様々なコンポーネント・技術をざっとご紹介しております。
- 【2021年4月版】Kubernetes ナビ その1: ディストリいろいろ
- 【2021年4月版】Kubernetes ナビ その2: ネットワーク・サービス関連
- 【2021年4月版】Kubernetes ナビ その3: ストレージ関連
- 【2021年4月版】Kubernetes ナビ その4: コンテナ関連
- 【2021年4月版】Kubernetes ナビ その5: Serverless
今回はその1となります。
Kubernetes ざっくり
クラウド技術の集大成である Kubernetes は非常に多くのレイヤ、プロダクトが組み合わされており、全体像をしっかり把握するだけでも非常に困難なプロダクトであります。
というわけで、このシリーズでは Kubenetes 関連の OSS プロダクト、サービスをできるだけ簡潔に把握しやすくご紹介してみたいと思います。
ディストリビューション
オープンソースである Kubernetes には、Linux 同様いろいろなディストリビューションがあります。そこでまずは Kubernetes パッケージ丸ごとのディストリビューションについて、以下、筆者が気になるものをご紹介いたします。
各社の Kubernetes ディストリについて比較・検討できる資料になれば幸いです。
比較するレイヤー・コンポーネント
k8sはいくつかのレイヤー・コンポーネントで構成されていることは上記で述べたとおりですが、各ディストリを比較する上で、主に以下のレイヤー・コンポーネントをメインに比較してみたいと思います。
- CRI (Container Runtime Interface) … デフォルトで対応するもしくは同梱のコンテナ・ランタイム
- コントロールプレーンストレージ … クラスタの設定そのものを保存・同期するKVSもしくはDBサービス
- CNI (Container Networking Interface) … デフォルトで対応するもしくは同梱のコンテナ通信インタフェース
- CSI (Container Storage Interface) … デフォルトで対応するもしくは同梱の永続化インタフェース
- 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をご紹介していきたいと思います。