Murga

個人的に言いたいコト・主張・気持ち。

Kubernetes とか XaaS とかの概念整理

Kubernetes の概念の理解が大変だったので、雑多にまとめる。また、コレに関連して「XaaS」(「なんたら as a Service」系) の話も、自分が調べた範囲でまとめてみる。

Kubernetes 全般

  • Kubernetes は、1つの Master Node が統制を司り (マスター)、複数の Worker Node がその下で動く (スレーブ)。
    • Kubernetes と書くのが長いので K8s と略して書かれたりする。読み方は「クバネテス」「クーバーネイティス」あたり。よく分からん。
  • そもそも Node とは何を指しているかというと、1台のサーバマシンのこと。クラウド時代なので VM (仮想マシン) の場合が多いが、イメージ的には「1台の物理的な PC」を「ノード」と考えて良い。
    • 全体を管理するマスターのパソコンと、その下で冗長構成を取る複数のワーカーパソコンがいる、という感覚で良い。
  • 「Kubernetes クラスタ」というと、Worker ノードが複数いる環境・状況を指す。「クラスタ」はブドウの房のこと。何かいっぱい付いてる感。
  • kubectl は Master ノードの API Server に対して命令を送るコマンド。Worker ノードへの変更なども Master ノードを経由して実現されている。
  • Worker ノードには1つ以上の Pod と、Master と通信するための kubelet というプロセス、Docker などを動かすコンテナランタイムが同梱されている。
  • Pod はデプロイの単位。Kubernetes の構成要素の中で最小単位。
    • 大抵は1つの Pod に1つの Docker コンテナを格納させて使うことが多いので、「1 Pod = 1 Container」とみなせる。
    • しかし、1つの Pod に複数のコンテナを持たせることもできる。その際は kubectl exec 【Pod 名】 --container 【コンテナ名】 といったコマンドを叩くことで、1つの Pod 内の Docker コンテナを指定してアクセスすることになる。

マネージド Kubernetes サービス

  • Master ノードに対する各種のインストール作業や、ネットワーク周りの設定をよき感じに自動化してくれたり、フォローしてくれたりするクラウドサービスが、「マネージド Kubernetes」。Google の GKE とか AWS の EKS とか。
    • 僕はいきなりマネージド K8s から入ってしまったので、未だに etcd とかなんとかがよく分からない。実体を見ずに使ってしまっている感がある…。
  • マネージド K8s だと、Node Pool という言葉が出てくる。コレは、Worker ノードをスケールさせるための機能。
    • deployment.yaml を設定して Pod 数をスケール (増減) させるにしても、Pod (Docker コンテナ) を複数動かす Woker ノードのマシンスペックは超えられない。
    • 物理的にマシンを増やしてスペックを上げたいね → Worker ノードを増やしたいね。ということで登場するのが、ノード・プールという機能。
    • 予め「こういうスペックのワーカーノードを増やしたい」という設定をしておくと、クラウドサービスがいい感じにインスタンス (≒ ワーカーノード) を作ったり消したりしてくれる、というのがノードプール。
    • サービスによっては各ノード (= ワーカーノード) のスペックが違ったりしても上手く協調できるようにしてくれる。よりスケーリングしやすいね、という話。

サーバレス・FaaS

  • マネージド K8s は IaaS がメインになる。
    • Kubernetes 自体はコンテナを使うので CaaS (Container as a Service) なんて言われることもあるが、その実行環境をクラウドに用意するとなると、IaaS が多いかな。
    • 「空っぽのサーバマシンを貸してあげるから好きに設定して使ってね」というのが IaaS (Infrastructure as a Service)。
    • 仮想化技術を使って、1つの物理サーバ内に VM (仮想マシン) を立てて、それが提供されることが基本。昔からある安価な「レンタルサーバ」とよく似ている。
    • 「ベアメタル」という、専有マシンを借りられるサービスもある。昔からある「専用サーバ」というヤツがクラウドサービスとしてより迅速に・便利に提供されている、って感じ。
  • サーバレスというのは、サーバやインフラの管理をクラウドに任せられる、という意味。
  • サーバレスの考え方・仕組みを発展させたのが FaaS (Function as a Service)。
    • あるイベントに応じて、「この関数を実行する」という設定をするだけ。
    • イベントが発生するごとに仮想コンテナが生成され、関数の実行が終わったらコンテナは破棄される。
    • 実行に必要なサーバはサービス側で自動的にスケールされる。
  • PaaS (Platform as a Service) は HTTP リクエストに応じてアプリケーション全体を起動する。FaaS は必要なサービスごと・関数単位で起動・停止を管理できる違いがある。
    • IaaS が一番広く OS や VM・ネットワークから使える。PaaS はアプリの実行環境。FaaS はスクリプトの実行環境。ぐらいの提供範囲が違う。
  • FaaS はイベントドリブンなので、どれだけ高速に処理されるとしても、コンテナの起動に時間がかかる点が気にされる。負荷量が頻繁に変わるようなイベントの場合は、クラウドサービスに任せてスケーリングできるのが便利ではあるが、一つの処理を高速に行うことを追求するなら IaaS になっていくことが多いかも。

参考資料

Kubernetes実践入門 プロダクションレディなコンテナ&アプリケーションの作り方 (Software Design plusシリーズ)

Kubernetes実践入門 プロダクションレディなコンテナ&アプリケーションの作り方 (Software Design plusシリーズ)

  • 作者: 須田一輝,稲津和磨,五十嵐綾,坂下幸徳,吉田拓弘,河宜成,久住貴史,村田俊哉
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/03/02
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る