クラウドの世界で必ず出てくる「コンテナ (Docker)」「オーケストレーション (Kubernetes)」「マイクロサービス」。難しそうな横文字を、お弁当やレストランのたとえで一気にほどいていきます。仮想マシンとの違い、似た用語の整理、試験のひっかけポイントまでまとめてチェックしましょう。
コンテナと仮想マシンの違い
Docker とか Kubernetes とか、IT のニュースでめっちゃ見るんだけど、結局あれ何なの? 名前が強そうすぎて近寄れないんだよね。
ふふ、気持ちはわかるわ。
まずコンテナから。
アプリ本体と、それが動くのに必要なライブラリや設定を、まるごと一つの箱に詰める技術なの。
その箱はどのパソコンやサーバーに持っていっても中身がそのまま動く。
お弁当箱に主菜・副菜・ごはんを詰めて、家でも学校でも同じものが食べられる、そんなイメージね。
その箱を作って動かす道具の定番がDockerよ。
あー、お弁当か! 『私のPCだと動くのに、なんでそっちだと動かないの?』っていうアレが起きないってことだよね。
まさにそれです。
『自分の環境では動いた』問題を防げるのがコンテナの大きな価値ですね。
補足すると、従来の仮想マシン(VM) はゲストOSを丸ごと積むので重いのに対し、コンテナはホストのOSカーネルを共有します。
だから軽くて起動も速いんです。
ふえぇ…VM は OS が入ってて、コンテナは OS を借りる、ってことですかぁ? じゃあ二つはどう使い分けるんですかぁ?
いい質問よ、ほのかさん。
ざっくり覚え方はね、『違うOSを動かしたいなら VM、同じOSでアプリをたくさん軽く動かしたいならコンテナ』。
一軒家(VM)とシェアハウス(コンテナ)の違い、と言ってもいいわ。
対比で整理すると、VM は分離が強くて重い、コンテナは分離はそこそこで軽い。
数値感でいうと VM の起動は分単位、コンテナは秒単位、というイメージで覚えると差が掴みやすいですよ。
Kubernetesによるコンテナ管理
なるほどね。
で、Kubernetes はそのどこに出てくるわけ? 名前長すぎてもう一人だけボス感あるんだけど。
ふふ、ボスで合っていますよ。
Kubernetes(k8s) は、たくさんのコンテナをまとめて指揮する道具です。
これをコンテナオーケストレーションと呼びます。
おーけすとれーしょん…オーケストラの指揮者さん、みたいな感じですかぁ?
そのたとえ、とても上手よ、ほのかさん。
Docker が一つひとつの楽器(コンテナ)だとしたら、Kubernetes は何百もの楽器をまとめて指揮する指揮者。
一台だけなら手で管理できても、数百〜数千になると指揮者がいないと回らないのよ。
k8s の主な仕事は四つ。
自動スケーリング、ロードバランシング、自動復旧、そして無停止で更新するローリングアップデート。
語呂で『増やす・分ける・直す・入れ替える』と覚えると楽よ。
モノリスとマイクロサービス
増やす・分ける・直す・入れ替える! リズムいいじゃん、これは覚えられるわ。
じゃあ次、マイクロサービスってのは?
マイクロサービスは、巨大な一枚岩のアプリを、小さな独立サービスの集まりに分ける作り方です。
対になる従来型がモノリシックアーキテクチャ、いわゆるモノリスですね。
モノリスは…大きな一枚板、なのぉ? なんだか想像しづらいですぅ。
じゃあレストランで考えましょう。
モノリスは一人のシェフが前菜もメインもデザートも全部一人で作る厨房。
マイクロサービスは、前菜担当・メイン担当・デザート担当が別々にいて、それぞれ独立して動く厨房。
どちらにも良し悪しがあるのよ。
メリットは三つ。
第一に独立性で、一つのサービスが倒れても他に波及しにくい。
第二に技術選択の自由で、サービスごとに最適な言語やデータベースを選べる。
第三に必要な部分だけ増強できる柔軟さです。
一方デメリットは、分散するぶん全体が複雑になり、サービス間通信のオーバーヘッドや運用負荷が増える点ですね。
メイン担当が倒れても前菜は出せる、けど連携が大変、ってことか。
マジで一長一短だね。
じゃあ各担当はどうやってやり取りすんの?
全体の入口にAPIゲートウェイを置き、そこから各サービスへ案内します。
サービス間の会話には、HTTPベースで扱いやすいREST APIや、高速なgRPCが使われますね。
レストランの『ご案内はこちら』のホールスタッフが APIゲートウェイってことね。
なんか急に身近になってきた。
サーバレスとクラウドネイティブ
ところでさ、サーバレスってのも聞くんだけど、それもこの仲間なの?
近いけれど別物よ。
サーバレスは、サーバの面倒をクラウド事業者に丸ごと任せて、処理(関数)が必要なときだけ動かす形態。
代表例がAWS Lambdaね。
サーバが無い…わけじゃないんですよねぇ? 名前にだまされそうですぅ。
鋭いですね、ほのかさん。
サーバが消えるのではなく、利用者がサーバを意識しなくてよい、が正しい意味です。
これは試験のひっかけポイントなので要注意ですよ。
似た用語が多くて、頭がこんがらがってきましたぁ…どう整理したらいいのぉ?
では一本の軸で並べましょう。
粒度の大きい順に『モノリス → マイクロサービス → サーバレス』。
右に行くほど一つの単位が小さくなり、運用の責任もクラウド側に寄っていきます。
この矢印を覚えれば一気にスッキリしますよ。
そして、これらをまとめて最大限活かす設計思想をクラウドネイティブと呼ぶの。
推進役の団体がCNCFね。
コンテナもマイクロサービスもサーバレスも、この大きな傘の下にいると思えばいいわ。
コンテナはお弁当、Kubernetes は指揮者、マイクロサービスは担当別の厨房、サーバレスは丸投げ。
全部つながった! クラウドネイティブ、覚えたよ先生!
ふふ、見事なまとめね。
最後に一言で締めるわ。
『軽い箱を作るのがコンテナ、たくさんの箱を指揮するのが Kubernetes、アプリを小分けにするのがマイクロサービス』。
この三本柱を押さえれば、技術要素のこの分野は怖くないわよ。
確認クイズ
大量のコンテナを束ねて、自動スケーリングやロードバランシング・自動復旧などを行うコンテナオーケストレーションツールはどれか。
- Docker
- Kubernetes
- Terraform
- Ansible
こたえを見る
正解: 2. Kubernetes
正解はKubernetes (k8s)。大量のコンテナをまとめ、自動スケーリング・ロードバランシング・自動復旧・ローリングアップデートを行うオーケストレーションツールです。Dockerはコンテナを作って動かす実行ツールで、束ねる役ではありません。Terraformはインフラ構成をコードで管理するIaCツール、Ansibleはサーバの構成管理・自動化ツールで、いずれもコンテナの指揮役ではない点が誤りです。