ようへいの日々精進XP

よかろうもん

Docker コンテナランタイムについて少しだけ勉強した (2)

tl;dr

会社から借りっぱなしの Software Design 2020 年 2 月号で特集されている Docker コンテナランタイムについての記事を読んでみたメモです.

gihyo.jp

読みながら気になる単語や内容をマインドマップにまとめていきたいと思います.

今回は少し踏み込んでコンテナラインタイムについて. (前回はコンテナの基礎でした)

マインドマップ

f:id:inokara:20200418174821p:plain

所感

Kubenetes における...

  • って書いてしまったけど, コンテナランタイムの役割としては, 全般的にここに書かれていることを粛々とやってくれる存在なんだろうなあ

コンテナランタイムって

  • ざっくり言うと, 隔離環境の作成, コンテナイメージの送受信, コンテナの実行等を担う
  • 高レベルランタイムと低レベルランタイムに分けられる

高レベルランタイム

低レベルランタイム

  • 隔離環境の操作

pause コンテナの存在が面白い

www.ianlewis.org

puase コンテナの役割について, 上記のブログにて以下のように書かれている.

In Kubernetes, the pause container serves as the "parent container" for all of the containers in your pod. The pause container has two core responsibilities. First, it serves as the basis of Linux namespace sharing in the pod. And second, with PID (process ID) namespace sharing enabled, it serves as PID 1 for each pod and reaps zombie processes.

ざっくり意訳すると以下のような感じ.

  • pause コンテナは Pod 内コンテナの親コンテナとして機能する
  • pause コンテナには 2 つの役割がある
    • Pod 内の Linux namespace の基礎 (直訳なんだけど, ここがすごく重要な気がしてならない) として機能する
    • PID (プロセス ID) namespce を有効にして, 各ポッドの PID 1 として機能しつつ, ゾンビプロセスの看取り役になる

ちなみに, 実装は以下の通り.

github.com

残念ながら C 言語読めないので詳しい実装はわからないけど, すごくシンプルな実装であることは確か.

kubelet

最近, 少しずつ Kubernetes を触りはじめてきていますが (周りの方々より二, 三周くらい遅れてます), kubelt の存在は全く意識していませんでした. ちなみに, 図中の Kubelt は kubelet の誤りです. すいません.

https://kubernetes.io/ja/docs/concepts/overview/components/ より引用

上図のように各ノード上で動いているエージェントのようなコンポーネントでコンテナが各 Pod 上で動いていることを保証する役割があるようです.

以上

メモでした.

Kubernetes 自体はなかなか触る機会がなかったんですが, このように深堀りしていくと結局, Linux の基礎的な部分や C 言語等の低レイヤーな技術要素を学ぶ必要があることに気づいた次第です.