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 から入ってしまったので、未だに
- マネージド 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に出てくるKubernetes cluster って何のこっちゃ?クラスタリング(Clustering)の概念が関わっているんではなかろうか。 - ts0818のブログ
- Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説
- ノードプール | Kubernetes Engine | Google Cloud
- kube-awsにノードプール機能が追加されました - Qiita
- Kubernetesのない世界 すべてがサーバーレスになる
- コレ1枚で分かる「サーバレスとFaaS」 - ITmedia エンタープライズ
- FaaS(Function as a Service)とは | サーバレス・意味・メリット・クラウドサービスとの違い - 開発 | ボクシルマガジン
- CaaS、Paas、サーバーレス(FaaS,BaaS)の違い あなたはどのサービスを利用しますか - このすみろぐ