Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コンテナランタイムはじめの一歩 / Container Runtime 101

Kohei Ota
August 22, 2020

コンテナランタイムはじめの一歩 / Container Runtime 101

Kohei Ota

August 22, 2020
Tweet

More Decks by Kohei Ota

Other Decks in Technology

Transcript

  1. 自己紹介 名前: 太田 航平 (@inductor) 所属: HPE (Hewlett Packard Enterprise)

    役職: ソリューションアーキテクト (Cloud Native and DevOps) Docker MeetupとかCloud Native Daysの運営、謎のアンバサダー業 好きなこと: 無限にスケールする(無限にスケールするとは言ってない)インフラ
  2. コンテナの仕組み / /home /var /tmp /var/a /var/b /var/c /tmp/d /

    / / / pivot_root pivot_root pivot_root pivot_root あるディレクトリをルートに見せかける pivot_root
  3. コンテナの仕組み / /home /var /tmp /var/a /var/b /var/c /tmp/d /

    / / / namespace namespace namespace namespace ユーザーIDやNW、プロセス空間などを分離する namespace root 10.0.0.1/24 root 10.0.0.2/24 root 10.0.0.3/24 root 10.0.0.3/24
  4. コンテナの仕組み / /home /var /tmp /var/a /var/b /var/c /tmp/d /

    / / / アプリケーションが動作するために必要なファイルたちを tar.gz形式でパッケージングしてこいつらの上にのっけて ... root 10.0.0.1/24 root 10.0.0.2/24 root 10.0.0.3/24 root 10.0.0.3/24 1CPU 2GB 1CPU 2GB 1CPU 2GB 2CPU 4GB nginx on Ubuntu Node on Alpine Ruby on CentOS Debian
  5. /var /tmp コンテナの仕組み / /home /var/a /var/b /var/c /tmp/d /

    / / / 展開したファイルシステムの実行ファイルをプロセスとして起動! 1CPU 2GB 1CPU 2GB 1CPU 2GB 2CPU 4GB nginx on Ubuntu Node on Alpine Ruby on CentOS Debian root 10.0.0.1/24 root 10.0.0.2/24 root 10.0.0.3/24 root 10.0.0.3/24 プロセス起動!
  6. /var /tmp コンテナの仕組み / /home /var/a /var/b /var/c /tmp/d /

    / / / 展開したファイルシステムの実行ファイルをプロセスとして起動! 1CPU 2GB 1CPU 2GB 1CPU 2GB 2CPU 4GB nginx on Ubuntu Node on Alpine Ruby on CentOS Debian root 10.0.0.1/24 root 10.0.0.2/24 root 10.0.0.3/24 root 10.0.0.3/24 プロセス起動! これ1つ1つがコンテナ
  7. /var /tmp コンテナの仕組み / /home /var/a /var/b /var/c /tmp/d /

    / / / 展開したファイルシステムの実行ファイルをプロセスとして起動! 1CPU 2GB 1CPU 2GB 1CPU 2GB 2CPU 4GB nginx on Ubuntu Node on Alpine Ruby on CentOS Debian root 10.0.0.1/24 root 10.0.0.2/24 root 10.0.0.3/24 root 10.0.0.3/24 プロセス起動! これ1つ1つがコンテナ これがコンテナイメージね
  8. コンテナランタイムの役割 • 高レベルランタイム(containerd, CRI-Oなど) ◦ CRI(gRPC over Unix socket)でKubernetes/Dockerと会話するプロセス(Daemonとして常駐) ◦

    コンテナイメージの管理 ◦ 低レベルランタイムのバイナリを実行してコンテナを生成させる • 低レベルランタイム(runC, runsc(gVisor), runnc(Nabla)など) ◦ Daemonではなくバイナリで、高レベルランタイムによって実行される ◦ OCI Specのconfig.jsonを高レベルランタイムから受け取ってコンテナを生成 ◦ Linux namespaceやcgroupの命令を実際に行う
  9. コンテナランタイムの役割(Docker) dockerd docker pull docker run REST API containerd gRPC

    runC OCI(containerd内でJSON のコンフィグを渡しながらバ イナリを直接実行) OCI High level runtime Low level runtime
  10. コンテナランタイムの役割(Kubernetes) Kubernetes kubectl run kubectl apply REST API containerd CRI

    (gRPC) kube-api-serverとかetcdとか kubeletとかいろいろ含む ※CRIは各ノード上のkubeletが喋る runC OCI(containerd内でJSON のコンフィグを渡しながらバ イナリを直接実行) OCI High level runtime Low level runtime
  11. コンテナランタイムの役割(Kubernetes) Kubernetes kubectl run kubectl apply REST API containerd CRI

    (gRPC) kube-api-serverとかetcdとか kubeletとかいろいろ含む ※CRIは各ノード上のkubeletが喋る runC OCI(containerd内でJSON のコンフィグを渡しながらバ イナリを直接実行) OCI High level runtime Low level runtime
  12. Appendix: CRIとOCI Spec • CRI ◦ CNCF(というかKubernetes)が標準化したランタイム規格 ◦ Kubernetesと低レベルランタイムが通信するための API仕様(gRPCによるスキーマ定義

    ) ◦ CRIはOCI SpecのJSONを生成して低レベルランタイムにコンテナの作成等を依頼する • OCI ◦ OCI(Open Container Initiative)が標準化したコンテナの規格 ◦ CRIから受け取ったJSON Specでコンテナを生成(Linuxカーネルのシステムコールの実行含 ) ◦ runCなどの持つ機能を標準化 (OCI Runtime Spec) ◦ コンテナイメージ仕様の標準化 (OCI Image Spec)
  13. runCの仕組み ホストマシン Linuxカーネル コンテナ コンテナ コンテナ runC Docker & CRI

    ファイルシステムの展開 プロセスの初期化 イメージの管理
  14. microVMの仕組み ホストOS microVM microVM microVM Firecracker CLI or REST Client

    ゲストOS ゲストOS ゲストOS ホストカーネルを利用して KVMベースのマシンを起動
  15. コンテナでの利用例 ホストOS microVM microVM microVM Firecracker + runC + containerd

    CLI or REST Client ゲストOS ゲストOS ゲストOS コンテナ コンテナ コンテナ ホストカーネルを利用して KVMベースのマシンを起動