MicroK8sを使ってRaspberry Piを構築するには

cmoullec

on May 18, 2020

MicroK8sでRaspberry Piクラスターを構築するためのチュートリアル(英語)についてはこちらをご覧ください。このブログはチュートリアルではありません。ここでは、「なぜMicroK8sでRaspberry Piクラスターを構築するのか?」という疑問にお答えします。ここでは、Kubernetesに関する評判、クラスターコンピューティングの使い方、そしてMicroK8sの機能について、少し詳しく解説します。

Raspberry PiのMicrok8sクラスターを構築する理由

シンプルな答えは、計算リソースの負荷をメインコンピューターからRaspberry Piの小さなスタックに分散させるためです。もう少し詳しく言うと、ユーザーとコンピューターに他の作業を行うための余裕を与え、時間を節約するためです。クラスターはリソース割り当てにも、別のシステムとしても使用できます。たとえば、高解像度の写真を大量に撮影するカメラマンは、写真のアップロード、修正、レンダリングなどの作業が面倒だと感じるかもしれません。代わりに、それぞれの写真の負荷をRaspberry Piに分散させることができるのです。これにより、複数の作業を並行して行うことができ、その間に自分は旅行についてのブログを書いたりすることができます。

同様に、YouTubeビジネスに参入しようとしているのであれば、動画のアップロードに多くの時間を費やしていることでしょう。終わったら別の動画を見られるよう、アップロードの動作を注視しなければなりません。しかしRaspberry PiのMicrok8sクラスターを使えば、アップロードの負荷を移行して軽減できます。クラスターがあまり大きくなければ、アップロードに必要な時間は少し長くなるかもしれませんが、多少の時間の余裕ができます。このブログを読んでいる方で、この2つの例についてチュートリアルを書きたいという方がいらっしゃいましたらご連絡ください。

Raspberry Piを使う理由

Raspberry Piは一連の小さなシングルボードコンピューターで、世界に大きな変革をもたらしました。元々は英国を拠点とする慈善団体により構築および開発されたもので、テクノロジーに携わりたいと思っている人々に対して教育を提供し、参入ハードルを下げることを目的としています。

「私たちは、コンピューティングとデジタルの力を全世界の人々に届けることを使命としています」– Raspberry Pi財団 

今回のような目的にとってRaspberry Piはとても適しており、機能と比較して非常に安価でありながらも、モデルに応じて広範な特性、ハードウェア、機能を備えています。MicroK8sクラスターは簡単に構築して使うこともできますし、ホームオートメーションに組み入れることもできます。または、サーバー、ディスプレイ、気象観測など、あらゆる目的に利用できます。

使わない理由はない?

Kubernetes、オープンソーステクノロジー、Raspberry Pi、クラスター化、そしてビールは近年多く使われるようになってきたバズワードであり、今でも広く使われています。しかし、これらの用語の意味を知っていることと、その内容と影響を十分に理解することはまったく別の話です。MicroK8sを実行するRaspberry Piのクラスターは、これら5つの用語のうち4つを満たしています。そして、酒好きの大人なら5番目は当然満たしているでしょう。あなたがRaspberry Piを扱う能力と興味を持っているならば、たとえまだ目的がなくても、使ってみない理由はないのではないでしょうか。

Kubernetes

コンテナは今や、本番環境でアプリケーションを実行する方法として事実上の標準となっています。コンテナを管理できることで、効率性の最大化、停止時間の最小化、運用の拡張を実現でき、時間とコストを劇的に削減できます。これはGoogleが開始し、2014年にオープンソース化したプロジェクトで、同社が約15年にわたって大規模な本番ワークロードを実行してきた経験に基づいています。Raspberry Piというタイトルを見てこのブログにたどり着いた方で本番環境の管理を行わない方は、この部分を飛ばして後のMicroK8sのセクションをご覧ください。

Kubernetesとは

Kubernetesは、コンテナのワークロードとサービスを管理する、ポータブルで拡張可能な、オープンソースのプラットフォームで、構成と自動化の両方を促進します。Kubernetesを実行しているのであれば、Kubernetesクラスターも実行していることになります。チュートリアルを読んでいただくとわかるように、クラスターには最低でもワーカーノードとマスターノードが含まれています。マスターはクラスターの望ましい状態を維持し、ワーカーノードがアプリケーションを実行します。これがKubernetesの中心になる原則です。ジョブを分割し、それぞれをコンテナとして物理マシン、仮想マシン、クラウドのどの組み合わせでも実行できるため、ジョブとコンテナは特定のマシンに結び付けられることなく、クラスター全体にわたって抽象化されます。

Kubernetesが解決できる問題とは

どのシステムにおいても、変化に対応できるかどうかが大きな問題となります。実際のところ、システム論はすべて、コンテキストの中における原則について研究しています。より大局的なコンテキストの中でのシステムの構成要素と、その相互関係について見ているのあり、個別にではありません。Kubernetesは、この意味でのコンテキストを可能にします。コンテナやワークロードを個別に扱うと、どのようなインフラでも速度が低下し、作業と人員が増えてしまいます。理論上は、小規模であれば適切に動作するかもしれませんが、システムを本番環境に移行したり、システムがさらに複雑化したりした場合、問題が発生するのが確実です。

コンテナ化されたアプリケーションを使用することで、ホストOSのリソースを分離して性能向上を実現できます。また、リソースを分離し、その活用を最適化します。Kubernetesは、すべてのコンテナが単一のホストOS上で実行されるよう調停するための、器と言えます。これは、すべてのVMインスタンスにホストOSが必要なVMと比べ、リソース消費の点で大きな改善です。

Kubernetesが重要である理由

Kubernetesがバズワードになったのには当然理由があります。Kubernetesには多様な機能と利点がありますが、突き詰めれば自動化による効率です。ワークロードを実行しているコンテナが停止したらどうなるでしょうか? コンテナへのトラフィックが多すぎたら? 行うべき作業が多すぎて、リソースの割り当てが時間の無駄になっている場合はどうなるでしょうか? 機密データを扱う場合や、ワークロードの保護が必要な場合は?  Kubernetesはこうしたすべて問題を解決します。

Kubernetesを使用すれば、すべてのコンテナについてリソースの作成、削除、管理を自動化できます。各コンテナにどれだけのCPUとRAMを割り当てるべきか、プラットフォームに指示します。応答しない、または障害が発生したコンテナは自動的に処理され、ワークロードは再割り当てされて、そのコンテナが回復して稼働が再開するまで再度のアドバタイズは行われません。さらに、Kubernetesではパスワード、SSHキー、Authトークンなどの情報の保存と管理も行えます。このため、コンテナのイメージを再構築する必要なしに、セキュリティのレイヤーの下で展開と更新を行えます。

Kubernetesの最新のリリース候補はテストのため使用でき、Snapstoreで入手できます。最新で最高の開発をテストしてみたいとお考えであれば、このブログを読み終えて、Snapstoreへ行ってみてください。

MicroK8s

Kubernetes(K8s)が評判どおりに優れた製品であれば、次にすべきは同じモデルを別の場所で試してみることでしょう。リソースが厳しく制約され、計算リソースの管理が性能を制限する要因となっている場所です。エッジはどうでしょうか?

MicroK8sとは

MicoK8sはK8sの最も小さく高速なバージョンですが、標準のK8sクラスターの重要な機能が搭載されています。エッジに最適化されており、デバイスの管理に必要なものだけを残して、数十万行のコードが取り除かれています。これにより、あらゆる目的でのKubernetesのシングル(マスター)ノードのクラスターを簡単に展開できます。プロトタイプや開発用の環境で本格的な本番グレードのクラスターを展開する必要なしに、大規模に拡張する前にMicroK8s上ですべてのテストを行えます。

MicroK8sが解決できる問題

一般に、デバイスとデバイスのワークロードは別々に動作するよう開発されます。エッジデバイスは障害が発生しやすく、すべてのデバイスを個別に管理するのは大変な作業をともないます。マスターノードが停止した場合、停止したマスターデバイス下にあるデバイスを修正する方法は標準化されていません。MicroK8sでは、シンプルなUIを使用して、クラスター内のすべてのデバイスを集中管理できます。更新やロールバックから複雑性が取り除かれ、開発者や組織は保有しているデバイスを簡単に管理できるようになります。

MicroK8sが重要である理由

エッジのリソース管理はすでに大きな課題となっています。ここでは、モノのインターネット(IoT)あるいはすべてのインターネット(IoE)ほど、ムーアの法則によって厳しい制限を受けるものはありません。ムーアの法則では大まかに、コンピューターの速度と性能は2年ごとに約2倍になり、価格は低下すると言われています。ほとんどの業界ではシステムの成長や追加によりこの法則に対応していますが、エッジではサイズとリソースの数に厳しい制約があります。

この効果を説明するために最も多く使用されているバズワードには、組み込み用産業デバイスとスマートホームがあります。これは、家庭や工場にあるロボットやデバイスを接続し、通信、学習、意思決定の能力を持たせるというコンセプトです。この能力は、大量の計算や多大なリソース管理なしではハードリミットに達してしまいます。MicroK8sと、その集中型ノード手法により、より多くのリソースが利用可能かつセキュアになり、ワークロードを実行するための拡張性のある方法としてのコンテナの価値をエッジにもたらすことができます。

クラスターコンピューティング

考え方は単純なものです。一連のコンピューター(ノード)をネットワーク上で接続し、リソースを(クラスター内で)共有し、ワークロードをより迅速に、より効率的に、または並列して実行します。クラスターコンピューターには3種類あります。リソースの分配には負荷分散クラスターを使用します。高性能クラスター(スーパーコンピューターとも呼ばれる)は、計算コストの高いワークロードを実行するためリソースをプールします。高可用性クラスターは主に冗長性や障害復旧を重点とするものです。MicroK8sは、これらのどのクラスターにも使用できます。

クラスターコンピューターが重要である理由

クラスターコンピューターは、複数のコンピューターを1つのシステムのように見せるものです。初期のクラスターコンピューティングは、ほとんどがエンタープライズ向けの拡張化ソリューションでした。しかしそれ以後、ここで解説したような他のテクノロジーが発展すると、非常に高い可用性、冗長性による復元性、負荷分散、クロスプラットフォーム管理の自動化、並列処理、リソース共有、オンデマンドキャパシティなどの利点も増えてきました。ここで鍵となるのは、前述のクラスターを効率的に管理できることです。そして、その鍵はK8sにあります。

MicroK8s、クラスター、Raspberry Piに関するこの他の文献

Raspberry Piのウェブサイトには、OctiPiの構築というチュートリアルがあります。これは、すでに説明したのとほぼ同じ目的で、9台のRaspberry Pi(8つはクラスター、1つはクライアント)をサーバーとして使用するための包括的なチュートリアルです。Kubernetesは一切使用していませんが、結果はほぼ同じくらい面白いものです。

最初の段落の繰り返しになりますが、MicroK8sを使ってRaspberry Piクラスターを構築したいと考えているならば、Ubuntuのチュートリアルが役に立ちます。ここにはクラスター構築を開始したり、他の興味深いテクノロジーについてしるための多くの情報があります。

MicroK8sは、CanonicalのKubernetesチームにより構築され、本番グレードのKubernetesを開発者コミュニティに提供しています。これについても、ぜひ詳しく読んでみてください。または、クラスターを構築する予定はない場合でも、MicroK8sに興味がある方には、オンラインの優れたチュートリアルが数多くあります。

最後になりますが、ここで最も重要なバズワードはKubernetesです。あらゆる分野に精通しているか、クラウドビジネスに携わっている方以外はKubernetesについての知識は多くないでしょう。Kubernetesについて学ぶには、お勧めの方法が2つあります。K8sのウェブサイトにはすべてのドキュメントがあります。最初からこのすべてを理解するのは難しいと思いますが、このサイトは優れた情報ソースです。またはUbuntuチュートリアルで、自分のマシン上でMicroK8sが作業するための方法をご覧いただくこともできます。どちらの方法でも、ここで解説したより多くの情報が得られます。

このブログは当初、Rhysの個人ブログとして自分用の情報を蓄積するために開始されたものです。

Newsletter signup

Select topics you’re
interested in

In submitting this form, I confirm that I have read and agree to Canonical’s Privacy Notice and Privacy Policy.

Related posts

We are changing the way you build snaps from GitHub repos

On the 11th March 2020 we introduced a new process for building a snap using GitHub repos to snapcraft.io. Here is all you need to know about this update....

GNOME 3.34 snapcraft extension

We constantly strive to empower developers. Part of that aim extends to making development easier, for example improving build tools and documentation. As an...

An adventure through the Snap Store

An application store with a large number of entries is a double-edged sword. It’s often a good sign of a vibrant, thriving community of software creators,...