・Kubernetesとは
・何ができるのか
・Kubernetesを利用できるサービス
Kubernetesとは
別名:k8s
コンテナ化されたアプロケーションのデプロイ、スケーリングなどの自動化するためのプラットフォーム、コンテナオーケストレーションエンジンのこと。
DokerやContaineredなどのコンテナランタムは、単体では複数のホストで構成される大きな規模のプロジェクトでの利用では、構築が難しい。そのため、Kubernetesを利用してそのような規模の開発を行います。
コンテナオーケストレーションはKubernetesの他にも、
・Doker Swarm mode
・Apache Mesos
等が存在するが、一番多く使用されているのがKubernetesである。
何ができるのか
Kubernetesを使用すると以下のことができるようになります。
・宣言的なコードによる管理
・スケーリング/オートスケーリング
・スケジューリング
・リソース管理
・セルフヒーリング
・ロードバランシングとサービスディスカバリ
・データの管理
宣言的なコードによる管理
YAML形式やJSON形式で記述した宣言的なコード(マニフェスト)によって、デプロイするコンテナや周辺リソースを管理できる。
スケーリング/オートスケーリング
コンテナクラスタを形成し、複数のkubernetes Nodeを管理します。
コンテナイメージを元にKubernetes上にコンテナをデプロイする際には、同じコンテナイメージを元にした複数のコンテナをデプロイすることで、負荷分散や耐障害性の確保が可能。
また、負荷に応じてコンテナのレプリカ数を自動的に増減することができる。
スケジューリング
スケジューリングとは、コンテナをKubernetes Nodeにデプロイする際に、どのKubernetes Nodeに配置するかを決定することです。
例えば、ディスクI/Oが多いコンテナには、ディスクがSSDのKubernetes Nodeに配置するなどといった制御が可能。
また、KubernetesクラスタをGCPやAWS、OpenStack上などに構築している場合には、Kubernetes NodeにAvailabilityZoneに識別する付加情報が付与されているため、簡単にマルチゾーンにコンテナを分散配置することが可能。
リソース管理
CPUやメモリの空き情報に従ってスケジューリングを自動で行う。
そのため、ユーザーはどのKubernetes Nodeにコンテナを配置するかを管理する必要がない。
セルフヒーリング
Kubernetesにおいて、重要な機能のひとつである。
Kubernetesは標準でコンテナのプロセス監視を行っており、プロセスの停止を検知すると、再度コンテナのスケジューリングを実行することで、自動的にコンテナの再デプロイを行います。
クラスタのノード障害が起きたり、ノード退避をおこなったりして、そのノード上のコンテナが失われた場合にもサービスに影響なく、アプリケーションを自動復旧できる。
ロードバランシングとサービスディスカバリ
Kubernetesにはロードバランシング機能を有しており、あらかじめ指定した条件に合致するコンテナ群に対して、ルーティングを行うエンドポイントを払い出すことができる。
コンテナのスケール時にエンドポイントとなるサービスへのコンテナの自動追加や削除、コンテナの障害時における自動切り離しやコンテナのローリングアップデート時における事前の切り離しなども自動的に実行してくれる。
また、Kubernetesのサービスを利用することで、サービスディスカバリを行うことも可能。
コンテナを使用したシステムを構築する場合には、機能ごとに独立した小規模なアプリケーションを連携させてシステムを実現する「マイクロサービス」を採用することが一般的です。
データの管理
Kubernetesはetcdと呼ばれるデータストアを採用し、コンテナやサービスに関するマニフェストをそこに保存できる。
また、コンテナが利用する設定ファイルや認証情報などのデータも保存できる。
Kubernetesを利用できるサービス
Kubernetesを利用できるサービスはGoogle Cloud Platformが提供するGoogle Kubernetes Engine(GKE)が最もメジャーである。
その他にもMicrosoft Azureが提供するAzure Kubernetes Service(AKS)やAmazon Web Serviceが提供するAmazon Elastic Kubernetes Service(Amazon EKS)などが存在する。