ゴイサギ日記

東京でエンジニアとして頑張って何とか生きてます。。ゆる~く更新していきます

【Kubernetes】Kubernetes とは?

f:id:aki517:20200427212811p:plain

私はインフラのことはサッパリなんですが、仕事で Kubernetes(クバネイテイス) なるものに向き合う必要があったので色々と調べた結果をまとめました。いや本当にサーバ/インフラエンジニアの皆さん凄いですね・・

Kubernetes とは

こちらの公式ドキュメントには

Kubernetesは、宣言的な構成管理と自動化を促進し、コンテナ化されたワークロードやサービスを管理するための、ポータブルで拡張性のあるオープンソースプラットホームです。」

(・_・) ・・・

はい、全然わかりません。

というわけで社内の詳しいエンジニアさんに話を聞いたらインフラの歴史含めてで色々と教えてくれました。本当にありがとうございました。

物理サーバの時代

90年代頃はWindows OSの登場などもあり、PCがどんどん普及したのもあり、安く手に入れやすい時代だったので、企業が用途に応じたサーバを何台も持ってWebサービスを運用するスタイルでした。社内やデータセンターとかに設置してました。

f:id:aki517:20200426115748p:plain

ところがこの方法はサービスが大きくなると物理マシンの台数が増え、設置場所や電気代など維持費への影響がとても大きかったのです。また、1つのマシンに1つのアプリケーションが稼働するような構成になるためCPUリソースを十分に使い切れない問題もありました。

f:id:aki517:20200426121352p:plain

仮想サーバの時代

2000年代に入ってから、これらの維持費の問題を解決するために1台の物理マシンに複数の仮想化したマシンを割り当ててアプリケーションを動かす仮想サーバが一般的になってました。Hyper-V型とか言います。こうすることで必要な台数を減らし維持費を抑えれるようになりました。

f:id:aki517:20200426123917p:plain

また、後にこれらをまとめてクラウド上に配置しサービスとして提供する AWS, GCP, Azure, なども出てきました。これによって開発者は物理マシンを自分たちで調達する必要もなくなり、ネット環境とPC1台でWebサービスなどを組めるようになりました。ちなみに自社内で物理サーバを立てて情報サービスを自社内のハードとソフトで運用する方式を「オンプレミス」と言います。

f:id:aki517:20200426140747p:plain

ただ、仮想サーバ単位でOSや環境設定が載るためメモリを多く消費したりパフォーマンスに影響が出ていました。

f:id:aki517:20200426214611p:plain

コンテナ仮想化の時代

そこで登場したのがコンテナです。これは1つのOS上に隔離されたアプリケーションの実行環境を幾つも作るコンテナ仮想化(または単にコンテナ)というのものです。これにより複数OSが共存する状態は無くなり、メモリ効率やパフォーマンスの改善が行えるようになりました。

f:id:aki517:20200426214623p:plain

このコンテナを管理するソフトウェアで有名なのが Docker です。Docker はコンテナ起動に必要なデータセットDockerイメージというものにしてアプリケーションの実行環境の構築を容易にしてくれます。

f:id:aki517:20200426195356p:plain

Dockerイメージはインストーラみたいなものなので、開発メンバーに配布してDockerのコマンドを実行してもらうだけで全員がほぼ同一の環境になるという部分もメリットです。要するに「俺のPCでは動くのに!」という良くある問題を解決してくれます。

f:id:aki517:20200426225941p:plain

Kubernetes登場

巨大なサービスだと複数サーバと、そのサーバに構築されているコンテナ環境を管理する必要が出てきます。例えば以下のような対応です。

・任意のコンテナを複数サーバに同時展開
・負荷が上がるのを想定してサーバ台数を増やす
・負荷が下がった時にサーバ台数を減らす
・異なるサーバでのコンテナ通信を行う

Dockerだけではこの問題を解決することは難しいです。エンジニアが手動で管理するのも大変ですよね・・

これらの問題を解決するのが Kubernetes です! やっと登場、長かった・・・

そして今回はここまでになります。。 というのも、このkubernetes、登場人物が物凄く多いんです!
クラスター, ノード, ポッド, サービス, etc...

次回こそは Kubernets について書いていきたいです。(^_^;

↓続きです。
【Kubernetes】全体像を知る - ゴイサギ日記