Kubernetesとは?
複数のホストを束ねてDockerを利用するためのオーケストレーションツール。
分散環境において、透過的にコンテナにアクセスすることができる。
Kubernetesの主な機能
- 複数サーバでのコンテナ管理
- コンテナ間のネットワーク管理
- コンテナの負荷分散
- コンテナの監視
- 無停止でのアップデート
Kubernetesのサーバ構成
マスターサーバ
Kubernetesクラスタ内のコンテナを操作するサーバ。
コマンドを使って、クラスタの構成やリソース操作をする。
複数台からなる分散したノードをまとめて管理することができる。
バックエンドデータベース
etcdと呼ばれる分散キーバリューストア(KVS)を使って、クラスタの構成情報を管理。
クラスタを構築するための設定情報が書き込まれている。
マスターサーバ上に構築するケースもある。
ノード
実際に、Dockerコンテナを動作させるサーバ。
アプリケーションの構成管理
Pod
Kubernetesでは、複数のコンテナをまとめて「Pod」として管理する。
- Podがアプリケーションのデプロイの単位になり、Podの単位でコンテナの作成、開始、停止、削除などの操作を行う。
そのため、Webフロントサーバとデータベースサーバなどの役割の異なる機能を1つのPodに格納してはいけない。 - Pod内の複数のコンテナで仮想NICを共有する構成をとるため、コンテナ同士がlocalhost経由で通信できる。
- 共有ディレクトリを介してログ情報をやりとりすることもできる。
- ノードの中には、複数のPodが配置
ReplicaSet
Kubernetesクラスタ上であらかじめ指定されたPodを作成/起動しておく仕組み
= 「クラス上に決められた数のPodを必ず起動しておくもの」
- ReplicaSetは起動中のPodを監視し、障害など何らかの理由で停止してしまった場合、該当のPodを削除し、新たなPodを起動
= Podが必要な数だけ起動した状態をクラスタ内に作る役目 - クラスタ内にPodをいくつ起動しておくかの値を「レプリカ数」と呼ぶ
- Podの数を動的に変更してオートスケールを実現することも可能
- ReplicaSetにより、アプリケーション開発者はデプロイしたPodがどのような状態かを気にすることが必要なく、常に指定した個数だけPodが起動した状態をKubernetesが維持してくれる
Deployment
PodとReplicaSetをまとめたもので、ReplicaSetの履歴を管理する。
- ReplicaSetのテンプレートを持って、それでReplicaSetを作る。
- 履歴を管理できるので、バージョンを戻すっていったこともできる
- ReplicaSetの作成や更新を定義する
ネットワークの管理
Kubernetesクラスタ内で起動したPodに対して、外部からアクセスするときはサービスを定義する
サービスはKubernetesのネトワークを管理するもの。
サービスによって割り当てられるIPアドレスには、ClusterIPとExternalIPがある。
Cluster IP
クラスタ内のPod同士で通信するためのプラベートIPアドレス。
クラスタ内のPodからClusterIPに向けたバケットは、後述するノード上のProxyデーモンを受け取って、宛先のPodに転送される。
External IP
外部のクライアントから接続するためのパブリックIPアドレス。
新規にPodを起動すると、既存のサービスのIPアドレスとポート番号は、環境変数として参照できるようになる。
Labelによるリソースの識別
Kubernetesではリソースを識別するためにランダムな名前が内部で自動に付与される。
それだと、わかりにくいので、Labelを付けて管理ができます。