エッジで Kubernetes を実行しようとしていて、マネージド ソリューションが要件を満たしていないことがわかっている場合は、オプションとしてベアメタルを検討することが考えられます。 このドキュメントは、エッジで Kubernetes クラスターを構成するときに、使用するケースに最適なオプションを見つけるのに役立ちます。
注意
この記事は、完全な比較ではありません。むしろ、共通オプション間の主要な修飾子に基づいて決定を行うための考えられるパスを示します。
エッジでのベアメタル Kubernetes のデシジョン ツリー
エッジで以下に示すベアメタル Kubernetes のオプションを決定するときは、次のツリーを参照してください。
このフローチャートの Visio ファイルをダウンロードします
MicroK8s: Canonical による、標準に準拠した "低運用"の Kubernetes
K3s: IoT とエッジ コンピューティング用に構築された認定 Kubernetes ディストリビューション
kubeadm: 標準のコンピューティングに適した、ゼロから Kubernetes クラスターを作成するための Kubernetes ツール (Linux/Windows)
注意
低運用とは、自動更新や簡略化されたアップグレードのように、いくつかの運用タスクが抽象化または容易化された場合の運用コストの削減を意味します。
Canonical による MicroK8s
MicroK8s は、snap をサポートする Linux マシンに簡単にインストールできる単一の snap パッケージとして提供されます。 Windows、macOS、Raspberry PI/ARM 用の代替インストールを利用できます。 MicroK8s をインストールすると、MicroK8s ツールで管理できる単一ノードのクラスターが作成されます。 独自の kubectl を使用してパッケージ化されてして、特定のアドオンが有効になっている場合があります (たとえば、Helm、DNS、イングレス、MetalLB など)。 マルチノード、Windows ノード、高可用性 (HA) のシナリオもサポートされています。
考慮事項:
MicroK8s を実行する場所に応じて、さまざまなリソース要件があります。 リソースの最小要件については、製品ドキュメントを参照してください。 次に例を示します。
Ubuntu: 4 GB RAM、20 GB ディスク領域
Windows: 4 GB RAM、40 GB ディスク領域
Windows のワークロードは、Calico CNI を使用した MicroK8s クラスターでのみサポートされています。
MicroK8s のマルチノード クラスターの各ノードが動作するには、単一マシン上の個別の VM やコンテナーであるか、同じネットワーク上の別のマシンであるかに関係なく、専用の環境を使用する必要があります。
ARM ハードウェアで MicroK8s を実行すると、問題が発生する可能性があります。 考えられる解決策については、ドキュメントを参照してください。
Rancher による K3s
K3s は、Kubernetes の軽量ディストリビューションです。 K3s は 1 つのバイナリとしてデプロイされ、MicroK8s と同様に、kubectl や ctr などの組み込みツールが付属しています。
考慮事項:
バイナリは 100 MB 未満ですが、シナリオによってはさらに小さいリソース要件もあります。 リソースの最小要件については、ドキュメントを参照してください。
SQLite3 は既定のストレージ システムですが、その他のオプションがサポートされています。
Windows ノードは K3s に対して現在サポートされていません。
HA は、外部データベースまたは埋め込みデータベースを使用して実現できます。 K3s では、v1.19.5+k3s1 のリリースで埋め込み etcd の完全なサポートを追加しました。
kubeadm
Kubeadm は、シンプルな Kubernetes のゼロからのバニラ インストールです。
考慮事項:
マシン 1 台あたり 2 GiB (ギビバイト) 以上の RAM が必要です。
コントロール プレーン ノードでは少なくとも 2 つの CPU が必要です。
コントロール プレーン ノードは、deb または rpm と互換性のある Linux OS を実行しているマシンである必要があります。
Kubernetes バージョンとバージョン スキュー サポート ポリシーは、"kubeadm" と Kubernetes 全体に適用されます。 サポートされている Kubernetes と kubeadm のバージョンについては、ポリシーを確認してください。
管理と自動化
ベアメタル クラスターのプロビジョニングの自動化と管理には、検討すべき 2 つのオプションの Ansible と Metal3 があります。
Ansible を使用すると、リモート リソースを簡単に管理できるため、リモート ノードを管理して Kubernetes クラスターに参加させるための第一候補となります。 必要なものは、Linux マシンで実行される Ansible バイナリと、リモート マシン上の SSH だけです。 このメソッドは、ターゲット マシンで任意のスクリプトを実行する柔軟なメカニズムを提供します。つまり、上記のいずれかのツールで Ansible を使用できます。
Metal3 は、クラスター API と同様の概念を利用して、この問題を解決するために別のアプローチを採用しています。 ネイティブ Kubernetes オブジェクトを使用してベアメタル クラスターをプロビジョニングおよび管理するには、エフェメラル クラスターをインスタンス化する必要があります。 書き込み時には、Metal3 が kubeadm を使用するため、Kubernetes の軽量ディストリビューションはサポートされません。
クラスターのプロビジョニング以外の管理については、Azure Arc 対応のクラスターについて学習し、Azure でクラスターを管理することを検討してください。
次のステップ
詳細については、次の記事を参照してください。