こんにちは、クラウドサービス開発部の郷古です。 今回は気に入ったプロジェクトを見つけたので、ちょっと知ってほしい内容として取り上げます。Cloud Native基盤として提供されているKubernetesをシンプルにしたk3sのHCI (Hyper Converged Infrastructure)の概念で作られた"Harvester"を知っていますか?今回はその最新版について見ていきたいと思います。
クラウド基盤、仮想化基盤、そしてkubernetes
kubernetesの有用性とは何なのでしょうか。なぜ、どのような場合に使うべきなのでしょうか? まず、kubernetesには次の機能があります。
冗長化が標準機能で提供ストレージ(ex: csi)が提供ネットワーク(ex: cni、セキュリティ、ロードバランス)の提供リソースの割当管理(CPU、メモリ)機能の利用が可アプリケーションのスケール設定などのスケジューラー機能の利用可アプリケーションの実行のより安定させるのに役に立つ手法となる機能が活用しやすい(ローリングアップデートの利用によるダウンタイム無しのソフトウェア更新など)Kubernetesの巨大なエコシステム(CRI, helm, csi, cniなどなど)が利用できるため生産性が向上するKubernetesのクラウドネイティブな技術スタックによるワークフローなど新しいことに取り組む姿勢が人材引きつけのとして役立つ
これらの利点は、クラウド基盤、仮想化基盤においても必要とされる特徴がいくつもあります。実際、オープンソースクラウド基盤の"OpenStack"において、"OpenStack on Kubernetes(Kubernetes上でOpenStack を動かす)"といプロジェクトの発生でも自動化の仕組みとして活用されています。
アプリケーション、ネットワーク、ストレージを「"アプリケーション"を自動的に動かし続けるための環境としてのKubernetes」をOpenStackのような「インフラア・プリケーション」に適用することで、運用性が向上するということが、すでにいくつかの取り組みにより実現されています。
k3sの発生、Edgeと組み込み
また、Kubernetesはgoで書かれていることで、goのライブラリは静的にリンクされて、バージョンアップで機能が統合されると、バイナリサイズが増えていく傾向にありました。
そのような中、k3s(https://k3s.io/ )は元々Rancher Labs(https://rancher.com/)で開発されていたOSSで、2019/02に発表され、使い方を限定することでコードをスリム化を果たして、Kubernetesのディストリビューションとしては40MB以下の軽量バイナリで提供されることが話題となりました。
コンテナの運用をすでにKubernetesで利用しているしているユーザは、同じ手法で小容量対応のデバイス(エッジデバイス; エッジ・コンピューティング、組み込みに対するCI、IoT機器、開発環境など)にコンテナを利用できるようになります。(その後、Rancher LabsはSUSEグループ入りました)
k3s.ioのサイトhttps://k3s.io/
k3sそのものの話からは外れますが、Kubernetesと組み込み開発の需要は大きく、自動車部品大手のデンソーが、自動車向けにKubernetesを実行するためのソフトウェア「Misaki」(publickey記事参照 )を発表しています。MisakiはCloudの延長環境として車の中のEdgeを定義して、車の中のコンピューターEdge環境にソフトェアをすべてDeployできる場合も、一部だけDeployして残りはクラウド上にある場合にも、サービスメッシュの機能によって同じようなソフトウェア動作を提供しようという試みがあります。この試みは、車の上に分散配置したEdge環境で、一部のCPUが壊れたとしてもEdgeとCloudを含めて動作を停止しないという自動化を実現しようという試みでもあるようです。
Denso "Misaki" サービスメッシュを活用したCar EdgeとCloudでのサービス動作例
"Misaki" slide : https://www.slideshare.net/KentaSuzuki4/kubernetes-based-connected-vehicle-platform-k8sjpt1-k8sjp
米国の事例となりますが、戦闘機F16にKubernetesとIstioを搭載させる試みが紹介され(publickey記事参照) ています。開発のパーツ単位の共通化やDevOps適用でCIにおいてモダン化された開発のチャレンジをまずやってみたといった話が紹介されていたりします。
F16システムにKubernetesを組み込んで兵器システムに活用できると喜んでいるUSA空軍の求人スライド
KubeCon slide youtube F16: https://www.youtube.com/watch?v=YjZ4AZ7hRM0
小さなコントローラk3sとシンプルなストレージLonghorn、VMを稼働するKubeVirtとの出会い: Harvester の登場
そのような中 "Harvester" は登場しました。コンテナにおいて冗長化と自動化を実現するKubernetesの機能性と、CRD(Custom Resource Definition)という拡張性を利用して、小さな仮想化の自動化を実現するソフトウェアにより、"The open source hyperconverged infrastructure (HCI) solution for a cloud native world" いわゆる "HCI : hyperconverged infrastructure" をコンパクトに実現しようというOpen Sourceソフトウェアとなります。
Harvester サイト https://harvesterhci.io/
"Harvester" の中身 (0.2)
"Harvester" の中身はどうなっているのでしょうか。
先ほどの小型"k3s(https://k3s.io/)"が全体のコントローラとなるk3os(https://k3os.io)はk3sが入ったLinux軽量OSのKubernetes実行環境となる同じくRancherが開発していたReplica生成型のKubernetes用のストレージcsiである"Longhorn(https://longhorn.io/)"がKubernetes上でストレージをコントロールするKubernetes上でVMの管理を稼働させることのできる仕組みの"KubeVirt(https://kubevirt.io/)"とKubeVirtの運用のためのCRD(カスタムリソース定義)を組み合わせたvmを管理する部分が導入されている"Harvester"初期構成(ver. 0.1)では、Minio(https://min.io)をS3 object storageを使って、vmイメージレジストリとして使用していましたが、Minioの冗長性の問題などからLonghornを利用したvmイメージレジストリに移行する模様仮想マシンを管理できるweb UIがあります。(youtube DEMO動画: https://www.youtube.com/watch?v=wVBXkS1AgHg)
Longhorn のサイトhttps://longhorn.io/
"Harvester 0.2" の紹介
今回は、ここまでの説明が長くなりましたので、手短にこの記事を書いている時点のリリース("2021-4-30")である"Harvester 0.2"について、大まかな機能と、実現される内容は以下となります。
VM lifecycleを管理できます。ssh KeyのVMへの挿入、Cloud-initの実行、仮想Videoコンソールでの操作、シリアルコンソール操作が可能("KubeVirt": v0.40.0)VMのlive migrationの実現VMのBackupとRestoreの実現分散ブロックストレージの採用("Longhorn" : v1.1.1)仮想マシンとcloud-initのテンプレート化Rancherを使った管理の実装とRancherへのHarvester nodeの管理の提供 ("Rancher": v2.5.7)HarvesterのPXE/iPXEでのOS netbootによる起動のサポート("K3OS": v0.20.4-k3s1r0)認証システムはKubernetesの認証を使用v 0.2以降では、Harvester自身をupgrade可能("Zero downtime upgrade" ただしOS以外)default として、"flannel CNI"を使い、podのネットワーク疎通を実現"Multus CNI"と"Bridge CNI"により、VLANを扱い、VMに複数NICインターフェースを扱える("Multus": v3.6)外部イメージとして、ISOとqcow2イメージを取り込み可能Web UIから操作可能以下①~④のような想定される利用方法がある
オンプレミスのHCI環境としてEdge HCI環境としてHybrid Cloudの実現コンテナとVMのを同じインフラに動作できる
ここまで、機能をざっと見渡しますと、マルチクラウドなCloud Nativeコントローラである"Rancher"から、環境の1つとしてコントロールできるという点がおそらくこのソフトウェアのポイントなのだと目立ちますが、一般的な仮想化の実行環境として必要十分な機能を持っています。
VDIを実行するのがオンプレミスHCIだとすると、たとえば本社 : 店舗システムでの構成で店舗の管理コンピュータのHCIとCloud Native化を進めてDevOpsで更新するようなEdge HCI実行環境や、public cloudとHCIでのHybrid Cloudまたは本社のOpenStack Private CloudとEdge HCIとのHybrid、なども検討できると思われます。
PS. (錦糸町の駅ナカの立ち食いそばも、自動券売機と店舗コンピュータがつながっていて、ネッワークで本部に売り上げを送信されるような、日本的なPOSシステムがあるので、そのうちここにも導入されるのかなぁと、想像したりしていました: 笑)
次回は、"Harvester触ってみた"の記事に進む...かなと。