2021.09.30
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
WikipediaでのKubernetesの説明
Kubernetes(K8s)は、コンテナ化したアプリケーションのデプロイ、スケーリング、および管理を行うための、オープンソースのコンテナオーケストレーションシステムである。
Kubernetes(以下K8s)を知っている方でしたら wiki で書いてあるこの説明はうまくまとまっていると思いますが、知らない方にとっては K8s は何に使うのかさっぱりわからないと思います。
ここで、この説明文を砕いていきますと、
- コンテナ
- デプロイ
- スケーリング
- 管理
- オーケストレーション
とこれらのキーワードが含まれてあります。
どういうことかというと、まず皆さんがすでに日常的に扱っているサーバー(EC2)とコンテナ(docker)についてみていきます。
DevOps環境一例
仮にローカルで開発したソースを jenkins を使って直接 EC2 サーバーへデプロイする形とします。
アーキテクチャはこのようなよくあるシンプルなものです。
このとき、例えば負荷が高いとき、EC2 がオートスケーリングを実行したり、ELB が自動で負荷分散を行ったり、サーバー障害が起きたとき、Route53 が自動でDNSを切り替えたりします。これらは AWS が提供している耐障害性、高可用性の自動サービスでありまして、われわれがいちいちサーバーが落ちたから対応しなければならなく済む。
Docker
そして、docker コンテナを本番環境でも使うことによって、開発環境の docker image を直接利用して同じ環境が作れて、本番と開発の差異を減らすことができます。
本番環境で docker を利用するメリットは大きいですが、docker はそれぞれのコンテナに対してアクションを行えど、例えばコンテナのスケールアウトを行いたい場合、手動で一つずつ元のコンテナイメージからそのコンテナのコピーを作成し、ネットワークを設定することをやらなければならない。
K8s はそのような悩みを解決する。
K8sは何ができるか
docker コンテナは便利であるが、AWS がサーバーに対して提供しているような耐障害性、高可用性の機能は備わっていない。
K8s はコンテナをまとめて管理することができ、上記の AWS でできるようなことコンテナに対して行うことができる。
K8s のデプロイはリソースをサーバーへ直接デプロイするより、容量の少ない docker image をデプロイして構築しますので、速度が速く、
耐障害性に関してはコンテナ全体の死活を監視し、コンテナのプロセスが停止した場合自動修復、自動再起動します。
高可用性に関してはコンテナのオートスケーリングができます。