← 概念辨析に戻る

Concept Contrast Fable

Kubernetesとコンテナ:一方は荷物をどう置くかを管理し、もう一方は荷物をどう詰めるかを管理する

先に結論:コンテナと Kubernetes は同じアーキテクチャ図に頻繁に登場し、時間が経つと誰もが「K8s でコンテナを動かす」と言い、まるで一体のもののように扱う。しかしコンテナが解決するのはプログラムのパッケージングと隔離実行であり、Kubernetes が解決するのは数百のコンテナのスケジューリング、復旧、ネットワーキングである。パッケージング方式とスケジューリング方式は二層のアーキテクチャであり、混ぜて選定すると両層の自由度を同時に縛ることになる。

コンテナと Kubernetes は同じアーキテクチャ図に頻繁に登場し、時間が経つと誰もが「K8s でコンテナを動かす」と言い、まるで一体のもののように扱う。しかしコンテナが解決するのはプログラムのパッケージングと隔離実行であり、Kubernetes が解決するのは数百のコンテナのスケジューリング、復旧、ネットワーキングである。パッケージング方式とスケジューリング方式は二層のアーキテクチャであり、混ぜて選定すると両層の自由度を同時に縛ることになる。

寓話

埠頭调度センターのコンテナとクレーン

大港には多くの標準貨物箱が来て、港全体の泊位を調整する総旗房も来た。港務長は一見似ている二つの事柄を管理している:一つは一つ一つ封をされた貨物箱、もう一つは貨物箱をどの船に載せるか、船が壊れた時にどこへ移すか、人が足りない時にどう補うかの手配だ。新入りの店員は面倒に思い、二冊の帳簿を一冊にまとめ、どうせどちらも成否に関わると考えた。

最初は誰も反対しなかった。新商人は貨物箱があれば良い港があるのと同じだと思い、店主は頁数が減ったのを見て手間が省けたと褒めた。しかし繁忙期になると、旧帳簿は突然説明がつかなくなった。前の屋台が終わっていないのか、後の屋台が守れなかったのか、誰も答えられなかった。

彼らはまずより多くの印とスローガンを補い、各人にもっと詳しく書くよう求めた。結果、冊子は厚くなり、争いは増えた。事が起きたとき、誰もが自分をかばう一言を見つけられたが、どちらを先に救うべきかは誰も分からなかった。

老管事は皆を庭に呼び集め、実際の経過に沿って歩き直させた。目の前の動作に関心のあるものは第一冊に、後続の負担に関心のあるものは第二冊に入れた。二冊は互いに参照し合うが、もはや同じページに混ざることはない。

嵐が来ると、貨物箱は無事だったが、船位は乱れ、冷貨は誰も電源を接続せず、急貨は最下層に押し込まれた。分けた後、多くの古い結論が変わった:ある仕事は賑やかに見えても、実際には厄介を防いでいない。ある配置は普段目立たなくても、災害時に全体を守った。

新人が再び混同しないよう、老管事は彼らにそれぞれ小さな案件を処理させた。二冊の帳簿がそれぞれ自分の問題に答えられ、かつ境界で互いに接続できたときだけ、その小さな案件は合格となる。もし誰かが依然として二つの事柄を一ページに書くなら、現場に戻って誰が先に動き、誰が最後に責任を負うかをもう一度見なければならない。はっきり見えないときは、一度多く問い合わせるほうがましで、曖昧な帳簿を一夜越しにしてはならない。本当に事故が起きる日には、一行の区別が欠けるだけで一隊の人が無駄に忙しくなるからだ。

港務長は貨物箱の標準化を続けさせ、また総旗房に泊位、便数、交換、健康巡回を管理させた。後に新人が入職すると、老管事はただ一言だけ覚えさせた。物を入れる箱は携帯を解決し、箱をさばく港は規模運行を解決する。

Kubernetes

コンテナオーケストレーションプラットフォームで、コンテナのスケジューリング、拡縮、サービスディスカバリ、ロードバランシング、障害復旧を担う。「一群のコンテナをどう協調して動かすか」を管理する。

コンテナ

アプリケーションのパッケージングと実行時分離の技術で、プログラムとその依存関係を標準化された単位に封じ込め、異なる環境で一貫して実行できるようにする。「個々のプログラムをどうパッケージして起動するか」を管理する。

物語の対応

  • コンテナで貨物を統一包装:コンテナは、プログラムと環境を標準単位に梱包する
  • スケジューリングシステムが積み位置と取り出し順を決める:Kubernetes はコンテナの実行位置とライフサイクルを編成する
  • パッケージ契約は梱包とスケジューリングを縛り付ける:全体調達方案が特定層の独立したアップグレードを妨げる
  • 標準ラベルプロトコルが二層を分離:コンテナランタイムの標準インターフェースにより、オーケストレーション層を自由に交換可能

インフラ選定に落とし込む

アーキテクチャレビューでは、コンテナランタイムとオーケストレーションプラットフォームを二つの独立した意思決定に分ける。コンテナランタイムは「何でパッケージし、何で隔離するか」に答え、候補には Docker、containerd などがある。オーケストレーションプラットフォームは「何でスケジュールし、何でサービスディスカバリを行うか」に答え、候補には K8s、Nomad などがある。予算承認書では二行に分け、将来どちらの層も独立して差し替えられる正当な道を残す。

京ICP备2026014272号