Astroの光線のサムネイル。

pubDate: 2024-06-10

author: sakakibara

astro

公開学習

後退

コミュニティ

k8s

多くのサービスを立ち上げたいと考えた場合、サービスの数だけパソコンを用意する必要がある。 だが、それだけハードウェアを揃えるのには高くつく。そこで、単一のマシンの上で新たにマシンをエミュレートすることによってあたかもマシンの上に複数のマシンが動いているように見せることができる。 このように仮想化を支援するソフトウェアやプラットフォームをハイパーバイザーと呼ぶ。

ハードウェアのエミュレーションにはいくつかレベルがある。 一つは完全仮想化技術。これはCPUの命令セットからI/Oデバイスのデバイスドライバーに至るまでを仮想化し、ハードウェアを完全にエミュレーションする技術。 もう一つは準仮想化技術。これは直接的にハードウェアにアクセスせず、ハイパーバイザーが提供してくれるAPIを使用してシステムリソースへアクセスする。

これら仮想化が台頭してきたのは2006年。黎明は2010年。以降は仮想化は当然の技術として普及してきた。

少し遅れる形でcontainer仮想化という技術が出てきた。 先ほどまでの仮想化はハードウェアエミュレーションを使用していたが、contaienr仮想化はプロセスのルートを変更し、ホストOSから切り離すと共に、namespaceという機能を使用して、使用している各リソース(PID, cgroup, hostname, mount …)に別名を与えることによって、container間を独立に保つことに単一のマシン上に複数のマシンが動いているように見せる技術である。 これらはlinuxのkernelの技術を用いているため、linuxの上でlinuxを動かすことしかできない。 (というか、kernelを共通して使用しているので、linuxの上にlinuxがあるという表現は語弊があるかもしれないが)

そのため、container仮想化はオーバーヘッドが少なく、非常に軽く動作する。

container仮想化としてLXC(Linux Container)というソフトウェアは2008年から開発されている。 container仮想化の現代の代名詞とも言えるDockerが出てきたのは2013年からだ。 なお、DockerはLXCの技術を利用していたが、9.0以上からはOS以上のレイヤーの仮想化に対応しているので移植性が高い。

なんと、kubernetesはGoogle社内で2009年ごろから使用されてきた。 OpensSourceとしては2014年から活動している。 (つまり、自分は10年触るのが遅い。) 相当な歴史があり、また、リリースサイクルも非常に短く3ヶ月で新たしいversionがリリースされる。

既に出遅れているが、当然知っておかなければならない技術である。

k8sで何ができるのか?