0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

AWS,Azure,GoogleCloudなどパブリッククラウドはすごく便利ですが,個人で使うには高いですよね.(貧乏学生にはきちぃ)
一生無料で,使い放題なクラウドがほしいな〜

せや自分で作ればいいやん!

ということでパブリッククラウドを自作してみました(タイトル詐欺?電気代はかかります..実家に)

システム構成は大体下図の通りです(Gemini作).
Gemini_Generated_Image_grq25ugrq25ugrq2.png

宣伝

自作クラウドのコンテナサービス(ECS風)で運用しているポートフォリオサイトです
https://daigo-suhara.com

フェーズ1:kubernetesクラスタ自動構築化

基盤にはkubernetesを採用することにしました.
しかしベアメタルにクラスタ構築するのめんどいなーということで自動的にクラスタ構築してくれるようにしました.

具体的には,Tinkerbellというソフトウェアを使用しています.これによりストレージ空っぽ,電源OFFの状態から,クラスタ構築に必要最低限なパッケージ(kubeadmなど)のみ含んだOSが勝手にインストールされます.
(Tinkerbell:ベアメタルにipxe経由でOSや初期設定を自動的にプロビジョニングしてくれる)
さらにClusterAPI Provider Tinkerbellを使用することで,OSプロビジョニング後のクラスタ構築作業も自動化してくれます.

自分はこれを,ノートPCにmicrok8sで作ったクラスタの上にargocdをインストして,argocdリソースとしてtinkerbell環境を構築しています.

フェーズ2:クラウドコアシステムの作成

まず現状ですが,

  • 認証系(IAM的な)
  • テナント
  • コンテナサービス(ECS)
  • 仮想マシン(EC2)
  • WEBコンソール
  • API

が作成できています.

それぞれの内部システムはgrpcサーバとして切り離されていて,GitHub Actionsでコンテナ化してociレジストリにPushしたものを,ArgoCDが呼び出します.
(*APIはFastAPI,WEBコンソールはReact製です)

コンテナサービスについて

基盤はknativeで動いています.それをFastAPIからの指示に基づいてGo製のシステムで操作しています.

オートスケールやコンテナイメージURLの指定などができます.ソースコードからの継続デプロイ機能はまだ開発できていません.

また,ドメインマッピング機能もあるので,<サービスID>.drkatana.comという名前で公開URLもつきますし,CNAMEでカスタムドメインも設定できます.
スクリーンショット 2026-06-14 13.00.53.png
スクリーンショット 2026-06-14 13.05.56.png

仮想マシンについて

基盤はkubevirtで動いています.ubuntu,fedora,debianなどのテンプレートの他,カスタムociイメージを指定することができます.コア数やメモリ数の指定と,コンソール画面からの操作ができます.
コンソール画面はwebsocketとxterm.jsで実装しています.
スクリーンショット 2026-06-14 13.01.27.png

おわりに

自分用クラウドとしてはOpenStackなどのOSSを使うと楽ですが,自分で1から作るというのは勉強も兼ねつつ,つい時間を忘れて徹夜してしまうくらい楽しむことができたので,ぜひクラウド自作erが増えるといいなと思いました.

謝辞

今回開発作業にあたり,私の無茶なアーキテクチャを実装するコーディング作業の多くを担当してくださったCodexに感謝を表します.

0
1
0

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
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?