始めに
この記事はKubernetesの環境構築の簡易化について考えたものです。実際にソフトウェアを作成したわけではないので悪しからず。
Kubernetesとは
KubernetesはGoogleが2014年にオープンソース化したプロジェクトです。コンテナを管理するソフトウェアで、コンテナは基盤となるホストインフラからアプリケーションを切り離したものです。これにより、さまざまなクラウドやOS環境下でのデプロイが容易になります。
Kubernetesの問題点
問題点として、学習コストが高いことが挙げられます。Kubernetesは拡張性が高く、サポートするアプリケーションの種類を制限しません。アプリケーションがコンテナで実行できるのであれば、Kubernetes上で問題なく実行できると思います。しかし、拡張性が高いということは選択肢が多いことになります。選択肢が多すぎて自分が作成したい環境を構築するために、何をすれば良いのか判断に困ることもあるでしょう。
さらにKubernetesは環境構築をする際にyamlファイルという構成ファイルを記述する必要があります。yamlファイルをコピー&ペーストして作成したとしても、構成ファイルに書いてある記述は1年間のサポートしかされていません。Kubernetesは3ヶ月に1回アップデートしています。更新速度が早いので、サポートが切れるのも早いのです。
解決案
解決案第一版
yamlファイルを自動生成するソフトウェアを作成すれば良いのでは?
使用したいソフトウェアを選択したらyamlファイルが作成されるソフトウェアがあれば実現できる!
解決案の改善案
ソフトウェアに関する知識が無い人が使用できない。
Kubernetesは拡張性が高いあまり、ソフトウェアの選択肢も多大にある。Kubernetesに置ける使用するソフトウェアの選択はKubernetesの環境構築を難解にしている原因のひとつだろう。ソフトウェアの絞り込みを行える機能の追加が求められる。
解決案第二版
木構造で保存した質問による絞り込みを行い、お勧めのソフトウェア構成を提案する。
その後に提案されたソフトウェアを使用した環境構築を行えるようyamlファイルを生成する。
解決案第二版の改善案
Kubernetesは更新速度が早く、例えyamlファイルのテンプレートを作れるようになったとしても、1年たてば構成ファイルの更新が必要になるだろう。質問内容も更新して改善していく必要があります。質問を追加するとき木構造だと、前後関係も更新する必要が出てくる。
解決案第三版(現在)
webサイト作成の際に使用する機能ごとに分類した質問に答えてもらう。webサイトを機能ごとに分類して必要かどうか質問をユーザに答えてもらう。必要となるソフトウェアのリストを作成して、お勧めとして提案する。提案されたソフトウェアリストに則ってyamlファイルを生成する。
設計
目的はwebページ作成とする。
質問
質問を機能ごとに分類する。
- UI
- DB
- 通信
UI
- デザインやシステムを一から作るか?テンプレートを用いて作るか?
- (CMSを用いたいかどうか)
- テンプレートを用いる
- CMSの選択
- 一から作る
- サーバーサイドプログラムの言語選択
DB
- DBを使用するかどうか
- 大量のデータから知りたいデータを取り出すため
- データを高速に検索、追加、削除、変更できるようにしますか?
- 並列的な制御を可能にするため
- データを変更する際に矛盾がないようにする機能は必要ですか?多数の人がアクセスしますか?
- 使うならDBの選択に移る
通信
- 動的なものならapache(cmsならこっちか?)
- アニメーションを多用するページを作りますか?
- 静的なものならNginx
CMSとサーバーサイドプログラム、DBの選択肢はユーザが追加更新できるものとする。
yamlファイル作成
- ソフトウェア別にyamlファイルの内容をDBに保存しておく。
- 使用したいソフトウェアリストに則ってDBからyamlファイルの内容を持ってくる。
- yamlファイルを一部変数を使用してソフトウェアの連携をできる状態にしておく。
- 作成したyamlファイルを用いてPodを作成して、環境構築完了
おわりに
設計に関する内容が具体的ではなく、詳しく詰めていく必要があると感じた。