コンテナオーケストレーションとは?
Docker Swarm、Mesos、Kubernetesに代表される、複数のコンテナをうまく管理するための仕組み。
コンテナが動作するマシンが一つだと、マシンの故障とともに中で動くシステムもダウンしてしまうため、一つのアプリケーションを複数のコンテナに分けて、複数のマシン上で動作させたい。マシンごとのスペック格差も是正したい。こういった悩みを解決するのがコンテナオーケストレーションツール。
Kubernetesとは
Googleによって開発された、コンテナ化したアプリケーションのデプロイ、スケーリング及び管理を行うための、オープンソースのコンテナオーケストレーションシステム。
...要するにDockerコンテナをうまいことやってくれる無料のシステム。
Kubernetesが誕生した歴史
“Kubernetes”(クベルネテス)は、ギリシャ語で航海長または水先案内人を意味し、サイバネティクス(人工頭脳学)の語源でもある。Kubernetesは、当初Joe Beda、Brendan Burns、Craig McLuckieの3人によって開発が始まり、すぐにBrian GrantやTim Hockinなど、他のGoogleのエンジニアも参加するようになり、2014年中ごろにGoogleから初めて発表された。Kubernetesの開発や設計はGoogleのBorgシステムから強い影響を受けており、Borgのトップコントリビュータの多くが開発に参加している。Google内でのKubernetesのもともとのコードネームはProject Sevenであり、スター・トレックのキャラクターで、優しいBorgである、セブン・オブ・ナインの名前に由来する。Kubernetesのロゴの輪にある7つのスポークは、このコードネームに由来している。
Kubernetes v1.0は2015年7月21日(私の誕生日です!)にリリースされた。Kubernetes v1.0のリリースと同時に、GoogleはLinux Foundationと共同でCloud Native Computing Foundation(CNCF)を設立し、Kubernetesを種となる技術として提供した。2018年3月6日には、KubernetesプロジェクトはGitHubにおけるコミット数で第9位に到達し、コントリビューター数とissue数では、Linuxカーネルプロジェクトに次いで第2位となった。
登場人物
Node...
ノードはKubernetesではワーカーマシン。各ノードはマスターによって管理される。
pod...
Kubernetes上のデプロイの最小単位。1つまたは複数のコンテナ。ネットワークやストレージを共有リソースとしてもつ。コンテナの実行方法に関する使用を持つ。
kube-proxy...
kube-proxyはクラスター内の各nodeで動作しているネットワークプロキシで、KubernetesのServiceコンセプトの一部を実装している。
kubelet...
ポッドによってデプロイされたコンテナがノードで実行されていることの面倒を見るコンポーネント。
Cluster...
特定のnamespaceに属さないリソースのこと。冗長化を担当する。
Master Node...
Controll Planeとも。Kubernetesクラスタ内のリソースの構成と管理に使用するAPIを提供する。
Deployment...
ReplicaSetを管理するリソース。
ローリングアップデートやロールバック等アップデート機能(更新や元に戻す機能)を提供する。
Namespace
同一の物理クラスター上で、複数の仮想クラスターが動作するのをサポートするコンポーネント。
ReplicaSet...
指定したレプリカ数のpodを常に保証してくれるリソース。replicas(pod数), pod template, selector(対象podを特定する情報)というフィールドを持ち、コンテナ数を担保する特性上使用が推奨されない。(Deployまでやってくれないため。)
Scheduller...
コンテナの配置を管理する。新規に作成された各Podや他のスケジューリングされていないPodを稼働させるために最適なNodeを選択。
etcd...
一貫性、高可用性を持ったキーバリューストアで、Kubernetesの全てのクラスター情報の保存場所として利用される。
APIserver...
APIサーバーは、Kubernetes APIを外部に提供するKubernetesコントロールプレーンのコンポーネント。 APIサーバーはKubernetesコントロールプレーンのフロントエンド部分。各nodeに命令を発行する。
kubectl
Kubernetesで利用されるコマンドラインツール。Kubernetesクラスターを制御できる。
ConfigMap
機密性のないデータをキーと値のペアで保存し、podから参照できるようにするもの。コンテナイメージと固有の設定を切り離すことができる。
Secret
機密情報(パスワードやトークン等)を保存・管理し、podから参照するリソース。ファイルの書き方はConfigMapにかなり似ている。
Service
podの集合体を抽象化して公開したもの。podの集合体のDNS名を提供したり、負荷分散を担当する。