gVisorとは
以下の本を読んでいた時に出てきた単語「gVisor」がよくわからかったので調べました。
そもそもコンテナランタイムとは
Kubernetes、Dockerにおいて高レイヤランタイムと低レイヤランタイムの2種類に分けられます。
高レイヤはKubernetesのノードエージェント(Kubelet)からPod精製などをの支持を処理する階層で、conteinerd、cri-o、rktなどが挙げられる。
実際のコンテナ作成は低レイヤランタイムを使用する。
低レイヤランタイムでは、実際に高レイヤランタイムから受けた支持ともとにコンテナを作成する。runc, gVisor, Nabla Containers, Kata Conteinersなどが挙げられる。
<<ざっくりイメージ>>
gVisorとは
gVisorとはコンテナ型仮想化技術の一種で、OCI Runtime Specification に基づいて作られたDockerやK8Sの低レベルなランタイムを指す。
OCI・・・Open Container Intitativeの略(コンテナ仮想化実装のオープン業界標準策定を目的として設定されたもの)
OCI Runtime Specification・・・OCI Runtime仕様を指し、コンテナのライフサイクルや可能な操作などを定義した標準仕様を指す。
ライフサイクルは以下の通り
- create・・・隔離環境作成
- start・・・コンテナ実行
- kill・・・プロセスkill
- delete・・・コンテナ削除
OCI準拠でありrunc互換の低レイヤランタイム
runcで抱えていた問題として1つのカーネル上ですべてのコンテナが稼働します。
これにより不適切なコンテナが存在した場合による影響が他のコンテナにも及ぶ可能性がありました。
gVisorではコンテナとgVisorカーネルがそれぞれホストカーネルとコンテナを切り離してサンドボックス化できているためそれぞれ独立させて他に影響を与えないようにすることができます。
runcとは
OCIランタイムのデフォルトで利用される「runc」というのがあります。
特徴は以下の通りです。
- OCIによるOCIによるOCIランタイムのリファレンス的実装
- (以前は)コンテナを使う人ほぼ全員が使っているほどシェアが高かった
- Linuxのリソース分離やセキュリティ機能を活用してプロセスの実行隔離環境を実現
- 前身はDockerの一部だったlibcontainerで、DockerがOCP(現OCI)発足の際に譲渡
2019年2月にはセキュリティで脆弱性が発見されるなど近年ではやや問題視されています。
参考にさせていただきました。